drivera.h
来自「基于DDK的驱动间同步调用测试示例程序,DriverA是目标驱动,DriverB」· C头文件 代码 · 共 657 行 · 第 1/2 页
H
657 行
// DriverA.h
//
// Generated by C DriverWizard 3.2.0 (Build 2485)
// Requires DDK Only
// File created on 3/11/2009
//
#ifndef __DRIVERA_H__
#define __DRIVERA_H__
#ifndef RTL_CONSTANT_STRING
#define RTL_CONSTANT_STRING(s) { sizeof( s ) - sizeof( (s)[0] ), sizeof( s ), s }
#endif
// Memory allocation pool tag
#define DRIVERA_POOL_TAG 'virD'
// Make all pool allocations tagged
#undef ExAllocatePool
#define ExAllocatePool(type, size) \
ExAllocatePoolWithTag(type, size, DRIVERA_POOL_TAG);
// queue start io callback
typedef VOID (*PDRIVERA_QUEUE_STARTIO)(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp
);
// irp queue type definition
typedef struct _DRIVERA_QUEUE
{
PDRIVERA_QUEUE_STARTIO StartIoRoutine;
PDEVICE_OBJECT DeviceObject;
LIST_ENTRY IrpQueue;
KSPIN_LOCK QueueLock;
PIRP CurrentIrp;
KEVENT StopEvent;
LONG StallCount;
NTSTATUS ErrorStatus;
KDPC DriverAStartIoDpc;
BOOLEAN bUseDriverAStartIoDpc;
} DRIVERA_QUEUE, *PDRIVERA_QUEUE;
// cancel-safe irp list type definition
typedef struct _DRIVERA_LIST
{
PDEVICE_OBJECT DeviceObject;
LIST_ENTRY IrpList;
KSPIN_LOCK ListLock;
NTSTATUS ErrorStatus;
} DRIVERA_LIST, *PDRIVERA_LIST;
// stall IRP list to syncronize Pnp, Power with
// the rest of IO
typedef struct _DRIVERA_IO_LOCK
{
PDEVICE_OBJECT DeviceObject; // our device object
KEVENT StallCompleteEvent; // io stalled event
LIST_ENTRY StallIrpList; // stalled irps
KSPIN_LOCK IoLock; // spin lock to syncronize io with stall/unstall
LONG StallCount; // number of times stall was requested
LONG ActiveIrpCount; // number of oustanding, not-stalled IRPs
NTSTATUS ErrorStatus;
PIRP CurrentIrp; // used by unstall code
} DRIVERA_IO_LOCK, *PDRIVERA_IO_LOCK;
// global (per driver) data block
typedef struct _DRIVERA_DATA
{
UNICODE_STRING RegistryPath; // saved registry path
ULONG InstanceCount; // FDO instance count
USHORT WdmVersion; // os version
} DRIVERA_DATA, *PDRIVERA_DATA;
extern DRIVERA_DATA g_Data;
// PnP states
typedef enum _DRIVERA_PNP_STATE
{
PnpStateNotStarted = 0,
PnpStateStarted,
PnpStateStopPending,
PnpStateStopped,
PnpStateRemovePending,
PnpStateRemoved,
PnpStateSurpriseRemoved
} DRIVERA_PNP_STATE;
// The device extension for the device object
typedef struct _DRIVERA_DEVICE_EXTENSION
{
PDEVICE_OBJECT DeviceObject; // pointer to the DeviceObject
PDEVICE_OBJECT PhysicalDeviceObject; // underlying PDO
PDEVICE_OBJECT LowerDeviceObject; // top of the device stack
LONG RemoveCount; // 1-based reference count
KEVENT RemoveEvent; // event to sync device removal
DRIVERA_IO_LOCK IoLock; // misc io lock
DRIVERA_PNP_STATE PnpState; // PnP state variable
DRIVERA_PNP_STATE PreviousPnpState; // Previous PnP state variable
SYSTEM_POWER_STATE SystemPowerState; // current system power state
DEVICE_POWER_STATE DevicePowerState; // current device power state
DEVICE_CAPABILITIES DeviceCaps; // device capabilities used to get S to D mappings
PIRP SystemPowerIrp; // Storage for system IRP during power transitions
PIRP DevicePowerIrp; // Storage for device IRP during power transitions
PIO_WORKITEM PowerWorkItem; // Work item used for power transitions
LONG bPowerStop; // Flag to signal that power code stopped io
LONG OpenHandleCount;
KDPC PollingDPC; //存储DPC对象
KTIMER PollingTimer; //存储定时器对象
PIRP CurrentPendingIrp; //当前挂起的IRP
} DRIVERA_DEVICE_EXTENSION, *PDRIVERA_DEVICE_EXTENSION;
#ifdef __cplusplus
extern "C"
{
#endif
NTSTATUS __stdcall DriverEntry(
IN PDRIVER_OBJECT DriverObject,
IN PUNICODE_STRING RegistryPath
);
NTSTATUS __stdcall DriverAAddDevice(
IN PDRIVER_OBJECT DriverObject,
IN PDEVICE_OBJECT PhysicalDeviceObject
);
VOID __stdcall DriverAUnload(
IN PDRIVER_OBJECT DriverObject
);
NTSTATUS __stdcall DriverAPnpDispatch(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp
);
NTSTATUS __stdcall DriverAPowerDispatch(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp
);
NTSTATUS __stdcall DriverADeviceIoControlDispatch(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp
);
NTSTATUS __stdcall DriverACreateDispatch(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp
);
NTSTATUS __stdcall DriverACloseDispatch(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp
);
NTSTATUS __stdcall DriverAReadDispatch(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp
);
NTSTATUS __stdcall DriverAWriteDispatch(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp
);
NTSTATUS __stdcall DriverACleanupDispatch(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp
);
NTSTATUS __stdcall DriverASystemControlDispatch(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp
);
///////////////////////////////////////////////////////////////////////////////////////////////////
// Queue Functions
///////////////////////////////////////////////////////////////////////////////////////////////////
VOID DriverAInitializeQueue(
IN PDRIVERA_QUEUE QueueExtension,
IN PDRIVERA_QUEUE_STARTIO StartIoRoutine,
IN PDEVICE_OBJECT DeviceObject,
IN BOOLEAN bUseDriverAStartIoDpc
);
NTSTATUS DriverAQueueIrp(
IN PDRIVERA_QUEUE QueueExtension,
IN PIRP Irp
);
VOID DriverAStartNext(
IN PDRIVERA_QUEUE QueueExtension
);
VOID DriverAFlushQueue(
IN PDRIVERA_QUEUE QueueExtension,
IN PFILE_OBJECT FileObject
);
VOID DriverAInvalidateQueue(
IN PDRIVERA_QUEUE Queue,
IN NTSTATUS ErrorStatus
);
VOID DriverAPauseQueue(
IN PDRIVERA_QUEUE QueueExtension
);
VOID DriverARestartQueue(
IN PDRIVERA_QUEUE QueueExtension
);
VOID DriverAStartIoDpc(
IN PKDPC Dpc,
IN PVOID Context,
IN PVOID Unused1,
IN PVOID Unused2
);
VOID DriverAQueueCancelRoutine(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp
);
///////////////////////////////////////////////////////////////////////////////////////////////////
// List functions
///////////////////////////////////////////////////////////////////////////////////////////////////
VOID DriverAInitializeList(
IN PDRIVERA_LIST List,
IN PDEVICE_OBJECT DeviceObject
);
NTSTATUS DriverAInsertHead(
IN PDRIVERA_LIST List,
IN PIRP Irp
);
NTSTATUS DriverAInsertTail(
IN PDRIVERA_LIST List,
IN PIRP Irp
);
PIRP DriverARemoveHead(
IN PDRIVERA_LIST List
);
PIRP DriverARemoveTail(
IN PDRIVERA_LIST List
);
VOID DriverAFlushList(
IN PDRIVERA_LIST List,
IN PFILE_OBJECT FileObject
);
VOID DriverAInvalidateList(
IN PDRIVERA_LIST List,
IN NTSTATUS ErrorStatus
);
VOID DriverAListCancelRoutine(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp
);
///////////////////////////////////////////////////////////////////////////////////////////////////
// DRIVERA_IO_LOCK
///////////////////////////////////////////////////////////////////////////////////////////////////
VOID DriverAInitializeIoLock(
IN PDRIVERA_IO_LOCK IoLock,
IN PDEVICE_OBJECT DeviceObject
);
NTSTATUS DriverACheckIoLock(
IN PDRIVERA_IO_LOCK IoLock,
IN PIRP Irp
);
VOID DriverAPendingIoCancelRoutine(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp
);
NTSTATUS DriverAIncrementIoCount(
IN PDRIVERA_IO_LOCK IoLock
);
VOID DriverADecrementIoCount(
IN PDRIVERA_IO_LOCK IoLock
);
VOID DriverALockIo(
IN PDRIVERA_IO_LOCK IoLock
);
VOID DriverAWaitForStopIo(
IN PDRIVERA_IO_LOCK IoLock
);
VOID DriverAUnlockIo(
IN PDRIVERA_IO_LOCK IoLock
);
VOID DriverAFlushPendingIo(
IN PDRIVERA_IO_LOCK IoLock,
IN PFILE_OBJECT FileObject
);
VOID DriverAInvalidateIo(
IN PDRIVERA_IO_LOCK IoLock,
IN NTSTATUS ErrorStatus
);
#ifdef __cplusplus
}
#endif
BOOLEAN DriverAIsStoppable(
IN PDRIVERA_DEVICE_EXTENSION DeviceExtension
);
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?