最近写一个简单的串口过滤驱动,代码如下:
driver.h
#ifdef __cplusplus
extern "C"
{
#endif
#include <ntddk.h>
#ifdef __cplusplus
}
#endif
#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(x) (sizeof(x) / sizeof(x[0]))
typedef struct
{
PDEVICE_OBJECT LowerLevelDeviceObject;
UNICODE_STRING SymbolicLink;
}DEVICE_EXTENSION, *PDEVICE_EXTENSION;
NTSTATUS DispatchPassthrough(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp);
NTSTATUS Read(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp);
VOID DriverUnload(IN PDRIVER_OBJECT DriverObject);
NTSTATUS CreateDevice(IN PDRIVER_OBJECT DriverObject);
NTSTATUS OnRead(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp, IN PVOID Context);
driver.cpp
#include "Driver.h"
#pragma INITCODE
#ifdef __cplusplus
extern "C"
{
#endif
NTSTATUS DriverEntry(IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING RegistryPath)
{
KdPrint(("Enter DriverEntry!/n"));
for(int i = 0; i < IRP_MJ_MAXIMUM_FUNCTION; i++)
DriverObject->MajorFunction[i] = DispatchPassthrough;
DriverObject->MajorFuncti