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:}
如何让系统加载我们的驱动,点我就知道啦~ 顶{:10_248:} 编译平台似乎要改成x64,不改的话我就蓝屏 {:9_222:}装了运行错误,又卸载重装,又不行又卸载,断断续续一个星期终于完成了一小步,不容易 error LNK2019: 无法解析的外部符号 _DriverEntry@8,该符号在函数 _FxDriverEntryWorker@8 中被引用
后缀改成c了,为什么会出现这种错误,没安装好吗? 问下,我是win10系统,用的是VS2017,虚拟机是XP的,怎搭建驱动开发环境,你图片1已经做到,VS上只能设置开发win7下运行的,怎改成XP下运行的,还有.props文件不需要弄吗
页:
[1]