NT式驱动的安装-1

本文介绍了在Windows系统中加载内核驱动的API调用,包括加载驱动、创建及打开设备、启动服务、控制服务以及卸载服务的过程。特别提到了在Win10+VS2013的MFC程序在XP系统下的兼容性问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一丶加载内核驱动的常用API介绍.
加载内核驱动,使用我们的ring3下的API即可完成.

API分别是:

OpenSCManager  打开设备(服务)管理器
CreateService  创建服务(或者设备,根据参数不同而不同)
OpenService     打开设备或者服务.
StartService           启动服务,启动设备.
ControlService       控制设备或者服务的状态.
CloseServiceHandle 关闭服务或者设备的句柄
DeleteService       卸载服务

参数介绍:

1.打开设备管理器
SC_HANDLE OpenSCManager(
  LPCTSTR lpMachineName,   // 机器名称.可以制定计算机,如不指定,给NULL则是打开自己.
  LPCTSTR lpDatabaseName,  // 打开设备管理器数据库的名称,如果为NULL则使用默认的.
  DWORD dwDesiredAccess    // 打开的权限.
);

返回值:
  成功: 返回设备管理器的句柄
  失败: 返回NULL

2.创建设备或者服务.

SC_HANDLE CreateService( 
  SC_HANDLE hSCManager,       //设备管理器句柄,通过OpenScManger返回
  LPCTSTR lpServiceName,      // 服务或者设备启动的名称
  LPCTSTR lpDisplayName,      // 服务或者的显示名称
  DWORD dwDesiredAccess,      // 访问服务或者设备的权限
  DWORD dwServiceType,        // 创建的服务或者设备的类型,如果是内核驱动,则通过这里给
  DWORD dwStartType,          // 服务或者设备何时启动
  DWORD dwErrorControl,       // 服务或者设备如果启动出错,则指定一下应用程序应该怎么做,(重启,或者重新长还是.)
  LPCTSTR lpBinaryPathName,   // 服务或者设备的文件路径,必须给.
  LPCTSTR lpLoadOrderGroup,   // 服务或者设备排租.
  LPDWORD lpdwTagId,          // 可以通过注册表来启动服务.
  LPCTSTR lpDependencies,     // array of dependency names
  LPCTSTR lpServiceStartName, // 服务的启动名称. 
  LPCTSTR lpPassword          // 密码;

返回值:
  成功: 返回创建服务或者设备的句柄.
  失败: 返回NULL

3.打开服务或者设备.

SC_HANDLE OpenService(
  SC_HANDLE hSCManager,  // 设备管理器的句柄,通过OpenScManger返回.
  LPCTSTR lpServiceName, // 服务或者设备的名称.
  DWORD dwDesiredAccess  // 打开服务或者设备的权限.
);

返回值:
  成功: 返回服务或者设备的句柄.
  失败: 返回NULL

4.启动服务或者设备.

BOOL StartService(
  SC_HANDLE hService,            // 服务或者设备句柄
  DWORD dwNumServiceArgs,        // 二维数组的个数.
  LPCTSTR* lpServiceArgVectors   // 二维数组.其中每组存储一个服务名称.如果是内核驱动则都给NU
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值