⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 vscsidisk.h

📁 虚拟Scsi Disk源程序 版权归原作者
💻 H
📖 第 1 页 / 共 2 页
字号:
NTSTATUS VScsiDiskGetDeviceCapabilities(
    IN  PVSCSIDISK_DEVICE_EXTENSION    DeviceExtension
    );

///////////////////////////////////////////////////////////////////////////////////////////////////
// Power
///////////////////////////////////////////////////////////////////////////////////////////////////

typedef struct _VSCSIDISK_POWER_IRP_CONTEXT
{
    PKEVENT         Event;
    NTSTATUS        Status;
} VSCSIDISK_POWER_IRP_CONTEXT, *PVSCSIDISK_POWER_IRP_CONTEXT;


#ifdef __cplusplus
extern "C" {
#endif // __cplusplus

NTSTATUS VScsiDiskSystemPowerDispatch(
    IN  PVSCSIDISK_DEVICE_EXTENSION        DeviceExtension,
    IN  PIRP                        Irp
    );

NTSTATUS VScsiDiskSystemPowerCompletionRoutine(
    IN  PDEVICE_OBJECT  DeviceObject,
    IN  PIRP            Irp,
    IN  PVOID           Context
    );

NTSTATUS VScsiDiskDeviceQueryPowerCompletionRoutine(
    IN  PDEVICE_OBJECT  DeviceObject,
    IN  PIRP            Irp,
    IN  PVOID           Context
    );

NTSTATUS VScsiDiskDeviceSetPowerCompletionRoutine(
    IN  PDEVICE_OBJECT  DeviceObject,
    IN  PIRP            Irp,
    IN  PVOID           Context
    );

VOID VScsiDiskDevicePowerCompleteCallback(
    IN  PDEVICE_OBJECT      DeviceObject,
    IN  UCHAR               MinorFunction,
    IN  POWER_STATE         PowerState,
    IN  PVOID               Context,
    IN  PIO_STATUS_BLOCK    IoStatus
    );

#ifdef __cplusplus
}
#endif // __cplusplus

NTSTATUS VScsiDiskGetDevicePowerState(
    IN  PVSCSIDISK_DEVICE_EXTENSION        DeviceExtension,
    IN  SYSTEM_POWER_STATE              SystemState,
    OUT PDEVICE_POWER_STATE             DeviceState
    );

VOID VScsiDiskPowerDownPreparation(
    IN  PVSCSIDISK_DEVICE_EXTENSION        DeviceExtension,
    IN  PIO_WORKITEM_ROUTINE                Callback
    );

VOID VScsiDiskPowerDownPrepCallback(
    IN  PDEVICE_OBJECT  DeviceObject,
    IN  PVOID           Context
    );

VOID VScsiDiskPowerD0PrepCallback(
    IN  PDEVICE_OBJECT  DeviceObject,
    IN  PVOID           Context
    );

VOID VScsiDiskPowerUpCallback(
    IN  PDEVICE_OBJECT  DeviceObject,
    IN  PVOID           Context
    );

VOID VScsiDiskRequestDevicePowerIrpCallback(
    IN  PDEVICE_OBJECT      DeviceObject,
    IN  UCHAR               MinorFunction,
    IN  POWER_STATE         PowerState,
    IN  PVOID               Context,
    IN  PIO_STATUS_BLOCK    IoStatus
    );

NTSTATUS VScsiDiskRequestDevicePowerIrp(
    IN  PVSCSIDISK_DEVICE_EXTENSION        DeviceExtension,
    IN  DEVICE_POWER_STATE             DeviceState
    );


///////////////////////////////////////////////////////////////////////////////////////////////////
// Registry
///////////////////////////////////////////////////////////////////////////////////////////////////

PVOID VScsiDiskRegQueryValueKey(
    IN  HANDLE  RegKeyHandle,
    IN  PWSTR   SubKeyName,
    IN  PWSTR   ValueName,
    OUT PULONG  Length
    );

VOID VScsiDiskRegEnumerateKeys(
    IN  HANDLE RegKeyHandle
    );

VOID VScsiDiskRegEnumerateValueKeys(
    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 VSCSIDISK_WMI_TRACE

/*
tracepdb -f objchk_wxp_x86\i386\VScsiDisk.pdb -p C:\VScsiDisk
SET TRACE_FORMAT_SEARCH_PATH=C:\VScsiDisk

tracelog -start VScsiDisk -guid VScsiDisk.ctl -f VScsiDisk.log -flags 0x7FFFFFFF -level 5
tracelog -stop VScsiDisk

tracefmt -o VScsiDisk.txt -f VScsiDisk.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(VScsiDisk,(D91B784A,F6D0,4D45,BFF1,F9B78FF039DE), \
        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 VScsiDiskDumpIrp(
    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 VScsiDiskDebugPrint(
    IN ULONG    Area,
    IN ULONG    Level,
    IN PCCHAR   Format,
    IN          ...
    );

VOID VScsiDiskDumpIrp(
    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 VScsiDiskDebugPrint(
    IN ULONG    Area,
    IN ULONG    Level,
    IN PCCHAR   Format,
    IN          ...
    )
{
}

#define VScsiDiskDumpIrp(Irp)
#define IrpMajorFunctionString(MajorFunction)
#define PnPMinorFunctionString(MinorFunction)
#define PowerMinorFunctionString(MinorFunction)
#define SystemPowerStateString(SystemState) 0
#define DevicePowerStateString(DeviceState) 0
#define WMIMinorFunctionString(MinorFunction)
#define VScsiDiskTdiDumpAddress(Address)

#endif	// DBG
#endif	// VSCSIDISK_WMI_TRACE

NTSTATUS VScsiDiskPdoPnpDispatch(
    IN PDEVICE_OBJECT   DeviceObject,
    IN PIRP             Irp
    );

NTSTATUS VScsiDiskPdoForwardRequestToParent(
    IN  PVSCSIDISK_PDO_DEVICE_EXTENSION   PdoExtension,
    IN  PIRP                                    Irp,
    IN  BOOLEAN                                 MustHandle
    );

NTSTATUS VScsiDiskPdoForwardComplete(
    IN  PDEVICE_OBJECT  DeviceObject,
    IN  PIRP            Irp,
    IN  PVOID           Context
    );

NTSTATUS VScsiDiskPdoQueryCapabilities(
    IN  PVSCSIDISK_PDO_DEVICE_EXTENSION   PdoExtension,
    IN  PIRP                                    Irp
    );

NTSTATUS VScsiDiskPdoQueryId(
    IN  PVSCSIDISK_PDO_DEVICE_EXTENSION   PdoExtension,
    IN  PIRP                                    Irp
    );

NTSTATUS VScsiDiskPdoQueryDeviceRelations(
    IN  PVSCSIDISK_PDO_DEVICE_EXTENSION   PdoExtension,
    IN  PIRP                                    Irp
    );

NTSTATUS VScsiDiskPdoQueryDeviceText(
    IN  PVSCSIDISK_PDO_DEVICE_EXTENSION   PdoExtension,
    IN  PIRP                                    Irp
    );

NTSTATUS VScsiDiskPdoQueryResources(
    IN  PVSCSIDISK_PDO_DEVICE_EXTENSION   PdoExtension,
    IN  PIRP                                    Irp
    );

NTSTATUS VScsiDiskPdoQueryResourceRequirements(
    IN  PVSCSIDISK_PDO_DEVICE_EXTENSION   PdoExtension,
    IN  PIRP                                    Irp
    );

NTSTATUS VScsiDiskPdoQueryBusInformation(
    IN  PVSCSIDISK_PDO_DEVICE_EXTENSION   PdoExtension,
    IN  PIRP                                    Irp
    );

NTSTATUS VScsiDiskPdoDeviceUsageNotification(
    IN  PVSCSIDISK_PDO_DEVICE_EXTENSION   PdoExtension,
    IN  PIRP                                    Irp
    );

NTSTATUS VScsiDiskPdoEject(
    IN  PVSCSIDISK_PDO_DEVICE_EXTENSION   PdoExtension,
    IN  PIRP                                    Irp
    );

NTSTATUS VScsiDiskPdoReadConfig(
    IN  PVSCSIDISK_PDO_DEVICE_EXTENSION   PdoExtension,
    IN  PIRP                                    Irp
    );

NTSTATUS VScsiDiskPdoWriteConfig(
    IN  PVSCSIDISK_PDO_DEVICE_EXTENSION   PdoExtension,
    IN  PIRP                                    Irp
    );

NTSTATUS VScsiDiskPdoSetLock(
    IN  PVSCSIDISK_PDO_DEVICE_EXTENSION   PdoExtension,
    IN  PIRP                                    Irp
    );

NTSTATUS VScsiDiskPdoFilterResourceRequirements(
    IN  PVSCSIDISK_PDO_DEVICE_EXTENSION   PdoExtension,
    IN  PIRP                                    Irp
    );

NTSTATUS VScsiDiskPdoPnpDeviceState(
    IN  PVSCSIDISK_PDO_DEVICE_EXTENSION   PdoExtension,
    IN  PIRP                                    Irp
    );

NTSTATUS VScsiDiskPdoPowerDispatch(
    IN PDEVICE_OBJECT   DeviceObject,
    IN PIRP             Irp
    );

NTSTATUS VScsiDiskPdoPowerParent(
    IN  PVSCSIDISK_DEVICE_EXTENSION   DeviceExtension,
    IN  PIRP                                Irp
    );

VOID VScsiDiskPdoPowerParentComplete(
    IN  PDEVICE_OBJECT      DeviceObject,
    IN  UCHAR               MinorFunction,
    IN  POWER_STATE         PowerState,
    IN  PVOID               Context,
    IN  PIO_STATUS_BLOCK    IoStatus
    );

NTSTATUS VScsiDiskCreatePdo(
    IN  PVSCSIDISK_DEVICE_EXTENSION   DeviceExtension,
    IN  ULONG                   DeviceId
    );

NTSTATUS VScsiDiskRemovePdo(
    IN  PVSCSIDISK_DEVICE_EXTENSION   DeviceExtension,
    IN  ULONG                   DeviceId
    );


NTSTATUS __stdcall VScsiDiskScsiDeviceIoControlDispatch(
    IN  PDEVICE_OBJECT  DeviceObject,
    IN  PIRP            Irp
    );

NTSTATUS __stdcall VScsiDiskScsiInternalDeviceIoControlDispatch(
    IN  PDEVICE_OBJECT  DeviceObject,
    IN  PIRP            Irp
    );

#ifndef REVERSE_BYTES_QUAD
#define REVERSE_BYTES_QUAD(Destination, Source) {           \
    PEIGHT_BYTE d = (PEIGHT_BYTE)(Destination);             \
    PEIGHT_BYTE s = (PEIGHT_BYTE)(Source);                  \
    d->Byte7 = s->Byte0;                                    \
    d->Byte6 = s->Byte1;                                    \
    d->Byte5 = s->Byte2;                                    \
    d->Byte4 = s->Byte3;                                    \
    d->Byte3 = s->Byte4;                                    \
    d->Byte2 = s->Byte5;                                    \
    d->Byte1 = s->Byte6;                                    \
    d->Byte0 = s->Byte7;                                    \
}
#endif

#ifndef REVERSE_BYTES
#define REVERSE_BYTES(Destination, Source) {                \
    PFOUR_BYTE d = (PFOUR_BYTE)(Destination);               \
    PFOUR_BYTE s = (PFOUR_BYTE)(Source);                    \
    d->Byte3 = s->Byte0;                                    \
    d->Byte2 = s->Byte1;                                    \
    d->Byte1 = s->Byte2;                                    \
    d->Byte0 = s->Byte3;                                    \
}
#endif

#ifndef REVERSE_BYTES_SHORT
#define REVERSE_BYTES_SHORT(Destination, Source) {          \
    PTWO_BYTE d = (PTWO_BYTE)(Destination);                 \
    PTWO_BYTE s = (PTWO_BYTE)(Source);                      \
    d->Byte1 = s->Byte0;                                    \
    d->Byte0 = s->Byte1;                                    \
}
#endif

#endif  // __VSCSIDISK_H__

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -