driver.h

来自「老外写的一个相当不错的虚拟显示器驱动」· C头文件 代码 · 共 58 行

H
58
字号
#include <ntddk.h>
#include <parallel.h>
#include <initguid.h>
#include <wdmguid.h>
#include "stdarg.h"
#include "stdio.h"
#include "stddef.h"


/* The device extension for the device object */
typedef struct _FDO_DATA
{
	PDEVICE_OBJECT					DeviceObject;				// The device object this extension belongs to.
	BOOLEAN							AcceptIRQs;					// TRUE if we are ready to accept interrupts.
	KDPC							DpcForPortIsr;

	LIST_ENTRY						ReadIrpQueue;				// The actual read queue that underlies the CS queue.
	IO_CSQ							CSReadQueue;				// Cancel-safe read IRP queue.
	KSPIN_LOCK						ReadQueueLock;				// The spin lock that protects the read queue.
} FDO_DATA, *PFDO_DATA;


// DriverEntry.c
NTSTATUS DriverEntry(IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING RegistryPath);

// Unload.c
VOID Unload(IN PDRIVER_OBJECT DriverObject);

// CreateClose.c
NTSTATUS DispatchCreate(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp);
NTSTATUS DispatchClose(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp);

/* Read.c */
NTSTATUS DispatchRead(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp);

// Ioctl.c
NTSTATUS DispatchDevCtrl(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp);

// ISR.c
BOOLEAN IsrRoutine(IN PKINTERRUPT Interrupt, IN PVOID ServiceContext);
VOID DpcForIsrRoutine(IN PKDPC pDpc, IN PVOID pContext, IN PVOID pArg1, IN PVOID pArg2);
BOOLEAN EnableIRQ(IN PVOID SynchronizeContext);
BOOLEAN DisableIRQ(IN PVOID SynchronizeContext);

/* CSQueueRoutines.c */
VOID CSReadInsertIrp(IN PIO_CSQ Csq, IN PIRP Irp);
VOID CSReadRemoveIrp(IN PIO_CSQ Csq, IN PIRP Irp);
PIRP CSReadPeekNextIrp(IN PIO_CSQ Csq, IN PIRP Irp, IN PVOID PeekContext);
VOID CSReadAcquireLock(IN PIO_CSQ Csq, OUT PKIRQL Irql);
VOID CSReadReleaseLock(IN PIO_CSQ Csq, IN KIRQL Irql);
VOID CSWriteInsertIrp(IN PIO_CSQ Csq, IN PIRP Irp);
VOID CSWriteRemoveIrp(IN PIO_CSQ Csq, IN PIRP Irp);
PIRP CSWritePeekNextIrp(IN PIO_CSQ Csq, IN PIRP Irp, IN PVOID PeekContext);
VOID CSWriteAcquireLock(IN PIO_CSQ Csq, OUT PKIRQL Irql);
VOID CSWriteReleaseLock(IN PIO_CSQ Csq, IN KIRQL Irql);
VOID CSReadCompleteCanceledIrp(IN PIO_CSQ Csq, IN PIRP Irp);
VOID CSWriteCompleteCanceledIrp(IN PIO_CSQ Csq, IN PIRP Irp);

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?