#include "stdio.h"
#include "windows.h"
#include <winioctl.h>
void jia(char lpDriverName[255],char lpDriverPathName[255]);//加载函数
void xie(char szSvrName[255]);
void main()//主函数
{
jia("event.sys","C:\\工程\\DDK\\DDK\\ddk_check\\event.sys");//加载函数
Sleep(5000);
xie("event.sys");//卸载函数
}
void jia(char lpDriverName[255],char lpDriverPathName[255])
{
SC_HANDLE hServiceMgr=NULL;//SCM管理器的句柄
SC_HANDLE hServiceDDK=NULL;//NT驱动程序的服务句柄
//打开服务控制管理器
hServiceMgr= OpenSCManager( NULL, NULL, SC_MANAGER_ALL_ACCESS );
//创建驱动所对应的服务
hServiceDDK = CreateService( hServiceMgr,
lpDriverName, //驱动程序的在注册表中的名字
lpDriverName, // 注册表驱动程序的 DisplayName 值
SERVICE_ALL_ACCESS, // 加载驱动程序的访问权限
SERVICE_KERNEL_DRIVER,// 表示加载的服务是驱动程序
SERVICE_DEMAND_START, // 注册表驱动程序的 Start 值
SERVICE_ERROR_IGNORE, // 注册表驱动程序的 ErrorControl 值
lpDriverPathName, // 注册表驱动程序的 ImagePath 值
NULL,NULL,NULL, NULL, NULL);
// 驱动程序已经加载,只需要打开
hServiceDDK = OpenService( hServiceMgr, lpDriverName, SERVICE_ALL_ACCESS );
//关闭句柄
CloseServiceHandle(hServiceDDK);
CloseServiceHandle(hServiceMgr);
}
void xie(char szSvrName[255])
{
SC_HANDLE hSCM=NULL;//SCM管理器的句柄,用来存放OpenSCManager的返回值
SC_HANDLE hService=NULL;//NT驱动程序的服务句柄,用来存放OpenService的返回值
SERVICE_STATUS SvrSta;
//打开SCM管理器
hSCM = OpenSCManager( NULL, NULL, SC_MANAGER_ALL_ACCESS );
//打开驱动所对应的服务
hService = OpenService( hSCM, szSvrName, SERVICE_ALL_ACCESS );
//停止驱动程序,
ControlService( hService, SERVICE_CONTROL_STOP , &SvrSta );
//动态卸载驱动服务
DeleteService( hService );
//关闭句柄
CloseServiceHandle(hSCM);
CloseServiceHandle(hService);
}
加载驱动 没反应
那里错了
|