1,目的
在第一篇介绍了枚举当前进程及关闭进程的方法。
这里介绍另一种方法,枚举的同时我们能获取到更多信息。比如是用户名(System或Administrator等)
2,代码
未使用Unicode字符集。
#include "stdafx.h" #include <Windows.h> #include <WtsApi32.h> #pragma comment( lib, "Wtsapi32.lib" ) int main(int argc, char* argv[]) { DWORD dwCount = 0; PWTS_PROCESS_INFO pi = { 0 }; int i = 0; DWORD dwSize = 0; char szUserName[128] = { 0 }; SID_NAME_USE nameuse = SidTypeUser; if( WTSEnumerateProcesses(NULL, 0, 1, &pi, &dwCount) ) { //这里就已经获取了进程个数:dwCount,和一个存储各进程WTS_PROCESS_INFOW中4个信息的列表:pi //遍历列表 for( i = 0; i < dwCount; i++ ) { //进程ID = pi[i].ProcessId //进程名 = pi[i].pProcessName //进程SessionId = pi[i].SessionId //进程UserSid = pi[i].pUserSid //下面通过UserSid获取这个进程的用户名,保存在szUSerName memset( szUserName, 0, sizeof(char) * 128 ); dwSize = 128; LookupAccountSid(NULL, pi[i].pUserSid, szUserName, &dwSize, NULL, &dwSize, &nameuse); } } WTSFreeMemory( pi ); return 0; }
3,说明
函数WTSEnumerateProcesses 枚举当前进程,得到进程总数,存储每个进程的WTS_PROCESS_INFO结构信息到一个列表pi。
WTS_PROCESS_INFO结构内容:(这里就列出ANSI版)
typedef struct _WTS_PROCESS_INFOA { DWORD SessionId; // session id DWORD ProcessId; // process id LPSTR pProcessName; // name of process PSID pUserSid; // user's SID } WTS_PROCESS_INFOA, * PWTS_PROCESS_INFOA;
我们自己遍历这个列表,获取相关信息。
这里使用 LookupAccountSid函数可以通过UserSid获取进程的用户名。
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END