HANDLE hProcess = OpenProcess(PROCESS_QUERY_INFORMATION, FALSE, dwID); //Get an open handle to the specified process if( hProcess == NULL ) return NULL;
SID_NAME_USE SNU; //...contains values that specify the type of a security identifier (SID). PTOKEN_USER pTokenUser = NULL; //... identifies the user associated with an access token. __try { if( !OpenProcessToken(hProcess, TOKEN_QUERY, &hToken) ) //...opens the access token associated with a process. { bResult = FALSE; __leave; }
{
HANDLE hProcess = OpenProcess(PROCESS_QUERY_INFORMATION, FALSE, dwID);
//Get an open handle to the specified process
if( hProcess == NULL )
return NULL;
HANDLE hToken = NULL;
BOOL bResult = FALSE;
DWORD dwSize = 0;
static TCHAR szUserName[256] = {0};
TCHAR szDomain[256] = {0};
DWORD dwDomainSize = 256;
DWORD dwNameSize = 256;
SID_NAME_USE SNU; //...contains values that specify the type of a security identifier (SID). PTOKEN_USER pTokenUser = NULL; //... identifies the user associated with an access token. __try
{
if( !OpenProcessToken(hProcess, TOKEN_QUERY, &hToken) ) //...opens the access token associated with a process.
{
bResult = FALSE;
__leave;
}
if( !GetTokenInformation(hToken, TokenUser, pTokenUser, dwSize, &dwSize) )
{
if( GetLastError() != ERROR_INSUFFICIENT_BUFFER )
{
bResult = FALSE ;
__leave;
}
}
pTokenUser = NULL;
pTokenUser = (PTOKEN_USER)malloc(dwSize);
if( pTokenUser == NULL )
{
bResult = FALSE;
__leave;
}
if( !GetTokenInformation(hToken, TokenUser, pTokenUser, dwSize, &dwSize) )
{
bResult = FALSE;
__leave;
}
if( LookupAccountSid(NULL, pTokenUser->User.Sid, szUserName, &dwNameSize, szDomain, &dwDomainSize, &SNU) != 0 )
{
return szUserName;
}
}
__finally
{
if( pTokenUser!=NULL )
free(pTokenUser);
}
return NULL;
} 这是我网上找的代码,可以实现上图结果。但是还不健全,无法显示NETWORK SERVICE