一丶加载内核驱动的常用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