|
5鱼币
- #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);
- }
复制代码
加载驱动 没反应
那里错了
|
最佳答案
查看完整内容
这台电脑环境没配置,无法测试
你没有StartService
参数( 服务句柄, NULL, NULL);
如果StartService后还是不行,那么就是传参错误了
如果确定还不行,就把参数改成char* 用指针来传
|