贱人一个 发表于 2012-12-27 17:33:24

加载驱动问题

#include "stdio.h"
#include "windows.h"
#include <winioctl.h>
void jia(char lpDriverName,char lpDriverPathName);//加载函数
void xie(char szSvrName);
void main()//主函数
{
jia("event.sys","C:\\工程\\DDK\\DDK\\ddk_check\\event.sys");//加载函数
Sleep(5000);
xie("event.sys");//卸载函数
}
void jia(char lpDriverName,char lpDriverPathName)
{
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)
{
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);
}

加载驱动没反应
那里错了

メ㊣逆ご帅☆ 发表于 2012-12-27 17:33:25

本帖最后由 メ㊣逆ご帅☆ 于 2012-12-28 22:42 编辑

这台电脑环境没配置,无法测试
你没有StartService
参数( 服务句柄, NULL, NULL);
如果StartService后还是不行,那么就是传参错误了

如果确定还不行,就把参数改成char* 用指针来传

小新110 发表于 2012-12-27 17:50:30

驱动好久没搞了,友情支持一下。
页: [1]
查看完整版本: 加载驱动问题