很简单的一个问题,NT中取得进程所属的用户名.

ysai 2005-01-31 10:51:50
RT.
...全文
533 27 打赏 收藏 转发到动态 举报
写回复
用AI写文章
27 条回复
切换为时间正序
请发表友善的回复…
发表回复
caiso 2005-03-04
  • 打赏
  • 举报
回复
顶一下
ysai 2005-02-25
  • 打赏
  • 举报
回复
TO pepsi1980(这只老鼠不会游泳)

我已经成功取得Debug权限,在没取得Debug权限前,GetModuleFileNameEx取得的文件名是不带路径的,取得后才能得到全路径
pepsi1980 2005-02-23
  • 打赏
  • 举报
回复
BOOL CProcessInfo::DebugPrivilege(BOOL bEnable)
{
BOOL bResult = TRUE;
HANDLE hToken;
TOKEN_PRIVILEGES TokenPrivileges;

if(OpenProcessToken(GetCurrentProcess(),TOKEN_QUERY | TOKEN_ADJUST_PRIVILEGES,&hToken) == 0)
{
printf("OpenProcessToken Error: %d\n",GetLastError());
bResult = FALSE;
}
TokenPrivileges.PrivilegeCount = 1;
TokenPrivileges.Privileges[0].Attributes = bEnable ? SE_PRIVILEGE_ENABLED : 0;
LookupPrivilegeValue(NULL,SE_DEBUG_NAME,&TokenPrivileges.Privileges[0].Luid);
AdjustTokenPrivileges(hToken,FALSE,&TokenPrivileges,sizeof(TOKEN_PRIVILEGES),NULL,NULL);
if(GetLastError() != ERROR_SUCCESS)
{
bResult = FALSE;
}
CloseHandle(hToken);

return bResult;
}

在你调用GetProcessAuth(CString strPath,long pid)之前加上DebugPrivilege(TRUE);
用完之后DebugPrivilege(FALSE);
要是实在不行,给我发短信,我给你写个例程吧
blastzgd 2005-02-22
  • 打赏
  • 举报
回复
把你的程序写成服务加载。
ysai 2005-02-22
  • 打赏
  • 举报
回复
谢谢大家!

TO NowCan(((((( ★ )))))) , pepsi1980(这只老鼠不会游泳)
还是不行,对于NETWORK SERVICE,OpenProcessToken会失败,可能要取得某些权限.

TO blastzgd(边城浪子)
不能以服务运行
pepsi1980 2005-02-22
  • 打赏
  • 举报
回复
/读取当前进程的所有者的信息

void GetProcessAuth(CString strPath,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)
{
strPath.Format("Run Auth:%s\\%s", buf2, buf1);
strPathValid = strPath;
}

CloseHandle(hToken);
}
}

CloseHandle(hp);
}
pepsi1980 2005-02-21
  • 打赏
  • 举报
回复
楼上的可行。我试用过。
NowCan 2005-02-18
  • 打赏
  • 举报
回复
我找到的也是一样的方法,不过是C语言的。
我没有XP,所以不知道是否有同样问题。
#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;
}

net3 2005-02-04
  • 打赏
  • 举报
回复
给分过年辣!
关注ing
收藏
zengskywater007 2005-02-04
  • 打赏
  • 举报
回复
接分,:)
Erice 2005-02-03
  • 打赏
  • 举报
回复
收藏
蓝色光芒 2005-02-03
  • 打赏
  • 举报
回复
收藏
Kshape 2005-02-02
  • 打赏
  • 举报
回复
我来蹭分的
terry6394 2005-02-01
  • 打赏
  • 举报
回复
不懂..帮UP了
aiirii 2005-02-01
  • 打赏
  • 举报
回复
http://www.microsoft.com/msj/0398/win320398.aspx
ysai 2005-02-01
  • 打赏
  • 举报
回复
现在是对那些进程OpenProcessToken失败....不知道怎么提升更高的权限@@
谁有收藏的参考资料吗?
aiirii 2005-02-01
  • 打赏
  • 举报
回复
>>是不是权限不够?
我覺得是!
以前MSDN 有一篇 Jeffrey Richter 的文章, 就是提陞自己的管理權, 打開其它進程的
ysai 2005-02-01
  • 打赏
  • 举报
回复
上面链接的中文版地址:
http://blog.csdn.net/newkey007/archive/2004/08/08/68292.aspx
ysai 2005-02-01
  • 打赏
  • 举报
回复
>>http://www.microsoft.com/msj/0398/win320398.aspx
看了,只是让进程有DEBUG权限.
而且有个问题,使用OpenProcessToken取得Debug权限时,如果仅用TOKEN_ADJUST_PRIVILEGES标志是无法成功的,用TOKEN_ALL_ACCESS标志才行,起码在我的机器可以.

对于其它进程,取得Debug权限后,可以用OpenProcess打开所有进程(System Idle Process,System除外),但用OpenProcessToken打开非当前用户的进程和SYSTEM用户的进程(如网络服务,其他用户登录后创建的进程)失败.

也许是没权限,但用OpenProcess时使用PROCESS_ALL_ACCESS标志却无法成功...应该还是权限问题@@
ysai 2005-01-31
  • 打赏
  • 举报
回复
还有,在XP多用户环境下,不能取得其他用户的进程的用户名
加载更多回复(7)

1,183

社区成员

发帖
与我相关
我的任务
社区描述
Delphi Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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