无符号整形 发表于 2016-10-21 23:00:45

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

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

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

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


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


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


4.单击右边的“Source Files”,选择添加,再选择新建项


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


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


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;
}


8.右键单击你的工程,选择属性

然后点击C/C++,再选择"将警告视为错误",把他调成"否 (/WX-)"(点击右边的小箭头),如果不调的话会把一些很小的问题(比如没生成Obj文件啊之类的警告视为错误!!!


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


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


11.打开你的工程目录(默认是"文档\Visual Studio 2015\Projects\你的工程名"然后再打开Debug目录,有惊喜等着你!

没错!那是我们编译出来的驱动!那么他怎么被系统加载呢?下一集你就知道啦!{:10_248:}

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

谦虚求学 发表于 2017-5-2 16:21:39

顶{:10_248:}

帅到被排挤 发表于 2017-7-21 00:31:37

编译平台似乎要改成x64,不改的话我就蓝屏

默不作声 发表于 2017-9-18 11:02:52

{:9_222:}装了运行错误,又卸载重装,又不行又卸载,断断续续一个星期终于完成了一小步,不容易

会飞的鱼油 发表于 2017-9-22 13:32:19

error LNK2019: 无法解析的外部符号 _DriverEntry@8,该符号在函数 _FxDriverEntryWorker@8 中被引用
后缀改成c了,为什么会出现这种错误,没安装好吗?

大灰狼来了 发表于 2022-3-13 22:43:14

问下,我是win10系统,用的是VS2017,虚拟机是XP的,怎搭建驱动开发环境,你图片1已经做到,VS上只能设置开发win7下运行的,怎改成XP下运行的,还有.props文件不需要弄吗
页: [1]
查看完整版本: WDK10.0.14393.0配置方法(仅供参考,欢迎探讨并且指出错误)[1](新建一个工程测试WDK)