1. SC_HANDLE WINAPI OpenSCManager(
  2. _In_opt_ LPCTSTR lpMachineName,
  3. _In_opt_ LPCTSTR lpDatabaseName,
  4. _In_ DWORD dwDesiredAccess
  5. );
函数作用:以一定的权限,在指定的计算机打开指定的SCM数据库
参数:
1. lpMachineName:目标计算机名,NULL表示本地计算机
2. lpDatabaseName:服务管理程序系统组件数据库,可以设为SERVICES_ACTIVE_DATABASE,如果为NULL,表示默认打开SERVICES_ACTIVE_DATABASE数据库
3. dwDesiredAccess:对SCM的权限,可以是以下这一些:
Access right Description
SC_MANAGER_ALL_ACCESS (0xF003F) Includes STANDARD_RIGHTS_REQUIRED, in addition to all access rights in this table.
SC_MANAGER_CREATE_SERVICE (0x0002) Required to call the CreateService function to create a service object and add it to the database.
SC_MANAGER_CONNECT (0x0001) Required to connect to the service control manager.
SC_MANAGER_ENUMERATE_SERVICE (0x0004)

Required to call the EnumServicesStatus or EnumServicesStatusEx function to list the services that are in the database.

Required to call the NotifyServiceStatusChange function to receive notification when any service is created or deleted.

SC_MANAGER_LOCK (0x0008) Required to call the LockServiceDatabase function to acquire a lock on the database.
SC_MANAGER_MODIFY_BOOT_CONFIG (0x0020) Required to call the NotifyBootConfigStatus function.
SC_MANAGER_QUERY_LOCK_STATUS (0x0010) Required to call the QueryServiceLockStatus function to retrieve the lock status information for the database.

或者上面权限的组合:

Access right Description
GENERIC_READ
STANDARD_RIGHTS_READ
SC_MANAGER_ENUMERATE_SERVICE
SC_MANAGER_QUERY_LOCK_STATUS
GENERIC_WRITE
STANDARD_RIGHTS_WRITE
SC_MANAGER_CREATE_SERVICE
SC_MANAGER_MODIFY_BOOT_CONFIG
GENERIC_EXECUTE
STANDARD_RIGHTS_EXECUTE
SC_MANAGER_CONNECT
SC_MANAGER_LOCK
GENERIC_ALL
SC_MANAGER_ALL_ACCESS
一个有适当权限的普通程序能够打开SCM句柄,供OpenServiceEnumServicesStatusEx, 和 QueryServiceLockStatus函数使用;
只有拥有Administrator权限的程序打开的SCM句柄,才可用于CreateService 和 LockServiceDatabase函数
不同用户拥有不同的权限,在获取所需要的权限前,要检查程序所拥有的权限:
Account Access rights
Remote authenticated users
SC_MANAGER_CONNECT
Local authenticated users (including LocalService and NetworkService)
SC_MANAGER_CONNECT
SC_MANAGER_ENUMERATE_SERVICE
SC_MANAGER_QUERY_LOCK_STATUS
STANDARD_RIGHTS_READ
LocalSystem
SC_MANAGER_CONNECT
SC_MANAGER_ENUMERATE_SERVICE
SC_MANAGER_MODIFY_BOOT_CONFIG
SC_MANAGER_QUERY_LOCK_STATUS
STANDARD_RIGHTS_READ
Administrators
SC_MANAGER_ALL_ACCESS
 
返回值:
成功,返回指定SCM数据库的句柄;失败返回NULL,错误码可通过调用GetLastError获得。
Return code Description
ERROR_ACCESS_DENIED

The requested access was denied.

ERROR_DATABASE_DOES_NOT_EXIST

The specified database does not exist.

说明:
(1)在获取SCM的相关权限前,系统会对程序进行一定的权限检查,是否符合权限要求
(2)当程序在连接其他计算机上的服务时,程序没有适当的权限,那么OpenSCManager将会调用失败,. To connect to a service remotely, call the LogonUser function with LOGON32_LOGON_NEW_CREDENTIALS and then call ImpersonateLoggedOnUser before calling OpenSCManager.为了远程链接一个服务,可以用LOGON32_LOGON_NEW_CREDENTIALS调用LogonUser函数然后再调用ImpersonateLoggedOnUser
(3)只有拥有Administrator权限的程序打开的SCM句柄,才可用于CreateService 和 LockServiceDatabase函数
(4)OpenSCManager函数返回的句柄只能由调用它的进程使用,可以调用CloseServiceHandle函数来关掉这个句柄。

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

【原创】驱动加载之OpenSCManager的更多相关文章

  1. 老调重弹:JDBC系列之<驱动加载原理全面解析) ----转

      最近在研究Mybatis框架,由于该框架基于JDBC,想要很好地理解和学习Mybatis,必须要对JDBC有较深入的了解.所以便把JDBC 这个东东翻出来,好好总结一番,作为自己的笔记,也是给读者 ...

  2. (DT系列四)驱动加载中, 如何取得device tree中的属性

    本文以At91rm9200平台为例,从源码实现的角度来分析驱动加载时,Device tree的属性是如何取得的.一:系统级初始化DT_MACHINE_START 主要是定义"struct m ...

  3. 【转】(DT系列四)驱动加载中, 如何取得device tree中的属性

    原文网址:http://www.cnblogs.com/biglucky/p/4057488.html 本文以At91rm9200平台为例,从源码实现的角度来分析驱动加载时,Device tree的属 ...

  4. linux设备和驱动加载的先后顺序

    点击打开链接 Linux驱动先注册总线,总线上可以先挂device,也可以先挂driver,那么究竟怎么控制先后的顺序呢. Linux系统使用两种方式去加载系统中的模块:动态和静态. 静态加载:将所有 ...

  5. 如何调整Linux内核启动中的驱动初始化顺序-驱动加载优先级

    Linux内核为不同驱动的加载顺序对应不同的优先级,定义了一些宏: include\linux\init.h #define pure_initcall(fn) __define_initcall(& ...

  6. 关于Eclipse在servlet中连接数据库时出现驱动加载失败的解决

    问题:在队友发来的项目中想将他获取到的数据通过数据库储存,出现驱动加载失败问题 解决:首先百度了下相关情况,大多数都是说下载mysql-connector-java-5.1.39-bin.jar包,然 ...

  7. 【ESXI6.0】 ESXI6.0安装时无法安装网卡驱动的解决方法及将网卡驱动加载进ISO

    http://blog.163.com/xifanliang@yeah/blog/static/115078488201571584321787/ 若安装时提示如下图所示 之后安装无法完成,会提示没有 ...

  8. 【原创】驱动加载之CreateService

    SC_HANDLE WINAPI CreateService( _In_ SC_HANDLE hSCManager, _In_ LPCTSTR lpServiceName, _In_opt_ LPCT ...

  9. Windows 驱动加载程序代码

    #include <windows.h> #include <winsvc.h> #include <conio.h> #include <stdio.h&g ...

随机推荐

  1. (PMP)第2章-----项目运行环境

    1.事业环境因素:(客观存在,可能有帮助或阻碍,项目经理必须遵守) 内部:文化,结构,治理:设施和资源的地理分布,基础设施,信息技术软件,资源可用性,员工能力 外部:市场条件,社会和文化,法律限制,商 ...

  2. 编译Spark源码

    Spark编译有两种处理方式,第一种是通过SBT,第二种是通过Maven.作过Java工作的一般对于Maven工具会比较熟悉,这边也是选用Maven的方式来处理Spark源码编译工作. 在开始编译工作 ...

  3. Spring 出现Could not resolve placeholder问题的解决方法

    项目开发中,使用@value注解获取不到配置文件里面的属性字段. 检查配置文件,在spring的配置文件中有配置读取,如下: <!-- 使用spring自带的占位符替换功能 --> < ...

  4. Waiting for table metadata lock

    出现下图这个现象之前是在一张事务操作频繁地表上,执行了truncate操作. mysql.sock@(none)> select user,host,db,command,time,state, ...

  5. kubernetes CSI 插件机制学习笔记

    前言 最近在极客时间订阅了kubernetes的专栏,这篇文章是想记录一下自己学习 CSI 插件机制 (container-storage-interface) 的过程,加深一下记忆. 准备工作 老师 ...

  6. python基础自学 第四天

    break和continue break:某一条件满足,退出循环,不在执行后续重复代码 continue:某一条件满足时,不执行后续重复的代码 注意:在循环中,如果使用continue这个关键字,使用 ...

  7. asp.net执行顺速

    理解ASP.NET的运行机制(例:通过HttpModule来计算页面执行时间) 一:简要介绍一下asp.net的执行步骤 1.IIS接收到客户请求 2. IIS把请求交给aspnet_isapi.dl ...

  8. sphinx-doc的中文搜索

    第一,你的系统需要安装jieba类库, pip install jieba 第二,接下来修改sphinx的conf.py文件,为项目设置为中文的搜索配置. # Language to be used ...

  9. 写在HTTP协议之前

    1.网络模型 OSI模型即:开放系统互连参考模型(Open System Interconnect 简称OSI)是国际标准化组织(ISO)和国际电报电话咨询委员会(CCITT)联合制定的开放系统互连参 ...

  10. 《JAVASCRIPT 高级程序设计》读书笔记六 面向对象的程序设计

    一   对象属性 a.对象定义: 无序属性的集合,其属性可以包含基本值.对象或者函数: b.两种创建方式: 1.构造函数: var person = new Object(); person.name ...