得到进程的用户名-转贴

本文介绍了一个C语言程序,该程序能够通过查询进程令牌信息来获取指定进程的运行用户身份。程序使用了Windows API函数,如OpenProcess、OpenProcessToken、GetTokenInformation等,实现了对指定PID进程的所有者SID进行解析,并进一步将SID转换为人可读的用户名和域名。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这是靠查询进程令牌信息得到的。程序如下。

#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;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值