利用服务枚举进程

枚举进程的方法有许多,简单说一下它们的优缺点。

1.利用CreateToolhelp32Snapshot来枚举,这是最常用,也最简单的方法了,不用多说。

2.利用ZwQuerySystemInformation从ntdll.dll中获取,需要定义结构体SYSTEM_PROCESS_INFORMATION,还有对应的函数指针,但是要注意一点,申请内存之后,要判断ZwQuerySystemInformation的返回值是不是STATUS_INFO_LENGTH_MISMATCH,如果是,说明内存不足,要重新申请更大的。

3.利用PSAPI.DLL中提供的EnumProcesses,EnumProcessModules等函数来获取,这种方法是去打开进程,因此对于权限的要求特别高,即使加上提权代码,或者以管理员权限运行,仍然有许多进程信息得不到,但是它可以得到部分进程完整路径。根据自己的需求来选择。

4.利用服务中的WTSOpenServerA,WTSEnumerateProcessesA函数来得到,下面重点说说这种方法。

#include <windows.h>
#include <stdio.h>
#include <Wtsapi32.h>

#pragma  comment (lib,"Wtsapi32.lib")

int main()
{
	WCHAR* szServerName = L"";   //win10 不需要
	HANDLE WtsServerHandle = WTSOpenServer(szServerName);

	// 然后开始遍历终端服务器上的所有进程,这里我们是指本机的所有进程.

	PWTS_PROCESS_INFO pWtspi;
	DWORD dwCount;

	if (!WTSEnumerateProcesses(WtsServerHandle, 0, 1, &pWtspi, &dwCount))
	{
		int a = GetLastError();
		return 0;
	}

	for (DWORD i = 0; i < dwCount; i++)
	{
		printf("ProcessID: %d (%ls)\n", pWtspi[i].ProcessId,
			pWtspi[i].pProcessName);
	}

	getchar();
}

  win10下已经提供了Wtsapi32.lib,Wtsapi32.dll等,因此程序简化了很多,只是对于服务名szServerName,看资料以前的操作系统要主机的名字,NetBios指定的终端服务名,可以通过在控制台命令行下用 nbtstat –n 来获取本机NetBios名,我这样做了之后,却发现无法枚举,调用GetLastError()函数,错误是0x000006BA   ,RPC 服务器不可用。将RPC重启后还是不行,最后上网查了,原来win10下不需要这个名字。终于枚举成功了。

对于比较旧的操作系统,建议用函数指针的方法实现:

typedef HANDLE(WINAPI *WTSOPENSERVER)(LPTSTR ServerName);

typedef BOOL(WINAPI *WTSENUMERATEPROCESSES)
(
	HANDLE ServerHandle,   // WTSOpenServer返回的句柄.
	DWORD Reserved,   // 保留值 0.
	DWORD Version,    // 指定枚举要求的版本,必须为 1.
	PWTS_PROCESS_INFO* ProcessInfo, // 存放我们要的进程名和进程id.
	DWORD* Count     // 存放ppProcessInfo里WTS_PROCESS_INFO结构数量指针.
	);

	HMODULE WtsApi32Handle = LoadLibrary(L"wtsapi32.dll");

	WTSOPENSERVER WtsOpenServer = (WTSOPENSERVER)
		GetProcAddress(WtsApi32Handle, "WTSOpenServerA");

	WTSENUMERATEPROCESSES WtsEnumerateProcesses =
		(WTSENUMERATEPROCESSES)
		GetProcAddress(WtsApi32Handle, "WTSEnumerateProcessesA");

  

 

时间: 2024-12-18 00:20:17

利用服务枚举进程的相关文章

利用服务动态注册广播

在ContextWrapper类中有一个方法registerReceiver(BroadcastReceiver receiver, IntentFilter filter) 该方法可以实现动态注册广播接受者 receiver = new ScreemRecevicer(); IntentFilter filter = new IntentFilter(); filter.addAction("android.intent.action.SCREEN_OFF"); filter.add

一步一步学会http获取tomcat服务端的图片,在android客户端显示

最简单的利用服务端来下载图片到客户端上面,刚开始接触,记录一下,同时希望帮助到新人. 在看本篇文章之前,你可以先看下这两篇文章 加载web项目时报的错误:Tomcat version 6.0 only supports J2EE 1.2, 1.3, 1.4, and Java EE 5 Web modul http://blog.csdn.net/harryweasley/article/details/45723443 Eclipse无法启动tomcat http://blog.csdn.ne

Xamarin.Android其他类型的服务

一.前言 前面我们已经学了关于服务的很多知识,但是对于真实的开发那些远远不够,通过这节我们将学习其他类型的服务,比如前台服务.IntentService和消息服务.下面我们开始进入正题. 二.前台服务 顾名思义,就是拥有前台的优先等级.当然服务还是不可见的.因为前面我们介绍过Android系统会在低内存的情况下将一些长时间不用的应用关闭,如果还是不够,那么就会通过关闭服务服务来达到目的,然而对于某些应用而言,这样将会影响用户的正常使用.比如听音乐,我们基本上都会打开应用选择歌曲后将应用置为后台.

分享在Linux下使用OSGi.NET插件框架快速实现一个分布式服务集群的方法

在这篇文章我分享了如何使用分层与模块化的方法来设计一个分布式服务集群.这个分布式服务集群是基于DynamicProxy.WCF和OSGi.NET插件框架实现的.我将从设计思路.目标和实现三方面来描述. 1 设计思路 首先,我来说明一下设计思路.我们先来看看目前OSGi.NET插件框架的服务.在这里,服务不是远程服务,它是轻量级的服务,由接口和实现类组成,如下图所示.服务契约插件定义了服务接口,服务实现插件向服务总线注册服务,服务调用插件利用服务契约(接口)从服务总线获取实现的服务并调用,服务实现

C# 6 与 .NET Core 1.0 高级编程 - 39 章 Windows 服务(上)

译文,个人原创,转载请注明出处(C# 6 与 .NET Core 1.0 高级编程 - 39 章 Windows 服务(上)),不对的地方欢迎指出与交流. 章节出自<Professional C# 6 and .NET Core 1.0>.水平有限,各位阅读时仔细分辨,唯望莫误人子弟. 附英文版原文:Professional C# 6 and .NET Core 1.0 - Chapter 39 Windows Services --------------------------------

一个校园实验室的纳新试题——(2)我的服务端开发笔试题

晚上整理 一个校园实验室的纳新题——(1)资源整理 http://www.cnblogs.com/corvoh/p/4869403.html 服务端开发笔试题 1.简述const与define的区别. 在PHP中定义常量时,const与define的区别: 用const使得代码简单易读,const本身就是一个语言结构,而define是一个函数.另外const在编译时 要比define快得多.在PHP 5.3.0 以后,可以使用const关键字在类定义的外部定义常量,先前版本const 关键字只能

android基础知识之服务

##01_start开启服务的生命周期(重点) * 服务的特点:         服务被创建时调用onCreate.onStartCommand:           服务只能被创建一次,可以开启多次onStartCommand:           服务只能被停止一次onDestroy:         没有onPause.onStop.onResume.onRestart方法,因为service没有界面,长期运行在后台. * 生命周期的方法:         onCreate:服务被创建的时

SOA之(4)——服务实现的途径

服务实现的途径(Service Implementation Mediums) 将SOA看成是一个架构模型非常重要,它独立于任何技术平台.对于企业来说,可以根据它当前自身的技术优势来实现SOA,从而达到战略目标. 当前,服务可以通过以下三种方式实现: 组件(component) Web服务(Web service) REST服务(REST service) (以上三种是Thomas Erl在SOA Design Patterns里提出的) 本质上说,我们选取任何技术在一个分布式系统中实现SOA.

每日学习心得:SharePoint 2013 自定义列表项添加Callout菜单项、文档关注、SharePoint服务端对象模型查询

前言: 前一段时间一直都比较忙,没有什么时间进行总结,刚好节前项目上线,同时趁着放假可以好好的对之前遇到的一些问题进行总结.主要内容有使用SharePoint服务端对象模型进行查询.为SharePoint 自定义列表项添加callout菜单.希望能够给大家带来一些帮助. 1.  在aspx页引用可视化Web部件 有时候会需要在页面中引用项目中创建的可视化Web部件,具体步骤有以下这几步: 1) 在aspx页面顶部注册该可视化Web部件 示例如下: <%@ Register Tagprefix=&qu