drivera.h
来自「基于DDK的驱动间同步调用测试示例程序,DriverA是目标驱动,DriverB」· C头文件 代码 · 共 657 行 · 第 1/2 页
H
657 行
BOOLEAN DriverAIsRemovable(
IN PDRIVERA_DEVICE_EXTENSION DeviceExtension
);
BOOLEAN DriverAAcquireRemoveLock(
IN PDRIVERA_DEVICE_EXTENSION DeviceExtension
);
VOID DriverAReleaseRemoveLock(
IN PDRIVERA_DEVICE_EXTENSION DeviceExtension
);
VOID DriverAWaitForSafeRemove(
IN PDRIVERA_DEVICE_EXTENSION DeviceExtension
);
NTSTATUS DriverASubmitIrpSync(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp
);
VOID DriverAStallQueues(
IN PDRIVERA_DEVICE_EXTENSION DeviceExtension
);
VOID DriverARestartQueues(
IN PDRIVERA_DEVICE_EXTENSION DeviceExtension
);
VOID DriverAFlushQueues(
IN PDRIVERA_DEVICE_EXTENSION DeviceExtension,
IN PFILE_OBJECT FileObject
);
///////////////////////////////////////////////////////////////////////////////////////////////////
// Pnp
///////////////////////////////////////////////////////////////////////////////////////////////////
// define this PnP IRP. This IRP is only defined in ntddk.h normally
#if !defined(IRP_MN_QUERY_LEGACY_BUS_INFORMATION)
#define IRP_MN_QUERY_LEGACY_BUS_INFORMATION 0x18
#endif // IRP_MN_QUERY_LEGACY_BUS_INFORMATION
NTSTATUS DriverAStartDevice(
IN PDRIVERA_DEVICE_EXTENSION DeviceExtension,
IN PIRP Irp
);
NTSTATUS DriverAFreeResources(
IN PDRIVERA_DEVICE_EXTENSION DeviceExtension
);
NTSTATUS DriverAGetDeviceCapabilities(
IN PDRIVERA_DEVICE_EXTENSION DeviceExtension
);
///////////////////////////////////////////////////////////////////////////////////////////////////
// Power
///////////////////////////////////////////////////////////////////////////////////////////////////
typedef struct _DRIVERA_POWER_IRP_CONTEXT
{
PKEVENT Event;
NTSTATUS Status;
} DRIVERA_POWER_IRP_CONTEXT, *PDRIVERA_POWER_IRP_CONTEXT;
#ifdef __cplusplus
extern "C" {
#endif // __cplusplus
NTSTATUS DriverASystemPowerDispatch(
IN PDRIVERA_DEVICE_EXTENSION DeviceExtension,
IN PIRP Irp
);
NTSTATUS DriverASystemPowerCompletionRoutine(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp,
IN PVOID Context
);
NTSTATUS DriverADeviceQueryPowerCompletionRoutine(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp,
IN PVOID Context
);
NTSTATUS DriverADeviceSetPowerCompletionRoutine(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp,
IN PVOID Context
);
VOID DriverADevicePowerCompleteCallback(
IN PDEVICE_OBJECT DeviceObject,
IN UCHAR MinorFunction,
IN POWER_STATE PowerState,
IN PVOID Context,
IN PIO_STATUS_BLOCK IoStatus
);
#ifdef __cplusplus
}
#endif // __cplusplus
NTSTATUS DriverAGetDevicePowerState(
IN PDRIVERA_DEVICE_EXTENSION DeviceExtension,
IN SYSTEM_POWER_STATE SystemState,
OUT PDEVICE_POWER_STATE DeviceState
);
VOID DriverAPowerDownPreparation(
IN PDRIVERA_DEVICE_EXTENSION DeviceExtension,
IN PIO_WORKITEM_ROUTINE Callback
);
VOID DriverAPowerDownPrepCallback(
IN PDEVICE_OBJECT DeviceObject,
IN PVOID Context
);
VOID DriverAPowerD0PrepCallback(
IN PDEVICE_OBJECT DeviceObject,
IN PVOID Context
);
VOID DriverAPowerUpCallback(
IN PDEVICE_OBJECT DeviceObject,
IN PVOID Context
);
VOID DriverARequestDevicePowerIrpCallback(
IN PDEVICE_OBJECT DeviceObject,
IN UCHAR MinorFunction,
IN POWER_STATE PowerState,
IN PVOID Context,
IN PIO_STATUS_BLOCK IoStatus
);
NTSTATUS DriverARequestDevicePowerIrp(
IN PDRIVERA_DEVICE_EXTENSION DeviceExtension,
IN DEVICE_POWER_STATE DeviceState
);
///////////////////////////////////////////////////////////////////////////////////////////////////
// Registry
///////////////////////////////////////////////////////////////////////////////////////////////////
PVOID DriverARegQueryValueKey(
IN HANDLE RegKeyHandle,
IN PWSTR SubKeyName,
IN PWSTR ValueName,
OUT PULONG Length
);
VOID DriverARegEnumerateKeys(
IN HANDLE RegKeyHandle
);
VOID DriverARegEnumerateValueKeys(
IN HANDLE RegKeyHandle
);
///////////////////////////////////////////////////////////////////////////////////////////////////
// Debug
///////////////////////////////////////////////////////////////////////////////////////////////////
// definition of debug levels
#define DBG_NONE 0
#define DBG_ERR 1
#define DBG_WARN 2
#define DBG_TRACE 3
#define DBG_INFO 4
#define DBG_VERB 5
#ifdef DRIVERA_WMI_TRACE
/*
tracepdb -f objchk_wxp_x86\i386\DriverA.pdb -p C:\DriverA
SET TRACE_FORMAT_SEARCH_PATH=C:\DriverA
tracelog -start DriverA -guid DriverA.ctl -f DriverA.log -flags 0x7FFFFFFF -level 5
tracelog -stop DriverA
tracefmt -o DriverA.txt -f DriverA.log
*/
#define WPP_AREA_LEVEL_LOGGER(Area,Lvl) WPP_LEVEL_LOGGER(Area)
#define WPP_AREA_LEVEL_ENABLED(Area,Lvl) (WPP_LEVEL_ENABLED(Area) && WPP_CONTROL(WPP_BIT_##Area).Level >= Lvl)
#define WPP_CONTROL_GUIDS \
WPP_DEFINE_CONTROL_GUID(DriverA,(4544BE7B,7CB4,4054,981E,CD92B4143B5B), \
WPP_DEFINE_BIT(DBG_GENERAL) /* bit 0 = 0x00000001 */ \
WPP_DEFINE_BIT(DBG_PNP) /* bit 1 = 0x00000002 */ \
WPP_DEFINE_BIT(DBG_POWER) /* bit 2 = 0x00000004 */ \
WPP_DEFINE_BIT(DBG_COUNT) /* bit 3 = 0x00000008 */ \
WPP_DEFINE_BIT(DBG_CREATECLOSE) /* bit 4 = 0x00000010 */ \
WPP_DEFINE_BIT(DBG_WMI) /* bit 5 = 0x00000020 */ \
WPP_DEFINE_BIT(DBG_UNLOAD) /* bit 6 = 0x00000040 */ \
WPP_DEFINE_BIT(DBG_IO) /* bit 7 = 0x00000080 */ \
WPP_DEFINE_BIT(DBG_INIT) /* bit 8 = 0x00000100 */ \
WPP_DEFINE_BIT(DBG_09) /* bit 9 = 0x00000200 */ \
WPP_DEFINE_BIT(DBG_10) /* bit 10 = 0x00000400 */ \
WPP_DEFINE_BIT(DBG_11) /* bit 11 = 0x00000800 */ \
WPP_DEFINE_BIT(DBG_12) /* bit 12 = 0x00001000 */ \
WPP_DEFINE_BIT(DBG_13) /* bit 13 = 0x00002000 */ \
WPP_DEFINE_BIT(DBG_14) /* bit 14 = 0x00004000 */ \
WPP_DEFINE_BIT(DBG_15) /* bit 15 = 0x00008000 */ \
WPP_DEFINE_BIT(DBG_16) /* bit 16 = 0x00010000 */ \
WPP_DEFINE_BIT(DBG_17) /* bit 17 = 0x00020000 */ \
WPP_DEFINE_BIT(DBG_18) /* bit 18 = 0x00040000 */ \
WPP_DEFINE_BIT(DBG_19) /* bit 19 = 0x00080000 */ \
WPP_DEFINE_BIT(DBG_20) /* bit 20 = 0x00100000 */ \
WPP_DEFINE_BIT(DBG_21) /* bit 21 = 0x00200000 */ \
WPP_DEFINE_BIT(DBG_22) /* bit 22 = 0x00400000 */ \
WPP_DEFINE_BIT(DBG_23) /* bit 23 = 0x00800000 */ \
WPP_DEFINE_BIT(DBG_24) /* bit 24 = 0x01000000 */ \
WPP_DEFINE_BIT(DBG_25) /* bit 25 = 0x02000000 */ \
WPP_DEFINE_BIT(DBG_26) /* bit 26 = 0x04000000 */ \
WPP_DEFINE_BIT(DBG_27) /* bit 27 = 0x08000000 */ \
WPP_DEFINE_BIT(DBG_28) /* bit 28 = 0x10000000 */ \
WPP_DEFINE_BIT(DBG_29) /* bit 29 = 0x20000000 */ \
WPP_DEFINE_BIT(DBG_30) /* bit 30 = 0x40000000 */ \
WPP_DEFINE_BIT(DBG_31) /* bit 31 = 0x80000000 */ \
)
__inline VOID DriverADumpIrp(
IN PIRP Irp
)
{
}
__inline PCHAR SystemPowerStateString(
IN SYSTEM_POWER_STATE SystemState
)
{
return "";
}
__inline PCHAR DevicePowerStateString(
IN DEVICE_POWER_STATE DeviceState
)
{
return "";
}
#else
// definition of debug areas
#define DBG_GENERAL (1 << 0)
#define DBG_PNP (1 << 1)
#define DBG_POWER (1 << 2)
#define DBG_COUNT (1 << 3)
#define DBG_CREATECLOSE (1 << 4)
#define DBG_WMI (1 << 5)
#define DBG_UNLOAD (1 << 6)
#define DBG_IO (1 << 7)
#define DBG_INIT (1 << 8)
#define DBG_ALL 0xFFFFFFFF
#if DBG
VOID DriverADebugPrint(
IN ULONG Area,
IN ULONG Level,
IN PCCHAR Format,
IN ...
);
VOID DriverADumpIrp(
IN PIRP Irp
);
PCHAR IrpMajorFunctionString(
IN UCHAR MajorFunction
);
PCHAR PnPMinorFunctionString(
IN UCHAR MinorFunction
);
PCHAR PowerMinorFunctionString(
IN UCHAR MinorFunction
);
PCHAR SystemPowerStateString(
IN SYSTEM_POWER_STATE SystemState
);
PCHAR DevicePowerStateString(
IN DEVICE_POWER_STATE DeviceState
);
PCHAR WMIMinorFunctionString (
IN UCHAR MinorFunction
);
#else // !DBG
__inline VOID DriverADebugPrint(
IN ULONG Area,
IN ULONG Level,
IN PCCHAR Format,
IN ...
)
{
}
#define DriverADumpIrp(Irp)
#define IrpMajorFunctionString(MajorFunction)
#define PnPMinorFunctionString(MinorFunction)
#define PowerMinorFunctionString(MinorFunction)
#define SystemPowerStateString(SystemState) 0
#define DevicePowerStateString(DeviceState) 0
#define WMIMinorFunctionString(MinorFunction)
#define DriverATdiDumpAddress(Address)
#endif // DBG
#endif // DRIVERA_WMI_TRACE
#endif // __DRIVERA_H__
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?