4 #define GENDRV_MAX_EXT_DRVR 2
5 #define GENDRV_DRVR_FLAG_IF_DRVR 0x01
7 #define GENDRV_MSG_ADDDEVICE 0x01
8 #define GENDRV_MSG_STOPDEVICE 0x02
9 #define GENDRV_MSG_DISCDEVICE 0x03
11 typedef struct _GENDRV_EXT_DRVR_ENTRY
13 LIST_ENTRY drvr_link
; // used for dynamic load/unload driver
14 ULONG drvr_key
; // used to find the driver loaded, the key
15 // is ( vendor_id << 16 )|( product_id ) or
16 // ( class_id << 16 ) | ( sub_class_id << 8 ) | ( protocol_id ))
17 PDRIVER_OBJECT pext_drvr
; // the external driver count
18 ULONG ref_count
; // number of devices attached
19 LIST_HEAD dev_list
; // link the devices by deviceExtension->dev_obj_link
21 } GENDRV_EXT_DRVR_ENTRY
, *PGENDRV_EXT_DRVR_ENTRY
;
23 typedef struct _GENDRV_DRVR_EXTENSION
25 FAST_MUTEX drvr_ext_mutex
;
26 ULONG ext_drvr_count
; // loaded driver count
27 LIST_HEAD ext_drvr_list
;
28 GENDRV_EXT_DRVR_ENTRY ext_drvr_array
[ GENDRV_MAX_EXT_DRVR
];
30 }GENDRV_DRVR_EXTENSION
, *PGENDRV_DRVR_EXTENSION
;
32 typedef struct _GENDRV_IF_CTX
34 UCHAR if_idx
; // valid for if device
35 PUSB_INTERFACE_DESC pif_desc
;
37 } GENDRV_IF_CTX
, *PGENDRV_IF_IDX
;
39 typedef struct _GENDRV_DEVICE_EXTENSION
41 //this structure is the device extension for dev_obj
42 //created for the device.
43 DEVEXT_HEADER dev_ext_hdr
;
45 LIST_ENTRY dev_obj_link
; // this link is used by the driver object to track the existing dev_objs
46 PGENDRV_EXT_DRVR_ENTRY ext_drvr_entry
;
48 PDEVICE_OBJECT pdo
; // Our device object
49 DEV_HANDLE dev_handle
; // handle to the usb_dev under
51 UCHAR dev_id
; // used to build symbolic link
58 PUSB_DEV_MANAGER dev_mgr
;
60 } GENDRV_DEVICE_EXTENSION
, *PGENDRV_DEVICE_EXTENSION
;