1. BOOL WINAPI EnumServicesStatusEx(
  2. _In_ SC_HANDLE hSCManager,
  3. _In_ SC_ENUM_TYPE InfoLevel,
  4. _In_ DWORD dwServiceType,
  5. _In_ DWORD dwServiceState,
  6. _Out_opt_ LPBYTE lpServices,
  7. _In_ DWORD cbBufSize,
  8. _Out_ LPDWORD pcbBytesNeeded,
  9. _Out_ LPDWORD lpServicesReturned,
  10. _Inout_opt_ LPDWORD lpResumeHandle,
  11. _In_opt_ LPCTSTR pszGroupName
  12. );
函数作用:枚举指定SCM数据库中的驱动
参数:
1. hSCManager:SCM数据库句柄,由OpenSCManager 函数获得, 获同时需要具有SC_MANAGER_ENUMERATE_SERVICE权限
2. InfoLevel:返回哪种服务属性。目前只定义了一种SC_ENUM_PROCESS_INFO,用来获取名字和服务状态信息,这种情况下,lpServices是一个缓冲区指针,用来接收一个ENUM_SERVICE_STATUS_PROCESS结构体数组,缓冲区大小一定要足够大,以容纳结构体以及它们成员所指向的字符串。
3. dwServiceType:要枚举的服务类型
Value Meaning
SERVICE_DRIVER
0x0000000B

Services of type SERVICE_KERNEL_DRIVER and SERVICE_FILE_SYSTEM_DRIVER.

SERVICE_FILE_SYSTEM_DRIVER
0x00000002

File system driver services.

SERVICE_KERNEL_DRIVER
0x00000001

Driver services.

SERVICE_WIN32
0x00000030

Services of type SERVICE_WIN32_OWN_PROCESS and SERVICE_WIN32_SHARE_PROCESS.

SERVICE_WIN32_OWN_PROCESS
0x00000010

Services that run in their own processes.

SERVICE_WIN32_SHARE_PROCESS
0x00000020

Services that share a process with one or more other services. For more information, see Service Programs.

4. dwServiceState:要枚举的服务状态,
Value Meaning
SERVICE_ACTIVE
0x00000001

Enumerates services that are in the following states: SERVICE_START_PENDING, SERVICE_STOP_PENDING, SERVICE_RUNNING, SERVICE_CONTINUE_PENDING, SERVICE_PAUSE_PENDING, and SERVICE_PAUSED.

SERVICE_INACTIVE
0x00000002

Enumerates services that are in the SERVICE_STOPPED state.

SERVICE_STATE_ALL
0x00000003

Combines the SERVICE_ACTIVE and SERVICE_INACTIVE states.

5. lpServices[out, optional] :缓冲区指针,用于接收状态信息。数据的格式取决于第二个形参InfoLevel的值。

数组的最大大小是256K字节。为了获取实际需要的大小,我们可以将此形参赋值为NULL,同时将下一个形参cbBufSize赋值为0,pcbBytesNeeded返回的就是实际的数组大小,同时函数调用失败并返回ERROR_MORE_DATA。XP和2003下,数组的最大大小是64K 字节
6. cbBufSize:缓冲区大小
7. pcbBytesNeeded[out]:指针变量,如果缓冲区太小,该指针指向的变量存储返回剩余服务信息所需要的字节大小。
8. lpServicesReturned [out]:一个指向实际返回的服务的个数
9. lpResumeHandle [in, out, optional]:一个指向变量的指针。在输入上,指定枚举的开始点;在第一次调用EnumServicesStatusEx函数时,指针指向的变量必须设置为0。在输出上,如果函数成功,那么指向的变量的值为0。但是,如果函数返回0,且GetLastError函数得到了ERROR_MORE_DATA错误码,则这个值表示下一个服务的开始点,可以用作下次枚举lpResumeHandle的值。
10. pszGroupName [in, optional] :服务组名字。如果该形参是一个字符串,那么只枚举指定服务组的服务。如果形参为空字符串"",那么只枚举不属于任何服务组的服务。如果形参为NULL,那么枚举所有服务。
 
返回值:
成功返回非0;失败返回0。失败时可以用GetLastError获取错误码
Return code Description
ERROR_ACCESS_DENIED

The handle does not have the SC_MANAGER_ENUMERATE_SERVICE access right.

ERROR_MORE_DATA

The buffer is too small. Not all data in the active database could be returned. The pcbBytesNeeded parameter contains the number of bytes required to receive the remaining entries.

ERROR_INVALID_PARAMETER

An illegal parameter value was used.

ERROR_INVALID_HANDLE

The handle is invalid.

ERROR_INVALID_LEVEL

The InfoLevel parameter contains an unsupported value.

ERROR_SHUTDOWN_IN_PROGRESS

The system is shutting down; this function cannot be called.

说明:如果没有SERVICE_QUERY_STATUS权限,那么服务将会被静默忽略,不会返回任何信息。

本文链接:http://www.cnblogs.com/cposture/p/4720685.html

【原创】驱动枚举之EnumServicesStatusEx的更多相关文章

  1. 【原创】驱动枚举之QueryServiceStatus

    BOOL WINAPI QueryServiceStatus( _In_ SC_HANDLE hService, _Out_ LPSERVICE_STATUS lpServiceStatus ); 函 ...

  2. 原创C# 枚举 多状态 操作

    C# 中枚举类型是一种值类型,目前(vs2012)还不能用于泛型. 此类型最多的用处是标识一组相同类型的状态量或常量,比如: 状态量 示例一 [Flags] public enum Connectio ...

  3. [11]Windows内核情景分析---设备驱动

    设备驱动 设备栈:从上层到下层的顺序依次是:过滤设备.类设备.过滤设备.小端口设备[过.类.过滤.小端口] 驱动栈:因设备堆栈原因而建立起来的一种堆栈 老式驱动:指不提供AddDevice的驱动,又叫 ...

  4. 给Source Insight做个外挂系列之一--发现Source Insight

    一提到外挂程序,大家肯定都不陌生,QQ就有很多个版本的去广告外挂,很多游戏也有用于扩展功能或者作弊的工具,其中很多也是以外挂的形式提供的.外挂和插件的区别在于插件通常依赖于程序的支持,如果程序不支持插 ...

  5. Source Insight 插件

    一提到外挂程序,大家肯定都不陌生,QQ就有很多个版本的去广告外挂,很多游戏也有用于扩展功能或者作弊的工具,其中很多也是以外挂的形式提供的.外挂和插件的区别在于插件通常依赖于程序的支持,如果程序不支持插 ...

  6. [BZOJ3209]花神的数论题 组合数+快速幂

    3209: 花神的数论题 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 2498  Solved: 1129[Submit][Status][Disc ...

  7. Linux应急响应

    1.识别现象 top / ps -aux 监控与目标IP通信的进程 while true; do netstat -antp | grep [ip]; done 若恶意IP变化,恶意域名不变,使用ho ...

  8. 最全Linux应急响应技巧 【转】

    概述 Linux环境下处理应急响应事件往往会更加的棘手,因为相比于Windows,Linux没有像Autorun.procexp这样的应急响应利器,也没有统一的应急响应处理流程.所以,这篇文章将会对L ...

  9. [置顶] 自娱自乐7之Linux UDC驱动2(自编udc驱动,现完成枚举过程,从驱动代码分析枚举过程)

    花了半个月,才搞定驱动中的枚举部分,现在说linux的枚举,windows可能有差别. 代码我会贴在后面,现在只是实现枚举,你可能对代码不感兴趣,我就不分析代码了,你可以看看 在<自娱自乐1&g ...

随机推荐

  1. 支持向量机(SVM)利用网格搜索和交叉验证进行参数选择

    上一回有个读者问我:回归模型与分类模型的区别在哪?有什么不同,我在这里给他回答一下 : : : : 回归问题通常是用来预测一个值,如预测房价.未来的天气情况等等,例如一个产品的实际价格为500元,通过 ...

  2. C++解题报告 : 迭代加深搜索之 ZOJ 1937 Addition Chains

    此题不难,主要思路便是IDDFS(迭代加深搜索),关键在于优化. 一个IDDFS的简单介绍,没有了解的同学可以看看: https://www.cnblogs.com/MisakaMKT/article ...

  3. Oracle中将Clob字段转换成字符串

    1. 利用dbms_lob.substr()方法可将对应字段转换成字符串如下 select dbms_lob.substr(content) from NEWS 该方法有个缺点,当content字段长 ...

  4. redis学习-散列表常用命令(hash)

    redis学习-散列表常用命令(hash)   hset,hmset:给指定散列表插入一个或者多个键值对 hget,hmget:获取指定散列表一个或者多个键值对的值 hgetall:获取所欲哦键值以及 ...

  5. CSS3新增特性及知识学习线路

  6. SaaS应用十大关键NFR - 第2部分

    SaaS应用十大关键NFR - 第2部分 在继续上一篇关于SaaS应用的十大关键NFR的博客之后,我们来看看接下来的5个对SaaS解决方案架构产生深刻影响的关键NFR. SaaS应用的关键NFR 多租 ...

  7. nginx三种安装方法(转载)

    Nginx是一款轻量级的网页服务器.反向代理服务器.相较于Apache.lighttpd具有占有内存少,稳定性高等优势.它最常的用途是提供反向代理服务. 1.安装包编译安装 2.yum源安装 3.使用 ...

  8. Koa 学习笔记

    开始 就像官网上说的,一切框架都从一个"Hello World"开始,首先我们新建一个 package.json,内容尽量简单: { "name": " ...

  9. 基于coridc算法的定点小数除法器的实现

    `timescale 1ns / 1ps /////////////////////////////////////////////////////////////////////////////// ...

  10. HDFS基本架构及概念介绍

    简单介绍 l  设计思想 分而治之:将大文件.大批量文件,分布式存放在大量服务器上,以便于采取分而治之的方式对海量数据进行运算分析: l  在大数据系统中作用: 为各类分布式运算框架(如:mapred ...