VS2015驱动环境配置

你的名字 2021-11-29 09:24 679阅读 0赞

准备

vs2015社区中文版

链接:https://pan.baidu.com/s/1gucO9NcymG1x8RRQetaNIw

提取码:a4zj

WDK10.0.26639

链接:https://pan.baidu.com/s/140qjNUfo8TCNDqlmWmjuQw

提取码:sng8

正文

安装位置默认,选择自定义安装

" class="reference-link">1-1.png

选择功能这里只勾3个部分:vs2015更新3,编程语言的Visual C++,通用windows应用开发工具的windows 10 SDK10.0.10240。

2-1.png

3-1.png

最后确认安装,这里安装的时间会相对较长,安装完成后就可以确定并启动了

4-1.png

安装完vs2015后再安装wdk10,运行安装包后默认安装C盘,这里直接next就行

5-1.png

隐私声明这里,直接选择yes和next就行

6.png

许可协议这里选择Accept就行

7.png

最后就是等待Windows Driver Kit的安装

8.png

安装结束后close就行,learn more about复选框里勾或不勾都没啥影响

9.png

重新打开vs2015,选择新建一个项目,这个时候就可以在Visual C++下看到Windows Driver这个选项

10.png

打开Windows Driver->WDF选择里面的Empty(KMDF),名称和位置根据习惯修改

11.png

项目建好后首先添加一个新建项,我习惯是用C写驱动代码,所以新建文件后缀为.C,如果习惯用C++写则文件后缀为.CPP

12.png13.png

最后就是修改项目属性,打开调试->项目属性

14.png

由于我编译为debug版本,所以这里要确认配置的是debug的属性,如果是release则在配置这里选择为release后再修改属性

15.png

打开C/C++的常规设置,把警告等级改成警告等级3,其他不同的设置按照图中进行修改即可

16.png

打开Driver Settings,这里的Target OS Version和Target Platform按照图中设置就行,如果驱动在win10下运行就把Target OS Version改为windows10

17.png

Inf2Cat是用于签名的,我们这里暂时不用管这个,在run inf2cat中选择否就行

18.png

最后打开Driver Signing,这个也是驱动签名的,这里在Sign Mode里选择off就行。到此就完成了所有环境的配置,接下来就可以开始编写程序了

19.png

用一段测试代码编译一下,成功后如图,测试代码在下面

21.png

测试代码作用是打印打印ssdt函数地址,这个不用管,主要是加载驱动后会在

DebugView中看到我们的相关信息,到虚拟机中加载,在DebugView中查看结果如图

22.png

测试代码

  1. 1 #include <ntddk.h>
  2. 2
  3. 3 /*导出ssdt结构体*/
  4. 4 typedef struct _ServiceDescriptorTable
  5. 5 {
  6. 6 PVOID ServiceTableBase; //System Service Dispatch Table 的基地址
  7. 7 PVOID ServiceCounterTable; //包含着 SSDT 中每个服务被调用次数的计数器。这个计数器一般由sysenter 更新。
  8. 8 unsigned int NumberOfServices; //由 ServiceTableBase 描述的服务的数目。
  9. 9 PVOID ParamTableBase; //包含每个系统服务参数字节数表的基地址-系统服务参数表
  10. 10 } *PServiceDescriptorTable;
  11. 11 extern PServiceDescriptorTable KeServiceDescriptorTable;
  12. 12
  13. 13 VOID DriverUnload(PDRIVER_OBJECT pDriverObject)
  14. 14 {
  15. 15 KdPrint(("驱动卸载成功!\n"));
  16. 16 }
  17. 17
  18. 18 NTSTATUS DriverEntry(PDRIVER_OBJECT pDriverObject, PUNICODE_STRING reg_path)
  19. 19 {
  20. 20 ULONG ssdtindex,ntaddress;
  21. 21 ULONG *ssdtbase;
  22. 22 KdPrint(("驱动成功加载!\n"));
  23. 23
  24. 24 ssdtbase = KeServiceDescriptorTable->ServiceTableBase;
  25. 25 for (ssdtindex = 0; ssdtindex < (ULONG)KeServiceDescriptorTable->NumberOfServices; ssdtindex++)
  26. 26 {
  27. 27 ntaddress = *ssdtbase;
  28. 28 KdPrint(("%0x\n", ntaddress));
  29. 29 ssdtbase += 1;
  30. 30 }
  31. 31
  32. 32
  33. 33 pDriverObject->DriverUnload = DriverUnload;
  34. 34 return STATUS_SUCCESS;
  35. 35 }

参考

https://www.mycode.net.cn/language/cpp/1771.html

转载于:https://www.cnblogs.com/QKSword/p/10887687.html

发表评论

表情:
评论列表 (有 0 条评论,679人围观)

还没有评论,来说两句吧...

相关阅读