鱼C论坛

 找回密码
 立即注册
查看: 8430|回复: 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"
不要管他什么意思,到时候你就懂了~
#include <ntddk.h>

VOID DriverUnload(PDRIVER_OBJECT driver)
{
        UNREFERENCED_PARAMETER(driver);

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

        InitializeObjectAttributes(
                &Obj,
                &FileName,
                OBJ_CASE_INSENSITIVE | OBJ_KERNEL_HANDLE,
                NULL,
                NULL
        );

        status = ZwCreateFile(&hFile,
                GENERIC_WRITE,
                &Obj,
                &IoStatus,
                NULL,
                FILE_ATTRIBUTE_NORMAL,
                FILE_SHARE_READ,
                FILE_OPEN_IF,
                FILE_NON_DIRECTORY_FILE | FILE_RANDOM_ACCESS | FILE_SYNCHRONOUS_IO_NONALERT,
                NULL,
                0);

        status = ZwWriteFile(hFile,
                NULL,
                NULL,
                NULL,
                &IoStatus,
                Buffer,
                15,
                &Offset,
                NULL);

        ZwClose(hFile);
}

NTSTATUS DriverEntry(PDRIVER_OBJECT driver, PUNICODE_STRING reg_path)
{
        UNREFERENCED_PARAMETER(driver);
        UNREFERENCED_PARAMETER(reg_path);

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

        InitializeObjectAttributes(
                &Obj,
                &FileName,
                OBJ_CASE_INSENSITIVE | OBJ_KERNEL_HANDLE,
                NULL,
                NULL
        );

        status = ZwCreateFile(&hFile,
                GENERIC_WRITE,
                &Obj,
                &IoStatus,
                NULL,
                FILE_ATTRIBUTE_NORMAL,
                FILE_SHARE_READ,
                FILE_OPEN_IF,
                FILE_NON_DIRECTORY_FILE | FILE_RANDOM_ACCESS | FILE_SYNCHRONOUS_IO_NONALERT,
                NULL,
                0);
        
        if (!NT_SUCCESS(status))
        {
                return status;
        }

        status = ZwWriteFile(hFile,
                NULL,
                NULL,
                NULL,
                &IoStatus,
                Buffer,
                13,
                &Offset,
                NULL);

        if (!NT_SUCCESS(status))
        {
                return status;
        }

        ZwClose(hFile);

        driver->DriverUnload = DriverUnload;

        return STATUS_SUCCESS;
}
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-12-21 23:08

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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