15,471
社区成员
发帖
与我相关
我的任务
分享
DWORD JToolHelp::GetProcessUser(HANDLE hProc,char *lpUserName,char *lpDomain,DWORD dwUserSize
,DWORD dwDomainSize,char *lpSystemName)
{
if(lpUserName ==NULL||lpDomain == NULL)
return 0x0000FFFF;
//取得TokenInformation需要的内存长度
HANDLE hToken = NULL;
SID_NAME_USE SidType;
TOKEN_USER *pTokenUser = NULL;
__try
{
if(!OpenProcessToken(hProc,TOKEN_QUERY,&hToken))
{
return 0x0000000F;
}
DWORD dwLength = 0;
GetTokenInformation(hToken,TokenUser,NULL,dwLength,&dwLength);
if(dwLength != 0)
pTokenUser = (TOKEN_USER*)LocalAlloc(LPTR,dwLength);
else
__leave;
if(!GetTokenInformation(hToken,TokenUser,pTokenUser,dwLength,&dwLength))
__leave;
if(!LookupAccountSid(lpSystemName,pTokenUser->User.Sid,lpUserName,&dwUserSize,lpDomain,&dwDomainSize,&SidType))
__leave;
}
__finally
{
if(hToken != NULL)
{
CloseHandle(hToken);
}
if(pTokenUser != NULL)
{
LocalFree(pTokenUser);
OutputDebugString("\r\nLocalFree\r\n");
}
}
return GetLastError();
}