驱动学习笔记2-用程序加载NT驱动程序

NT驱动程序的加载:
1:为NT驱动创建新的服务.
2:开启此项服务
3:关闭此项服务
4:删除NT驱动创建的服务
(1)打开SCM管理器
SC_HANDLE WINAPI OpenSCManager(
  __in          LPCTSTR lpMachineName,//计算机名称.NULL或者空表示本机
  __in          LPCTSTR lpDatabaseName,//SCM数据库名称.NULL表示使用缺省数据库
  __in          DWORD dwDesiredAccess //使用权限.一般为SC_MANAGER_ALL_ACCESS
);
成功返回SCM管理器句柄.否则返回NULL
(2)创建服务
SC_HANDLE WINAPI CreateService(
  __in          SC_HANDLE hSCManager,//OpenSCManager打开的句柄
  __in          LPCTSTR lpServiceName,//服务名称.SCM管理器中看到的服务名称
  __in          LPCTSTR lpDisplayName,
  __in          DWORD dwDesiredAccess,//打开权限.一般为SERVICE_ALL_ACCESS
  __in          DWORD dwServiceType, //服务类型(文件系统驱动/普通驱动程序/驱动自加载/)
  __in          DWORD dwStartType,  //启动类型
  __in          DWORD dwErrorControl, //错误控制码
  __in          LPCTSTR lpBinaryPathName,//服务程序或者驱动程序的路径
  __in          LPCTSTR lpLoadOrderGroup,//服务属于哪个用户组
  __out         LPDWORD lpdwTagId,
  __in          LPCTSTR lpDependencies, //所依赖的服务的名称
  __in          LPCTSTR lpServiceStartName, //用户帐户名称
  __in          LPCTSTR lpPassword   //用户口令
);
(3)打开服务
SC_HANDLE WINAPI OpenService(
  __in          SC_HANDLE hSCManager,  //SCM管理器句柄
  __in          LPCTSTR lpServiceName,  //服务名称
  __in          DWORD dwDesiredAccess  //访问权限.一般为SC_MANAGER_ALL_ACCESS
);
(4)控制服务
BOOL WINAPI ControlService(
  __in          SC_HANDLE hService,   //服务句柄
  __in          DWORD dwControl,   //控制码
  __out         LPSERVICE_STATUS lpServiceStatus //指向一个SERVICE_STATUS 结构体,来接收最后的服务信息
);
(5)关闭SCM管理器
BOOL WINAPI CloseServiceHandle(
  __in          SC_HANDLE hSCObject
);
完整例程

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值