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. linux从0开始----01

    1.VMware 虚拟机安装与卸载 推荐安装较高版本,11.x以后的.本课程安装12.x版本,需要序列号. 2.在vmware中安装centos客户机.初学者选择典型安装也可以. 1.vware文件菜 ...

  2. JSP 前端的一些应用

    Ext标签库 一.Ext.VeiwPort 代表整个浏览器显示区域,该对象渲染到页面的body 区域,并会随着浏览器显示区域的大小自动改变,一个页面中只能有一个ViewPort 实例. <scr ...

  3. IO流的种类

    字节流:InputStream(new FileInputStream(new File()); Outpustream(new FileOutputStream(new File()); 字符流:  ...

  4. java面试一、1.3线程与进程

    免责声明:     本文内容多来自网络文章,转载为个人收藏,分享知识,如有侵权,请联系博主进行删除. 1.3.进程和线程 线程和进程的概念.并行和并发的概念 线程和进程: 线程:是程序执行流的最小单元 ...

  5. 【repost】Python正则表达式

    星光海豚   python正则表达式详解 正则表达式是一个很强大的字符串处理工具,几乎任何关于字符串的操作都可以使用正则表达式来完成,作为一个爬虫工作者,每天和字符串打交道,正则表达式更是不可或缺的技 ...

  6. 【repost】图解Javascript上下文与作用域

    本文尝试阐述Javascript中的上下文与作用域背后的机制,主要涉及到执行上下文(execution context).作用域链(scope chain).闭包(closure).this等概念. ...

  7. enumerate的用法

    names = ["tony","huluwa","tom","jerry","lala"]for ...

  8. 关于使用jquery.cookie.js存cookie中文出现乱码问题

    一.在Web开发中,有事为了页面之间传值,我们会用到cookie.但是当在cookie中存值为中文汉字时就会出现乱码! 这是一个简单例子: <!DOCTYPE html><html ...

  9. ECharts常用设置记录

    一.配置文档 http://echarts.baidu.com/option.html#title 二.属性配置 1.图表与边框容器距离. grid: { top: '10%', left: '70' ...

  10. socket实现FTP上传下载功能

    '''服务器端''' 1 _author__ = "Dbass" import socketserver import json,os class MyTCPHandler(soc ...