这是靠查询进程令牌信息得到的。程序如下。
#include <windows.h>
#include <stdio.h>
/* */
void GetProcessAuth(long pid)
{
//获得运行进程的用户身份,此处对于8以上的进程没问题,对于8,0进程无法列出(8是Win2000下的,WinXP下为4)
SID_NAME_USE peUse;
HANDLE hp;
HANDLE hToken;
int isok;
char buf[0x400];
char buf1[100];
char buf2[100];
DWORD dwNumBytesRet;
DWORD dwNumBytesRet1;
hp=OpenProcess(0x400, 0, pid);//0x400 is PROCESS_QUERY_INFORMATION
isok=OpenProcessToken(hp, 0x20008, &hToken);//这个0x20008不知道什么,TOKEN_QUERY?
if(isok)
{
isok=GetTokenInformation(hToken, TokenUser, &buf, 0x400, &dwNumBytesRet);
if(isok)
{
dwNumBytesRet=100;
dwNumBytesRet1=100;
isok=LookupAccountSid(NULL, (DWORD *) (*(DWORD *)buf), buf1, &dwNumBytesRet, buf2, &dwNumBytesRet1, &peUse);
if(isok)
{
printf("Run Auth:%s//%s /n", buf2, buf1);
}
CloseHandle(hToken);
}
}
CloseHandle(hp);
}
/* */
int main(int argc, char **argv)
{
long pid;
if(argc != 2)
{
printf(" - %s ProcessId/n", argv[0]);
return 0;
}
pid=strtol(argv[1], 0, 0);
GetProcessAuth(pid);
return 0;
}