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

📄 test98.h

📁 usb开发的资料!!USB标准
💻 H
字号:
// =================================================================

//

//    test98.h

//    This module contains the common private declarations 

//    for the USB Test Device 

//

//    kernel mode only

//

//

// =================================================================



#undef FAR

#define FAR

#undef PHYSICAL_ADDRESS

#define PHYSICAL_ADDRESS LARGE_INTEGER



typedef struct _TEST98_REMOVE_HARDWARE

{

    IN ULONG   Size; // sizeof (struct _REMOVE_HARDWARE)

    IN PVOID   HardwareHandle;

} TEST98_REMOVE_HARDWARE, *PTEST98_REMOVE_HARDWARE;





DEFINE_GUID(GUID_TEST_DEVICE,0xca56030,0x684a,0x11d0,0xd6,

0xf6,0x00,0xc0,0x4f,0xb1,0x72,0x8b);





#define TEST98_POOL_TAG (ULONG) 'emaG'

#undef ExAllocatePool

#define ExAllocatePool(type, size) \

            ExAllocatePoolWithTag (type, size, TEST98_POOL_TAG)





#pragma warning(error:4100)   // Unreferenced formal parameter

#pragma warning(error:4705)   // Statement has no effect





// ===============================================================

// Debugging Output Levels



#define TEST_DBG_PNP_MASK               0x000000F0

#define TEST_DBG_PNP_NOISE              0x00000010

#define TEST_DBG_PNP_TRACE              0x00000020

#define TEST_DBG_PNP_INFO               0x00000040

#define TEST_DBG_PNP_ERROR              0x00000080



#define TEST_DEFAULT_DEBUG_OUTPUT_LEVEL 0xCCCCCC88



#if DBG

#define Test98_KdPrint(_d_,_l_, _x_) \

            if ((_d_)->DebugLevel & (_l_)) { \

               DbgPrint ("Testdrv.SYS: "); \

               DbgPrint _x_; \

            }



#define Test98_KdPrint_Cont(_d_,_l_, _x_) \

            if ((_d_)->DebugLevel & (_l_)) { \

               DbgPrint _x_; \

            }



#define Test98_KdPrint_Def(_l_, _x_) \

            if (TEST_DEFAULT_DEBUG_OUTPUT_LEVEL & (_l_)) { \

               DbgPrint ("Testdrv.SYS: "); \

               DbgPrint _x_; \

            }



#define TRAP() DbgBreakPoint()

#define DbgRaiseIrql(_x_,_y_) KeRaiseIrql(_x_,_y_)

#define DbgLowerIrql(_x_) KeLowerIrql(_x_)

#else



#define Test98_KdPrint(_d_, _l_, _x_)

#define Test98_KdPrint_Cont(_d_, _l_, _x_)

#define Test98_KdPrint_Def(_l_, _x_)

#define TRAP()

#define DbgRaiseIrql(_x_,_y_)

#define DbgLowerIrql(_x_)



#endif



#define MIN(_A_,_B_) (((_A_) < (_B_)) ? (_A_) : (_B_))



// ===================================================================

// A common header for the device extensions 



typedef struct _COMMON_DEVICE_DATA

{

    PDEVICE_OBJECT  Self;

        // A backpointer to the device object for which this is the extension



    CHAR            Reserved[3];

    BOOLEAN         IsFDO;

    ULONG           DebugLevel;



    SYSTEM_POWER_STATE  SystemState;

    DEVICE_POWER_STATE  DeviceState;

} COMMON_DEVICE_DATA, *PCOMMON_DEVICE_DATA;





typedef struct _PDO_DEVICE_DATA

{

    COMMON_DEVICE_DATA;



    PWCHAR      HardwareIDs;

        // An array of (zero terminated wide character strings).

        // The array itself also null terminated



    UCHAR       Reserved2;

    BOOLEAN     Started;

    BOOLEAN     Attached;

    BOOLEAN     Removed;

    

    LIST_ENTRY  Link;

    

} PDO_DEVICE_DATA, *PPDO_DEVICE_DATA;





typedef struct _FDO_DEVICE_DATA

{

    COMMON_DEVICE_DATA;



    KSPIN_LOCK      Spin;

                // A syncronization for access to the device extension.



    BOOLEAN         MappedPorts;

    BOOLEAN         PowerQueryLock;

                // Are we currently in a query power state?

    BOOLEAN         Started;

                // Are we started ?

    BOOLEAN         Removed;

                // Has this device been removed?  

                

    LIST_ENTRY      PDOs;

    ULONG           NumPDOs;

    

    PDEVICE_OBJECT  UnderlyingPDO;

    PDEVICE_OBJECT  TopOfStack;

    

    KEVENT          CallEvent;

        // An event on which to wait for IRPs sent to the lower device objects

        // to complete.



    ULONG           OutstandingIO;

        // the number of IRPs sent from the bus to the underlying device object



    KEVENT          RemoveEvent;

        // On remove device plugplay request we must wait until all outstanding

        // requests have been completed before we can delete the device

        // object.



    UNICODE_STRING DevClassAssocName;

        // The name returned from IoRegisterDeviceClass Association,

        

    PHYSICAL_ADDRESS    PhysicalAddress;

    PVOID               TestPortAddress;



    } FDO_DEVICE_DATA, *PFDO_DEVICE_DATA;





// =================================================================



NTSTATUS

Test98_CreateClose (

    IN PDEVICE_OBJECT DeviceObject,

    IN PIRP Irp

    );



VOID

Test98_DriverUnload (

    IN PDRIVER_OBJECT DriverObject

    );



NTSTATUS

Test98_PnP (

    IN PDEVICE_OBJECT DeviceObject,

    IN PIRP Irp

    );



NTSTATUS

Test98_Power (

    IN PDEVICE_OBJECT DeviceObject,

    IN PIRP Irp

    );



NTSTATUS

Test98_AddDevice(

    IN PDRIVER_OBJECT DriverObject,

    IN PDEVICE_OBJECT BusDeviceObject

    );



NTSTATUS

Test98_Remove (

    PTEST98_REMOVE_HARDWARE   Remove,

    PFDO_DEVICE_DATA            DeviceData

    );



NTSTATUS

Test98_PnPRemove (

    PDEVICE_OBJECT      Device,

    PPDO_DEVICE_DATA    PdoData

    );



NTSTATUS

Test98_FDO_PnP (

    IN PDEVICE_OBJECT       DeviceObject,

    IN PIRP                 Irp,

    IN PIO_STACK_LOCATION   IrpStack,

    IN PFDO_DEVICE_DATA     DeviceData

    );





NTSTATUS

Test98_StartFdo (

    IN  PFDO_DEVICE_DATA            FdoData,

    IN  PCM_PARTIAL_RESOURCE_LIST   partialResourceList,

    IN  PCM_PARTIAL_RESOURCE_LIST   partialResourceListTranslated

    );



NTSTATUS

Test98_IncIoCount (

    PFDO_DEVICE_DATA   Data

    );



VOID

Test98_DecIoCount (

    PFDO_DEVICE_DATA   Data

    );



NTSTATUS

Test98_FDO_Power (

    PFDO_DEVICE_DATA    FdoData,

    PIRP                Irp

    );





⌨️ 快捷键说明

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