程序加载NT式驱动

程序加载NT式驱动
设备驱动程序的动态加载主要由服务控制管理程序(Service Control Manager, SCM)来完成。
加载和卸载NT驱动分为四个步骤:
1、为NT驱动创建新的任务
2、开启此项服务。
3、关闭此项服务。
4、删除NT驱动所创建的服务。

1、打开SCM管理器函数,用于SCM的初始化。
SC_HANDLE OpenSCManager(
    LPCTSTR lpMachineName,    //计算机名称,NULL代表本机
    LPCTSTR lpDatabaseName, //SCM数据库名称,NULL代表缺省数据库
    DWRD dwDesiredAccess        //使用权限,一般设置为SC_MANAGER_ALL_ACCESS
    );
返回值:成功返回SCM管理器句柄,失败返回NULL

2、关闭服务句柄,关闭SCM管理器句柄,用于SCM清除工作
BOOL CloseServiceHandle(
    SC_HANDLE hSCObject            //要关闭的SCM句柄
    )

3、创建服务,创建SCM管理器的句柄,后面操作都是基于此句柄
SC_HANDLE CreateService(
  SC_HANDLE hSCManager,       // handle to SCM database,OpenSCManager打开的句柄
  LPCTSTR lpServiceName,      // 服务名称,就是在设备管理器中看到的设备名称
  LPCTSTR lpDisplayName,      // 服务显示出的名称
  DWORD dwDesiredAccess,      // 打开权限,一般设置为SERVICE_ALL_ACCESS
  DWORD dwServiceType,        // 服务类型
                      // SERVICE_FILE_SYSTEM_DRIVER         File system driver service.
                      // SERVICE_KERNEL_DRIVER                     Driver service.一般用此项
  DWORD dwStartType,          // 打开服务时间
                              // SERVICE_AUTO_START 驱动自动加载
                                                            // SERVICE_BOOT_START 被system loader加载,系统启动之前
                              // SERVICE_DEMAND_START  需要是启动,一般选择此项
  DWORD dwErrorControl,       // 关于错误处理的代码
                                                          // SERVICE_ERROR_IGNORE 错误全部忽略
                                                     // SERVICE_ERROR_NORMAL 错误按缺省办法处理
                                                    // SERVICE_ERROR_CRITICAL 增加对错误处理的校验,并提示出对话框,并记录错误信息到log文件
  LPCTSTR lpBinaryPathName,   // name of binary file,编译后的驱动程序
  LPCTSTR lpLoadOrderGroup,   // 用何用户组开启服务
  LPDWORD lpdwTagId,          // 输出验证标签
  LPCTSTR lpDependencies,     // 所依赖的服务名称
  LPCTSTR lpServiceStartName, // 用户账户名称
  LPCTSTR lpPassword          // 用户口令
);

4、打开服务
SC_HANDLE OpenService(
  SC_HANDLE hSCManager,  // handle to SCM database
  LPCTSTR lpServiceName, // service name
  DWORD dwDesiredAccess  // 访问权限,一般设置为SERVICE_ALL_ACCESS
);


5、控制服务
BOOL ControlService(
  SC_HANDLE hService,               // handle to service
  DWORD dwControl,                  // control code
                                    // SERVICE_CONTROL_CONTINUE 针对暂停的服务发出的命令
                                                                        // SERVICE_CONTROL_PAUSE    针对正在运行的服务发出暂停命令
                                    // SERVICE_CONTROL_STOP 针对正在运行的服务发出停止命令
  LPSERVICE_STATUS lpServiceStatus  // status information,服务返回的状态码
);





来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/518171/viewspace-711544/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/518171/viewspace-711544/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值