社区
Windows SDK/API
帖子详情
很简单的一个问题,NT中取得进程所属的用户名.
ysai
2005-01-31 10:51:50
RT.
...全文
533
27
打赏
收藏
很简单的一个问题,NT中取得进程所属的用户名.
RT.
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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)
Linux操作系统基础教程
在这一讲
中
,我们主要是了解一下 Linux 的概况,以及对 Linux 有
一个
初步的感性认识。 一.什么是Linux? Linux 是
一个
以 I
nt
el 系列 CPU(CYRIX,AMD 的 CPU也可以)为硬件平台,完全免费的 UNIX 兼容系统,完全...
进程
和线程的区别
简而言之,
一个
程序至少有
一个
进程
,
一个
进程
至少有
一个
线程. 线程的划分尺度小于
进程
,使得多线程程序的并发性高。另外,
进程
在执行过程
中
拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率...
Windows驱动开发系列:
NT
+WDM+WDF
驱动开发系列:
NT
+WDM+WDF 系列1:小白入门经典 系列2:WDM驱动开发 系列3:WDF驱动开发
进程
和线程的区别 转载
简而言之,
一个
程序至少有
一个
进程
,
一个
进程
至少有
一个
线程. 线程的划分尺度小于
进程
,使得多线程程序的并发性高。另外,
进程
在执行过程
中
拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率。...
进程
和线程的区别(重点)
简而言之,
一个
程序至少有
一个
进程
,
一个
进程
至少有
一个
线程. 线程的划分尺度小于
进程
,使得多线程程序的并发性高。另外,
进程
在执行过程
中
拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率。...
Windows SDK/API
1,183
社区成员
22,335
社区内容
发帖
与我相关
我的任务
Windows SDK/API
Delphi Windows SDK/API
复制链接
扫一扫
分享
社区描述
Delphi Windows SDK/API
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章