CString cstrUserID;
bool bRet = true;
HANDLE hToken = NULL;
LPBYTE buffer =NULL;
LPTSTR pszSID = NULL;
do
{
if ( !OpenProcessToken( GetCurrentProcess(), TOKEN_QUERY, &hToken ) )
{
bRet = false;
break;
}
DWORD dwBufferSize = 0;
if ( !GetTokenInformation( hToken, TokenUser, NULL, 0, &dwBufferSize ) &&
( GetLastError() != ERROR_INSUFFICIENT_BUFFER ) )
{
bRet = false;
break;
}
buffer = new byte[dwBufferSize];
SecureZeroMemory(buffer, dwBufferSize * sizeof(byte));
PTOKEN_USER pTokenUser = reinterpret_cast(buffer);
if ( !GetTokenInformation(
hToken,
TokenUser,
pTokenUser,
dwBufferSize,
&dwBufferSize))
{
bRet = false;
break;
}
if ( !IsValidSid( pTokenUser->User.Sid ) )
{
bRet = false;
break;
}
PSID pSid = pTokenUser->User.Sid;
if ( !ConvertSidToStringSid(pSid, &pszSID) )
{
bRet = false;
break;
}
cstrUserID = pszSID;
} while (false);
if (buffer)
{
delete []buffer;
buffer = NULL;
}
if (pszSID)
{
LocalFree( pszSID );
pszSID = NULL;
}
if (hToken)
{
CloseHandle( hToken );
hToken = NULL;
}
return cstrUserID;
//注意包含头文件 #include
vc获取当前用户sid
最新推荐文章于 2023-03-17 13:43:03 发布