最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501
当前位置: 首页 - 科技 - 知识百科 - 正文

vc++加载,卸载自己的驱动程序

来源:懂视网 责编:小采 时间:2020-11-09 08:22:41
文档

vc++加载,卸载自己的驱动程序

vc++加载,卸载自己的驱动程序:用vc加载 自己 的 驱动 程序 主要分为以下几个步骤: 1、加载 驱动 服务 主要要用到以下几个函数 SC_HANDLE WINAPI OpenSCManagerA( __in_optLPCSTRlpMachineName, __in_optLPCSTRlpDatabaseName, __inDWORDdwDesire
推荐度:
导读vc++加载,卸载自己的驱动程序:用vc加载 自己 的 驱动 程序 主要分为以下几个步骤: 1、加载 驱动 服务 主要要用到以下几个函数 SC_HANDLE WINAPI OpenSCManagerA( __in_optLPCSTRlpMachineName, __in_optLPCSTRlpDatabaseName, __inDWORDdwDesire

用vc加载 自己 的 驱动 程序 主要分为以下几个步骤: 1、加载 驱动 服务 主要要用到以下几个函数 SC_HANDLE WINAPI OpenSCManagerA( __in_optLPCSTRlpMachineName, __in_optLPCSTRlpDatabaseName, __inDWORDdwDesiredAccess ); //创建 驱动 服务 SC_HANDLE WI

用vc++加载自己的驱动程序主要分为以下几个步骤:

1、加载驱动服务

主要要用到以下几个函数

  1. SC_HANDLE
  2. WINAPI
  3. OpenSCManagerA(
  4. __in_opt LPCSTR lpMachineName,
  5. __in_opt LPCSTR lpDatabaseName,
  6. __in DWORD dwDesiredAccess
  7. );
  8. //创建驱动服务
  9. SC_HANDLE
  10. WINAPI
  11. CreateServiceA(
  12. __in SC_HANDLE hSCManager,
  13. __in LPCSTR lpServiceName,
  14. __in_opt LPCSTR lpDisplayName,
  15. __in DWORD dwDesiredAccess,
  16. __in DWORD dwServiceType,
  17. __in DWORD dwStartType,
  18. __in DWORD dwErrorControl,
  19. __in_opt LPCSTR lpBinaryPathName,
  20. __in_opt LPCSTR lpLoadOrderGroup,
  21. __out_opt LPDWORD lpdwTagId,
  22. __in_opt LPCSTR lpDependencies,
  23. __in_opt LPCSTR lpServiceStartName,
  24. __in_opt LPCSTR lpPassword
  25. );
  26. //打开驱动服务
  27. SC_HANDLE
  28. WINAPI
  29. OpenServiceA(
  30. __in SC_HANDLE hSCManager,
  31. __in LPCSTR lpServiceName,
  32. __in DWORD dwDesiredAccess
  33. );
  34. //启动驱动服务
  35. BOOL
  36. WINAPI
  37. StartServiceA(
  38. __in SC_HANDLE hService,
  39. __in DWORD dwNumServiceArgs,
  40. __in_ecount_opt(dwNumServiceArgs)
  41. LPCSTR *lpServiceArgVectors
  42. );

首先调用OpenSCManager函数 建立一个连接到服务控制管理器,然后再调用CreateService创建服务最后调用OpenService和StartService分别打开服务和启动服务。

当服务启动后就可以用CreateFile函数访问驱动程序了代码如下:

1.启动驱动服务程序

  1. //启动驱动服务
  2. void LoadDriver()
  3. {
  4. SC_HANDLE hSCManager = NULL;
  5. SC_HANDLE hService = NULL;
  6. SC_HANDLE hService1 = NULL;
  7. hSCManager = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS);
  8. hService = CreateService(hSCManager,
  9. MYWINRIN0, //这是驱动服务名称 这里为"MyWinRing0" 可以自定义任意名称
  10. MYWINRIN0, //这是驱动服务显示名称,可以自定义任意名称,这里我选择和上面一样
  11. SERVICE_ALL_ACCESS,
  12. SERVICE_KERNEL_DRIVER,
  13. SERVICE_DEMAND_START,
  14. SERVICE_ERROR_NORMAL,
  15. gDriverPath,//驱动存放的路径,这里和应用程序同目录
  16. NULL,
  17. NULL,
  18. NULL,
  19. NULL,
  20. NULL
  21. );
  22. CloseServiceHandle(hService);//上面创建成功后就关闭掉这个句柄
  23. hService1 = OpenService(hSCManager, MYWINRIN0, SERVICE_ALL_ACCESS);//打开上面创建的服务,名字为"MyWinRing0"
  24. int result=StartService(hService1, 0, NULL);//启动服务
  25. CloseServiceHandle(hSCManager);
  26. CloseServiceHandle(hService1);
  27. }

2.打开驱动服务

  1. //驱动服务启动后,打开驱动
  2. BOOL OpenDriver()
  3. {
  4. char message[256];
  5. gHandle = CreateFile(
  6. _T("\\\\.\\") OLS_DRIVER_ID,//这个地方的名字必须是驱动程序里面IoCreateDevice函数创建设备是 使用的名字
  7. GENERIC_READ | GENERIC_WRITE,
  8. 0,
  9. NULL,
  10. OPEN_EXISTING,
  11. FILE_ATTRIBUTE_NORMAL,
  12. NULL
  13. );
  14. int code=GetLastError();
  15. if(gHandle == INVALID_HANDLE_VALUE)
  16. {
  17. return FALSE;
  18. }
  19. return TRUE;
  20. }

3.停止驱动

  1. //停止驱动
  2. BOOL StopDriver(SC_HANDLE hSCManager,LPCTSTR DriverId)
  3. {
  4. SC_HANDLE hService = NULL;
  5. BOOL rCode = FALSE;
  6. SERVICE_STATUS serviceStatus;
  7. DWORD error = NO_ERROR;
  8. hService = OpenService(hSCManager, DriverId, SERVICE_ALL_ACCESS);
  9. if(hService != NULL)
  10. {
  11. rCode = ControlService(hService, SERVICE_CONTROL_STOP, &serviceStatus);
  12. error = GetLastError();
  13. CloseServiceHandle(hService);
  14. }
  15. return rCode;
  16. }

4.卸载驱动

  1. //卸载驱动
  2. BOOL RemoveDriver(SC_HANDLE hSCManager, LPCTSTR DriverId)
  3. {
  4. SC_HANDLE hService = NULL;
  5. BOOL rCode = FALSE;
  6. hService = OpenService(hSCManager, DriverId, SERVICE_ALL_ACCESS);
  7. if(hService == NULL)
  8. {
  9. rCode = TRUE;
  10. }
  11. else
  12. {
  13. rCode = DeleteService(hService);
  14. CloseServiceHandle(hService);
  15. }
  16. return rCode;
  17. }

完整示例程序下载:http://download.csdn.net/detail/xiaibiancheng/5449887

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文档

vc++加载,卸载自己的驱动程序

vc++加载,卸载自己的驱动程序:用vc加载 自己 的 驱动 程序 主要分为以下几个步骤: 1、加载 驱动 服务 主要要用到以下几个函数 SC_HANDLE WINAPI OpenSCManagerA( __in_optLPCSTRlpMachineName, __in_optLPCSTRlpDatabaseName, __inDWORDdwDesire
推荐度:
标签: 自己的 加载 卸载
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top