|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 无符号整形 于 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目录,有惊喜等着你!
没错!那是我们编译出来的驱动!那么他怎么被系统加载呢?下一集你就知道啦!
如何让系统加载我们的驱动,点我就知道啦~ |
评分
-
查看全部评分
|