Windows 驱动入门代码结构
Posted blfbuaa
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Windows 驱动入门代码结构相关的知识,希望对你有一定的参考价值。
windows驱动程序基础。转载标明出处:http://blog.csdn.net/ikerpeng/article/details/38777641
windows驱动程序结构:
我想说的是windows驱动程序的结构和C++的程序结构是一样的,在你知道这一点以后你就会认为简单了很多。
首先在一个头文件中面做一些必要的预处理。然后定义会用到的设备扩展结构体(相当于Class);接下来就是函数的声明。
当这一切结束以后,我们就在.cpp文件中面实现这些函数。可是不一样的地方要说一下:
1.这里声明的结构体是用来存储设备的信息的。
2.声明的函数在结构体外面,为了和C兼容要使用extern“c”;
3.声明的函数一般来说分为,函数的入口(相当于main函数),设备创建函数。设备的卸载3个部分。
以下我们来看一下作者书里面的样例:(备注,最后几行是我iker对比作者的两个样例以后加上的)
#001 /**************************************************************
#002 * 文件名:Driver.h
#003 * 作 者:张帆
#004 * 完毕日期:2007-11-1
#005 ************************************************************/
#006 #pragma once
#007
#008 #ifdef __cplusplus
#009 extern "C"
#010 {
#011 #endif
#012 #include <NTDDK.h>
#013 #ifdef __cplusplus
#014 }
#015 #endif
#016
#017 #define PAGEDCODE code_seg("PAGE")
#018 #define LOCKEDCODE code_seg()
#019 #define INITCODE code_seg("INIT")
#020
021 #define PAGEDDATA data_seg("PAGE")
#022 #define LOCKEDDATA data_seg()
#023 #define INITDATA data_seg("INIT")
#024
#025 #define arraysize(p) (sizeof(p)/sizeof((p)[0]))
#026 以上是预编译处理:导入了NT驱动须要的头文件。兼容到C++语言,另一些宏定义
#027 typedef struct _DEVICE_EXTENSION {
#028 PDEVICE_OBJECT pDevice;
#029 UNICODE_STRING ustrDeviceName; //设备名称
#030 UNICODE_STRING ustrSymLinkName; //符号链接名
#031 } DEVICE_EXTENSION, *PDEVICE_EXTENSION;
#032
#033 // 函数声明
#034
#035 NTSTATUS CreateDevice (IN PDRIVER_OBJECT pDriverObject);//这里是声明创建一个设备的函数 #036 VOID HelloDDKUnload (IN PDRIVER_OBJECT pDriverObject);//这里是声明一个卸载驱动的函数#037 NTSTATUS HelloDDKDispatchRoutine(IN PDEVICE_OBJECT pDevObj,
#038 IN PIRP pIrp);//这里是声明一个默认派遣的函数
#039
#040 extern "C"
#041 NTSTATUS DriverEntry(IN PDRIVER_OBJECT DriverObject,
#042 IN PUNICODE_STRING RegistryPath);
//这里是定义函数的入口,相当于main函数
接下来就是在.cpp文件中面实现这几个函数,大家应该也非常清楚了,就不再赘述!
參考:
http://book.51cto.com/art/200807/79760.htm
《 Windows 驱动开发技术具体解释 》
以上是关于Windows 驱动入门代码结构的主要内容,如果未能解决你的问题,请参考以下文章
终于懂了:Delphi重定义消息结构随心所欲,只需要前4个字节是消息编号就行了,跟Windows消息虽然尽量保持一致,但其实相互没有特别大的关系。有了这个,就有了主动,带不带句柄完全看需要。(代码片段