📄 charsample_ddk.h
字号:
// CharSample_DDK.h
//
// Generated by C DriverWizard 3.1.0 (Build 1722)
// Requires DDK Only
// File created on 7/11/2007
//
#ifndef __CHARSAMPLE_DDK_H__
#define __CHARSAMPLE_DDK_H__
// Memory allocation pool tag
#define CHARSAMPLE_DDK_POOL_TAG 'rahC'
// Make all pool allocations tagged
#undef ExAllocatePool
#define ExAllocatePool(type, size) \
ExAllocatePoolWithTag(type, size, CHARSAMPLE_DDK_POOL_TAG);
// queue start io callback
typedef VOID (*PCHARSAMPLE_DDK_QUEUE_STARTIO)(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp
);
// irp queue type definition
typedef struct _CHARSAMPLE_DDK_QUEUE
{
PCHARSAMPLE_DDK_QUEUE_STARTIO StartIoRoutine;
PDEVICE_OBJECT DeviceObject;
LIST_ENTRY IrpQueue;
KSPIN_LOCK QueueLock;
PIRP CurrentIrp;
KEVENT StopEvent;
LONG StallCount;
NTSTATUS ErrorStatus;
KDPC CharSample_DDKStartIoDpc;
BOOLEAN bUseCharSample_DDKStartIoDpc;
} CHARSAMPLE_DDK_QUEUE, *PCHARSAMPLE_DDK_QUEUE;
// cancel-safe irp list type definition
typedef struct _CHARSAMPLE_DDK_LIST
{
PDEVICE_OBJECT DeviceObject;
LIST_ENTRY IrpList;
KSPIN_LOCK ListLock;
NTSTATUS ErrorStatus;
} CHARSAMPLE_DDK_LIST, *PCHARSAMPLE_DDK_LIST;
// stall IRP list to syncronize Pnp, Power with
// the rest of IO
typedef struct _CHARSAMPLE_DDK_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
} CHARSAMPLE_DDK_IO_LOCK, *PCHARSAMPLE_DDK_IO_LOCK;
// global (per driver) data block
typedef struct _CHARSAMPLE_DDK_DATA
{
UNICODE_STRING RegistryPath; // saved registry path
ULONG InstanceCount; // FDO instance count
USHORT WdmVersion; // os version
} CHARSAMPLE_DDK_DATA, *PCHARSAMPLE_DDK_DATA;
extern CHARSAMPLE_DDK_DATA g_Data;
// PnP states
typedef enum _CHARSAMPLE_DDK_PNP_STATE
{
PnpStateNotStarted = 0,
PnpStateStarted,
PnpStateStopPending,
PnpStateStopped,
PnpStateRemovePending,
PnpStateRemoved,
PnpStateSurpriseRemoved
} CHARSAMPLE_DDK_PNP_STATE;
// The device extension for the device object
typedef struct _CHARSAMPLE_DDK_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
CHARSAMPLE_DDK_IO_LOCK IoLock; // misc io lock
CHARSAMPLE_DDK_PNP_STATE PnpState; // PnP state variable
CHARSAMPLE_DDK_PNP_STATE PreviousPnpState; // Previous PnP state variable
UNICODE_STRING InterfaceName; // name returned from IoRegisterDeviceInterface
LONG OpenHandleCount;
} CHARSAMPLE_DDK_DEVICE_EXTENSION, *PCHARSAMPLE_DDK_DEVICE_EXTENSION;
#ifdef __cplusplus
extern "C"
{
#endif
NTSTATUS __stdcall DriverEntry(
IN PDRIVER_OBJECT DriverObject,
IN PUNICODE_STRING RegistryPath
);
NTSTATUS __stdcall CharSample_DDKAddDevice(
IN PDRIVER_OBJECT DriverObject,
IN PDEVICE_OBJECT PhysicalDeviceObject
);
VOID __stdcall CharSample_DDKUnload(
IN PDRIVER_OBJECT DriverObject
);
NTSTATUS __stdcall CharSample_DDKPnpDispatch(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp
);
NTSTATUS __stdcall CharSample_DDKPowerDispatch(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp
);
NTSTATUS __stdcall CharSample_DDKDeviceIoControlDispatch(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp
);
NTSTATUS __stdcall CharSample_DDKCreateDispatch(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp
);
NTSTATUS __stdcall CharSample_DDKCloseDispatch(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp
);
NTSTATUS __stdcall CharSample_DDKSystemControlDispatch(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp
);
///////////////////////////////////////////////////////////////////////////////////////////////////
// Queue Functions
///////////////////////////////////////////////////////////////////////////////////////////////////
VOID CharSample_DDKInitializeQueue(
IN PCHARSAMPLE_DDK_QUEUE QueueExtension,
IN PCHARSAMPLE_DDK_QUEUE_STARTIO StartIoRoutine,
IN PDEVICE_OBJECT DeviceObject,
IN BOOLEAN bUseCharSample_DDKStartIoDpc
);
NTSTATUS CharSample_DDKQueueIrp(
IN PCHARSAMPLE_DDK_QUEUE QueueExtension,
IN PIRP Irp
);
VOID CharSample_DDKStartNext(
IN PCHARSAMPLE_DDK_QUEUE QueueExtension
);
VOID CharSample_DDKFlushQueue(
IN PCHARSAMPLE_DDK_QUEUE QueueExtension,
IN PFILE_OBJECT FileObject
);
VOID CharSample_DDKInvalidateQueue(
IN PCHARSAMPLE_DDK_QUEUE Queue,
IN NTSTATUS ErrorStatus
);
VOID CharSample_DDKPauseQueue(
IN PCHARSAMPLE_DDK_QUEUE QueueExtension
);
VOID CharSample_DDKRestartQueue(
IN PCHARSAMPLE_DDK_QUEUE QueueExtension
);
VOID CharSample_DDKStartIoDpc(
IN PKDPC Dpc,
IN PVOID Context,
IN PVOID Unused1,
IN PVOID Unused2
);
VOID CharSample_DDKQueueCancelRoutine(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp
);
///////////////////////////////////////////////////////////////////////////////////////////////////
// List functions
///////////////////////////////////////////////////////////////////////////////////////////////////
VOID CharSample_DDKInitializeList(
IN PCHARSAMPLE_DDK_LIST List,
IN PDEVICE_OBJECT DeviceObject
);
NTSTATUS CharSample_DDKInsertHead(
IN PCHARSAMPLE_DDK_LIST List,
IN PIRP Irp
);
NTSTATUS CharSample_DDKInsertTail(
IN PCHARSAMPLE_DDK_LIST List,
IN PIRP Irp
);
PIRP CharSample_DDKRemoveHead(
IN PCHARSAMPLE_DDK_LIST List
);
PIRP CharSample_DDKRemoveTail(
IN PCHARSAMPLE_DDK_LIST List
);
VOID CharSample_DDKFlushList(
IN PCHARSAMPLE_DDK_LIST List,
IN PFILE_OBJECT FileObject
);
VOID CharSample_DDKInvalidateList(
IN PCHARSAMPLE_DDK_LIST List,
IN NTSTATUS ErrorStatus
);
VOID CharSample_DDKListCancelRoutine(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp
);
///////////////////////////////////////////////////////////////////////////////////////////////////
// CHARSAMPLE_DDK_IO_LOCK
///////////////////////////////////////////////////////////////////////////////////////////////////
VOID CharSample_DDKInitializeIoLock(
IN PCHARSAMPLE_DDK_IO_LOCK IoLock,
IN PDEVICE_OBJECT DeviceObject
);
NTSTATUS CharSample_DDKCheckIoLock(
IN PCHARSAMPLE_DDK_IO_LOCK IoLock,
IN PIRP Irp
);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -