/*******************************
*文件名:HelloWDM.h
******************************/
#ifdef __cplusplus
extern "C"
{
#endif
#include <wdm.h>
#ifdef __cplusplus
}
#endif
typedef struct _DEVICE_EXTENSION
{
PDEVICE_OBJECT fdo;
PDEVICE_OBJECT NextStackDevice;
UNICODE_STRING ustrDeviceName;//设备名
UNICODE_STRING ustrSymLinkName;//符号链接名
} DEVICE_EXTENSION,*PDEVICE_EXTENSION;
#define PAGEDCODE code_seg("PAGE")
#define LOCKEDCODE code_seg()
#define INITCODE code_seg("INIT")
#define PAGEDDATA data_seg("PAGE")
#define LOCKEDDATA data_seg()
#define INITDATA data_seg("INIT")
#define arraysize(p) (sizeof(p)/sizeof((p)[0]))
NTSTATUS HelloWDMAddDevice(IN PDRIVER_OBJECT DriverObject,IN PDEVICE_OBJECT PhysicalDeviceObject);
NTSTATUS HelloWDMPnp(IN PDEVICE_OBJECT fdo,IN PIRP Irp);
NTSTATUS HelloWDMDispatchRoutine(IN PDEVICE_OBJECT fdo,IN PIRP Irp);
void HelloWDMUnload(IN PDRIVER_OBJECT DriverObject);
extern "C"
NTSTATUS DriverEntry(IN PDRIVER_OBJECT DriverObject,IN PUNICODE_STRING RegistryPath);
和HelloDDK的头文件的区别:
一、#include <wdm.h>而不是ntddk.h
二、DEVICE_EXTENSION的定义不同。这里多了个结构变量PDEVICE_OBJECT NextStackDevice。
三、多了HelloWDMAddDevice和HelloWDMPnp两个函数声明。其中前一个函数是完成一些驱动的初始化工作,而后一个函数则是为了支持PNP即插即用的功能。