用vc加载 自己 的 驱动 程序 主要分为以下几个步骤: 1、加载 驱动 服务 主要要用到以下几个函数 SC_HANDLE WINAPI OpenSCManagerA( __in_optLPCSTRlpMachineName, __in_optLPCSTRlpDatabaseName, __inDWORDdwDesiredAccess ); //创建 驱动 服务 SC_HANDLE WI
用vc++加载 自己 的 驱动 程序 主要分为以下几个步骤:
1、加载 驱动 服务
主要要用到以下几个函数
SC_HANDLE WINAPI OpenSCManagerA( __in_opt LPCSTR lpMachineName, __in_opt LPCSTR lpDatabaseName, __in DWORD dwDesiredAccess ); //创建 驱动 服务 SC_HANDLE WINAPI CreateServiceA( __in SC_HANDLE hSCManager, __in LPCSTR lpServiceName, __in_opt LPCSTR lpDisplayName, __in DWORD dwDesiredAccess, __in DWORD dwServiceType, __in DWORD dwStartType, __in DWORD dwErrorControl, __in_opt LPCSTR lpBinaryPathName, __in_opt LPCSTR lpLoadOrderGroup, __out_opt LPDWORD lpdwTagId, __in_opt LPCSTR lpDependencies, __in_opt LPCSTR lpServiceStartName, __in_opt LPCSTR lpPassword ); //打开 驱动 服务 SC_HANDLE WINAPI OpenServiceA( __in SC_HANDLE hSCManager, __in LPCSTR lpServiceName, __in DWORD dwDesiredAccess ); //启动 驱动 服务 BOOL WINAPI StartServiceA( __in SC_HANDLE hService, __in DWORD dwNumServiceArgs, __in_ecount_opt(dwNumServiceArgs) LPCSTR *lpServiceArgVectors );
首先调用OpenSCManager函数 建立一个连接到服务控制管理器,然后再调用CreateService创建服务最后调用OpenService和StartService分别打开服务和启动服务。
当服务启动后就可以用CreateFile函数访问 驱动 程序 了代码如下:
1.启动 驱动 服务 程序
//启动 驱动 服务 void LoadDriver() { SC_HANDLE hSCManager = NULL; SC_HANDLE hService = NULL; SC_HANDLE hService1 = NULL; hSCManager = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS); hService = CreateService(hSCManager, MYWINRIN0, //这是 驱动 服务名称 这里为"MyWinRing0" 可以自定义任意名称 MYWINRIN0, //这是 驱动 服务显示名称,可以自定义任意名称,这里我选择和上面一样 SERVICE_ALL_ACCESS, SERVICE_KERNEL_DRIVER, SERVICE_DEMAND_START, SERVICE_ERROR_NORMAL, gDriverPath, // 驱动 存放的路径,这里和应用 程序 同目录 NULL, NULL, NULL, NULL, NULL ); CloseServiceHandle(hService); //上面创建成功后就关闭掉这个句柄 hService1 = OpenService(hSCManager, MYWINRIN0, SERVICE_ALL_ACCESS); //打开上面创建的服务,名字为"MyWinRing0" int result=StartService(hService1, 0 , NULL); //启动服务 CloseServiceHandle(hSCManager); CloseServiceHandle(hService1); }
2.打开 驱动 服务// 驱动 服务启动后,打开 驱动 BOOL OpenDriver() { char message[ 2 5 6 ]; gHandle = CreateFile( _T("\\\\.\\") OLS_DRIVER_ID, //这个地方的名字必须是 驱动 程序 里面IoCreateDevice函数创建设备是 使用的名字 GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL ); int code=GetLastError(); if (gHandle == INVALID_HANDLE_VALUE) { return FALSE; } return TRUE; }
3.停止 驱动//停止 驱动 BOOL StopDriver(SC_HANDLE hSCManager,LPCTSTR DriverId) { SC_HANDLE hService = NULL; BOOL rCode = FALSE; SERVICE_STATUS serviceStatus; DWORD error = NO_ERROR; hService = OpenService(hSCManager, DriverId, SERVICE_ALL_ACCESS); if (hService != NULL) { rCode = ControlService(hService, SERVICE_CONTROL_STOP, &serviceStatus); error = GetLastError(); CloseServiceHandle(hService); } return rCode; }
4.卸载 驱动//卸载 驱动 BOOL RemoveDriver(SC_HANDLE hSCManager, LPCTSTR DriverId) { SC_HANDLE hService = NULL; BOOL rCode = FALSE; hService = OpenService(hSCManager, DriverId, SERVICE_ALL_ACCESS); if (hService == NULL) { rCode = TRUE; } else { rCode = DeleteService(hService); CloseServiceHandle(hService); } return rCode; }
完整示例 程序 下载:http://download.csdn.net/detail/xiaibiancheng/5449887查看更多关于vc++加载,卸载自己的驱动程序的详细内容...