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获取进程的用户名。

关于法定节假日的问题

1995年5月, 中国开始实行每周5天工作制。 1999年9月18日,中国国务院发布《全国年节及纪念日放假办法》,决定增加公众法定休假日。春节、“五一”和 “十一...

阅读全文

CentOS下shadowsocks-libev一键安装脚本

本脚本适用环境: 系统支持:CentOS 内存要求:≥128M 日期:2018 年 06 月 01 日 关于本脚本: 一键安装 libev 版的 Shadowsocks 最新版本。该版本的特点...

阅读全文

在MAC上安装docker并部署oracle12.2

一。在Mac上安装docker。到docker store下载即可。下载地址是:https://store.docker.com/editions/community/docker-ce-desktop-mac。其实我们还可以看到别...

阅读全文

评论已经关闭。