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 + -
显示快捷键?