|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Перевод процедуры на делфи
Помогите пжл перевести на делфи. С си плохо. А тут еще и векторы.
Код:
CString GetTokenUserSID(HANDLE hToken) { DWORD tmp = 0; CString userName; DWORD sidNameSize = 64; std::vector<WCHAR> sidName; sidName.resize(sidNameSize); DWORD sidDomainSize = 64; std::vector<WCHAR> sidDomain; sidDomain.resize(sidNameSize); DWORD userTokenSize = 1024; std::vector<WCHAR> tokenUserBuf; tokenUserBuf.resize(userTokenSize); TOKEN_USER *userToken = (TOKEN_USER*)&tokenUserBuf.front(); if(GetTokenInformation(hToken, TokenUser, userToken, userTokenSize, &tmp)) { WCHAR *pSidString = NULL; if(ConvertSidToStringSid(userToken->User.Sid, &pSidString)) userName = pSidString; if(NULL != pSidString) LocalFree(pSidString); } else _ASSERT(0); return userName; } |
#2
|
|||
|
|||
Код:
procedure TForm1.Button1Click(Sender: TObject); var FProcessHandle, FTokenHandle: THandle; FReturnLength: DWORD; FUserToken: PTokenUser; FStringSid: LPWSTR; begin FProcessHandle := OpenProcess(PROCESS_QUERY_INFORMATION, True, GetCurrentProcessId); if FProcessHandle = 0 then begin RaiseLastOSError; Exit; end; if OpenProcessToken(FProcessHandle, TOKEN_QUERY, FTokenHandle) = False then begin RaiseLastOSError; Exit; end; GetTokenInformation(FTokenHandle, TokenUser, nil, 0, FReturnLength); if FReturnLength = 0 then begin RaiseLastOSError; Exit; end; GetMem(FUserToken, FReturnLength); try if not GetTokenInformation(FTokenHandle, TokenUser, FUserToken, FReturnLength, FReturnLength) then begin RaiseLastOSError; Exit; end; if not ConvertSidToStringSid(FUserToken^.User.Sid, FStringSid) then begin RaiseLastOSError; Exit; end; finally FreeMem(FUserToken); end; MessageBox(Handle, FStringSid, nil, 0); end; |
Этот пользователь сказал Спасибо Zorkov Igor за это полезное сообщение: | ||
xteam777 (12.05.2018)
|
#3
|
|||
|
|||
Примного благодарен!!!
|