📄 driverb_syn.h
字号:
// DriverB_Syn.h
//
// Generated by C DriverWizard 3.2.0 (Build 2485)
// Requires DDK Only
// File created on 3/12/2009
//
#ifndef __DRIVERB_SYN_H__
#define __DRIVERB_SYN_H__
#ifndef RTL_CONSTANT_STRING
#define RTL_CONSTANT_STRING(s) { sizeof( s ) - sizeof( (s)[0] ), sizeof( s ), s }
#endif
// Memory allocation pool tag
#define DRIVERB_SYN_POOL_TAG 'virD'
// Make all pool allocations tagged
#undef ExAllocatePool
#define ExAllocatePool(type, size) \
ExAllocatePoolWithTag(type, size, DRIVERB_SYN_POOL_TAG);
// queue start io callback
typedef VOID (*PDRIVERB_SYN_QUEUE_STARTIO)(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp
);
// irp queue type definition
typedef struct _DRIVERB_SYN_QUEUE
{
PDRIVERB_SYN_QUEUE_STARTIO StartIoRoutine;
PDEVICE_OBJECT DeviceObject;
LIST_ENTRY IrpQueue;
KSPIN_LOCK QueueLock;
PIRP CurrentIrp;
KEVENT StopEvent;
LONG StallCount;
NTSTATUS ErrorStatus;
KDPC DriverB_SynStartIoDpc;
BOOLEAN bUseDriverB_SynStartIoDpc;
} DRIVERB_SYN_QUEUE, *PDRIVERB_SYN_QUEUE;
// cancel-safe irp list type definition
typedef struct _DRIVERB_SYN_LIST
{
PDEVICE_OBJECT DeviceObject;
LIST_ENTRY IrpList;
KSPIN_LOCK ListLock;
NTSTATUS ErrorStatus;
} DRIVERB_SYN_LIST, *PDRIVERB_SYN_LIST;
// stall IRP list to syncronize Pnp, Power with
// the rest of IO
typedef struct _DRIVERB_SYN_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
} DRIVERB_SYN_IO_LOCK, *PDRIVERB_SYN_IO_LOCK;
// global (per driver) data block
typedef struct _DRIVERB_SYN_DATA
{
UNICODE_STRING RegistryPath; // saved registry path
ULONG InstanceCount; // FDO instance count
USHORT WdmVersion; // os version
} DRIVERB_SYN_DATA, *PDRIVERB_SYN_DATA;
extern DRIVERB_SYN_DATA g_Data;
// PnP states
typedef enum _DRIVERB_SYN_PNP_STATE
{
PnpStateNotStarted = 0,
PnpStateStarted,
PnpStateStopPending,
PnpStateStopped,
PnpStateRemovePending,
PnpStateRemoved,
PnpStateSurpriseRemoved
} DRIVERB_SYN_PNP_STATE;
// The device extension for the device object
typedef struct _DRIVERB_SYN_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
DRIVERB_SYN_IO_LOCK IoLock; // misc io lock
DRIVERB_SYN_PNP_STATE PnpState; // PnP state variable
DRIVERB_SYN_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;
} DRIVERB_SYN_DEVICE_EXTENSION, *PDRIVERB_SYN_DEVICE_EXTENSION;
#ifdef __cplusplus
extern "C"
{
#endif
NTSTATUS __stdcall DriverEntry(
IN PDRIVER_OBJECT DriverObject,
IN PUNICODE_STRING RegistryPath
);
NTSTATUS __stdcall DriverB_SynAddDevice(
IN PDRIVER_OBJECT DriverObject,
IN PDEVICE_OBJECT PhysicalDeviceObject
);
VOID __stdcall DriverB_SynUnload(
IN PDRIVER_OBJECT DriverObject
);
NTSTATUS __stdcall DriverB_SynPnpDispatch(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp
);
NTSTATUS __stdcall DriverB_SynPowerDispatch(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp
);
NTSTATUS __stdcall DriverB_SynDeviceIoControlDispatch(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp
);
NTSTATUS __stdcall DriverB_SynCreateDispatch(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp
);
NTSTATUS __stdcall DriverB_SynCloseDispatch(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp
);
NTSTATUS __stdcall DriverB_SynReadDispatch(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp
);
NTSTATUS __stdcall DriverB_SynWriteDispatch(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp
);
NTSTATUS __stdcall DriverB_SynCleanupDispatch(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp
);
NTSTATUS __stdcall DriverB_SynSystemControlDispatch(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp
);
///////////////////////////////////////////////////////////////////////////////////////////////////
// Queue Functions
///////////////////////////////////////////////////////////////////////////////////////////////////
VOID DriverB_SynInitializeQueue(
IN PDRIVERB_SYN_QUEUE QueueExtension,
IN PDRIVERB_SYN_QUEUE_STARTIO StartIoRoutine,
IN PDEVICE_OBJECT DeviceObject,
IN BOOLEAN bUseDriverB_SynStartIoDpc
);
NTSTATUS DriverB_SynQueueIrp(
IN PDRIVERB_SYN_QUEUE QueueExtension,
IN PIRP Irp
);
VOID DriverB_SynStartNext(
IN PDRIVERB_SYN_QUEUE QueueExtension
);
VOID DriverB_SynFlushQueue(
IN PDRIVERB_SYN_QUEUE QueueExtension,
IN PFILE_OBJECT FileObject
);
VOID DriverB_SynInvalidateQueue(
IN PDRIVERB_SYN_QUEUE Queue,
IN NTSTATUS ErrorStatus
);
VOID DriverB_SynPauseQueue(
IN PDRIVERB_SYN_QUEUE QueueExtension
);
VOID DriverB_SynRestartQueue(
IN PDRIVERB_SYN_QUEUE QueueExtension
);
VOID DriverB_SynStartIoDpc(
IN PKDPC Dpc,
IN PVOID Context,
IN PVOID Unused1,
IN PVOID Unused2
);
VOID DriverB_SynQueueCancelRoutine(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp
);
///////////////////////////////////////////////////////////////////////////////////////////////////
// List functions
///////////////////////////////////////////////////////////////////////////////////////////////////
VOID DriverB_SynInitializeList(
IN PDRIVERB_SYN_LIST List,
IN PDEVICE_OBJECT DeviceObject
);
NTSTATUS DriverB_SynInsertHead(
IN PDRIVERB_SYN_LIST List,
IN PIRP Irp
);
NTSTATUS DriverB_SynInsertTail(
IN PDRIVERB_SYN_LIST List,
IN PIRP Irp
);
PIRP DriverB_SynRemoveHead(
IN PDRIVERB_SYN_LIST List
);
PIRP DriverB_SynRemoveTail(
IN PDRIVERB_SYN_LIST List
);
VOID DriverB_SynFlushList(
IN PDRIVERB_SYN_LIST List,
IN PFILE_OBJECT FileObject
);
VOID DriverB_SynInvalidateList(
IN PDRIVERB_SYN_LIST List,
IN NTSTATUS ErrorStatus
);
VOID DriverB_SynListCancelRoutine(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp
);
///////////////////////////////////////////////////////////////////////////////////////////////////
// DRIVERB_SYN_IO_LOCK
///////////////////////////////////////////////////////////////////////////////////////////////////
VOID DriverB_SynInitializeIoLock(
IN PDRIVERB_SYN_IO_LOCK IoLock,
IN PDEVICE_OBJECT DeviceObject
);
NTSTATUS DriverB_SynCheckIoLock(
IN PDRIVERB_SYN_IO_LOCK IoLock,
IN PIRP Irp
);
VOID DriverB_SynPendingIoCancelRoutine(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp
);
NTSTATUS DriverB_SynIncrementIoCount(
IN PDRIVERB_SYN_IO_LOCK IoLock
);
VOID DriverB_SynDecrementIoCount(
IN PDRIVERB_SYN_IO_LOCK IoLock
);
VOID DriverB_SynLockIo(
IN PDRIVERB_SYN_IO_LOCK IoLock
);
VOID DriverB_SynWaitForStopIo(
IN PDRIVERB_SYN_IO_LOCK IoLock
);
VOID DriverB_SynUnlockIo(
IN PDRIVERB_SYN_IO_LOCK IoLock
);
VOID DriverB_SynFlushPendingIo(
IN PDRIVERB_SYN_IO_LOCK IoLock,
IN PFILE_OBJECT FileObject
);
VOID DriverB_SynInvalidateIo(
IN PDRIVERB_SYN_IO_LOCK IoLock,
IN NTSTATUS ErrorStatus
);
#ifdef __cplusplus
}
#endif
BOOLEAN DriverB_SynIsStoppable(
IN PDRIVERB_SYN_DEVICE_EXTENSION DeviceExtension
);
BOOLEAN DriverB_SynIsRemovable(
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -