鱼C论坛

 找回密码
 立即注册
查看: 7485|回复: 5

WDK10.0.14393.0配置方法(仅供参考,欢迎探讨并且指出错误)[1](新建一个工程测试WDK)

[复制链接]
发表于 2016-10-21 23:00:45 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 无符号整形 于 2016-10-22 08:57 编辑

什么?你还没有安装WDK!?赶紧点我去安装吧!^_^

1.选择创建工程,再在左边那里选择Visual C++ -> Windows Driver(如果没有的话,说明WDK安装失败了),然后在右边选择"Empty WDM Driver",输入工程名,再选择确定。(有git的朋友可以勾上新建GIT存储库哦~)
60.JPG

2.就会创建一个工程,如果创建失败请修复WDK。(提示:到控制面板)
2016-10-22.png

3.删掉Driver Files里的所有文件,用不到这个。(右键删除后请再选择删除而不是移除)
2016-10-22 (1).png

4.单击右边的“Source Files”,选择添加,再选择新建项
2016-10-22 (2).png

5.会有一个对话框,相信大家肯定会选择C++文件(.cpp)然后点确定,但是这样的话编译时通不过的!!!牢记!一定把文件名的后缀改成.c!,最后点击添加即可。
2016-10-22 (3).png

6.OK,第一个源文件添加成功,前面5步是每次建立WDM驱动工程要做的哦!
2016-10-22 (4).png

7.粘贴测试代码,加载驱动时会在D盘下生成一个HelloWorld.txt,内容是"Hello,world!",卸载时会在D盘下生成一个"GoodbyeWorld.txt",内容是"Goodbye,world"
不要管他什么意思,到时候你就懂了~
  1. #include <ntddk.h>

  2. VOID DriverUnload(PDRIVER_OBJECT driver)
  3. {
  4.         UNREFERENCED_PARAMETER(driver);

  5.         HANDLE hFile;
  6.         NTSTATUS status;
  7.         OBJECT_ATTRIBUTES Obj;
  8.         UNICODE_STRING FileName = RTL_CONSTANT_STRING(L"\\??\\D:\\GoodbyeWorld.txt");
  9.         IO_STATUS_BLOCK IoStatus;
  10.         PVOID Buffer = { "Goodbye,world!" };
  11.         LARGE_INTEGER Offset = { 0 };

  12.         InitializeObjectAttributes(
  13.                 &Obj,
  14.                 &FileName,
  15.                 OBJ_CASE_INSENSITIVE | OBJ_KERNEL_HANDLE,
  16.                 NULL,
  17.                 NULL
  18.         );

  19.         status = ZwCreateFile(&hFile,
  20.                 GENERIC_WRITE,
  21.                 &Obj,
  22.                 &IoStatus,
  23.                 NULL,
  24.                 FILE_ATTRIBUTE_NORMAL,
  25.                 FILE_SHARE_READ,
  26.                 FILE_OPEN_IF,
  27.                 FILE_NON_DIRECTORY_FILE | FILE_RANDOM_ACCESS | FILE_SYNCHRONOUS_IO_NONALERT,
  28.                 NULL,
  29.                 0);

  30.         status = ZwWriteFile(hFile,
  31.                 NULL,
  32.                 NULL,
  33.                 NULL,
  34.                 &IoStatus,
  35.                 Buffer,
  36.                 15,
  37.                 &Offset,
  38.                 NULL);

  39.         ZwClose(hFile);
  40. }

  41. NTSTATUS DriverEntry(PDRIVER_OBJECT driver, PUNICODE_STRING reg_path)
  42. {
  43.         UNREFERENCED_PARAMETER(driver);
  44.         UNREFERENCED_PARAMETER(reg_path);

  45.         HANDLE hFile;
  46.         NTSTATUS status;
  47.         OBJECT_ATTRIBUTES Obj;
  48.         UNICODE_STRING FileName = RTL_CONSTANT_STRING(L"\\??\\D:\\HelloWorld.txt");
  49.         IO_STATUS_BLOCK IoStatus;
  50.         PVOID Buffer = {"Hello,world!"};
  51.         LARGE_INTEGER Offset = { 0 };

  52.         InitializeObjectAttributes(
  53.                 &Obj,
  54.                 &FileName,
  55.                 OBJ_CASE_INSENSITIVE | OBJ_KERNEL_HANDLE,
  56.                 NULL,
  57.                 NULL
  58.         );

  59.         status = ZwCreateFile(&hFile,
  60.                 GENERIC_WRITE,
  61.                 &Obj,
  62.                 &IoStatus,
  63.                 NULL,
  64.                 FILE_ATTRIBUTE_NORMAL,
  65.                 FILE_SHARE_READ,
  66.                 FILE_OPEN_IF,
  67.                 FILE_NON_DIRECTORY_FILE | FILE_RANDOM_ACCESS | FILE_SYNCHRONOUS_IO_NONALERT,
  68.                 NULL,
  69.                 0);
  70.        
  71.         if (!NT_SUCCESS(status))
  72.         {
  73.                 return status;
  74.         }

  75.         status = ZwWriteFile(hFile,
  76.                 NULL,
  77.                 NULL,
  78.                 NULL,
  79.                 &IoStatus,
  80.                 Buffer,
  81.                 13,
  82.                 &Offset,
  83.                 NULL);

  84.         if (!NT_SUCCESS(status))
  85.         {
  86.                 return status;
  87.         }

  88.         ZwClose(hFile);

  89.         driver->DriverUnload = DriverUnload;

  90.         return STATUS_SUCCESS;
  91. }
复制代码

2016-10-22 (5).png

8.右键单击你的工程,选择属性
2016-10-22 (7).png
然后点击C/C++,再选择"将警告视为错误",把他调成"否 (/WX-)"(点击右边的小箭头),如果不调的话会把一些很小的问题(比如没生成Obj文件啊之类的警告视为错误!!!
2016-10-22 (9).png

9.粘贴完了之后,点击生成菜单->仅用于项目->仅重新生成[你的项目名]
2016-10-22 (6).png

10.稍等一会,如果在下面”输出“窗口里看到”========== 全部重新生成: 成功 1 个,失败 0 个,跳过 0 个 ==========“,说明你成功了!
2016-10-22 (11).png

11.打开你的工程目录(默认是"文档\Visual Studio 2015\Projects\你的工程名"然后再打开Debug目录,有惊喜等着你!
2016-10-22 (12).png
没错!那是我们编译出来的驱动!那么他怎么被系统加载呢?下一集你就知道啦!

如何让系统加载我们的驱动,点我就知道啦~

评分

参与人数 2荣誉 +12 鱼币 +12 贡献 +7 收起 理由
dh6633 + 5 + 5 + 2 谢谢,已学习
拈花小仙 + 7 + 7 + 5 感谢楼主无私奉献!

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-5-2 16:21:39 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-7-21 00:31:37 | 显示全部楼层
编译平台似乎要改成x64,不改的话我就蓝屏
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-9-18 11:02:52 | 显示全部楼层
装了运行错误,又卸载重装,又不行又卸载,断断续续一个星期终于完成了一小步,不容易
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-9-22 13:32:19 | 显示全部楼层
error LNK2019: 无法解析的外部符号 _DriverEntry@8,该符号在函数 _FxDriverEntryWorker@8 中被引用
后缀改成c了,为什么会出现这种错误,没安装好吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-3-13 22:43:14 | 显示全部楼层
问下,我是win10系统,用的是VS2017,虚拟机是XP的,怎搭建驱动开发环境,你图片1已经做到,VS上只能设置开发win7下运行的,怎改成XP下运行的,还有.props文件不需要弄吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-26 13:57

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表