下面是我的程序,pid为进程ID,函数返回的是进程用户名,
我的程序把大部分的进程用户名给列出来了,但还有三分之一没获得用户名
请高手指点
CString CProcessManageDlg::GetProcessAuth(long pid)
{
SID_NAME_USE peUse;
HANDLE hp;
HANDLE hToken;
int isok;
CString strPathValid;
char buf[0x400];
char buf1[100];
char buf2[100];
DWORD dwNumBytesRet;
DWORD dwNumBytesRet1;
hp=OpenProcess(PROCESS_ALL_ACCESS, false, pid);
if(NULL==hp)
MessageBox("duan");
//hp=OpenProcess(0x400,0,pid);
isok=OpenProcessToken(hp,0x20008,&hToken);
if(isok)
{
isok=GetTokenInformation(hToken,TokenUser,&buf,0x400,&dwNumBytesRet);
if(isok)
{
dwNumBytesRet=200;
dwNumBytesRet1=200;
isok=LookupAccountSid(NULL,(DWORD*)(*(DWORD*)buf),buf1,&dwNumBytesRet,buf2,&dwNumBytesRet1,&peUse);
if(isok)
{
strPathValid.Format("%s",buf1);
}
CloseHandle(hToken);
}
}
CloseHandle(hp);
return strPathValid;
}
我的程序把大部分的进程用户名给列出来了,但还有三分之一没获得用户名
请高手指点
CString CProcessManageDlg::GetProcessAuth(long pid)
{
SID_NAME_USE peUse;
HANDLE hp;
HANDLE hToken;
int isok;
CString strPathValid;
char buf[0x400];
char buf1[100];
char buf2[100];
DWORD dwNumBytesRet;
DWORD dwNumBytesRet1;
hp=OpenProcess(PROCESS_ALL_ACCESS, false, pid);
if(NULL==hp)
MessageBox("duan");
//hp=OpenProcess(0x400,0,pid);
isok=OpenProcessToken(hp,0x20008,&hToken);
if(isok)
{
isok=GetTokenInformation(hToken,TokenUser,&buf,0x400,&dwNumBytesRet);
if(isok)
{
dwNumBytesRet=200;
dwNumBytesRet1=200;
isok=LookupAccountSid(NULL,(DWORD*)(*(DWORD*)buf),buf1,&dwNumBytesRet,buf2,&dwNumBytesRet1,&peUse);
if(isok)
{
strPathValid.Format("%s",buf1);
}
CloseHandle(hToken);
}
}
CloseHandle(hp);
return strPathValid;
}
会不会是有些openprocess的时候 权限不够啊。查查在哪里出问题了就好办了。
hp=OpenProcess(PROCESS_ALL_ACCESS, false, pid);
hp经常为NULL,但是PROCESS_ALL_ACCESS不是已经是最大权限了吗
郁闷
你那样子写 是想打开进程,并且拥有所有权限,呵呵。
人家有的进程不想给你那么多权限,所以你就失败了
btw:赶紧结贴啊 。 等你加分呢 我可是新手。hoho
http://blog.csdn.net/chenhui530/archive/2007/12/10/1928399.aspx
应该有别的方法去提升相应的权限啊!在线等