关于如何取得系统进程所属用户

stivenjia 2007-12-07 12:37:51

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();
}

以上代码能列举出来绝大多数Process所有者但是发现alg.exe,svchost.exe,system.exe却得不到。
请问有什么好的改进方法。
...全文
113 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
stivenjia 2007-12-07
  • 打赏
  • 举报
回复
谁有方法解决这个问题,现在做的还不够完美,PID 为0x00000004,0x00000000,0x000005CC,0x0000067C,0x000006E8,0x0000035C,0x0000098C无法取得不知道大家有什么办法能搞到
stivenjia 2007-12-07
  • 打赏
  • 举报
回复
恩!都是系统核心进程GetLastError给我的信息是15说我的“驱动器不正确”
stivenjia 2007-12-07
  • 打赏
  • 举报
回复
//
LsaEnumerateAccountsWithUserRight(lsaHandle,NULL,(PVOID*)lpEnum,&dwCount);
只能得到系统16个权限。(但xp以后的OS貌似不止16个)
jameshooo 2007-12-07
  • 打赏
  • 举报
回复
那是你权限不够。不过无所谓,取不出来的肯定是系统核心进程
covsno 2007-12-07
  • 打赏
  • 举报
回复
权限不够

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧