1*8a978a17SVictor Perevertkin #ifndef _WDF_V1_13_TYPES_H_ 2*8a978a17SVictor Perevertkin #define _WDF_V1_13_TYPES_H_ 3*8a978a17SVictor Perevertkin 4*8a978a17SVictor Perevertkin 5*8a978a17SVictor Perevertkin typedef enum _WDFFUNCENUM_V1_13 { 6*8a978a17SVictor Perevertkin WdfFunctionTableNumEntries_V1_13 = 438, 7*8a978a17SVictor Perevertkin } WDFFUNCENUM_V1_13; 8*8a978a17SVictor Perevertkin 9*8a978a17SVictor Perevertkin typedef struct _WDF_POWER_ROUTINE_TIMED_OUT_DATA_V1_13 *PWDF_POWER_ROUTINE_TIMED_OUT_DATA_V1_13; 10*8a978a17SVictor Perevertkin typedef const struct _WDF_POWER_ROUTINE_TIMED_OUT_DATA_V1_13 *PCWDF_POWER_ROUTINE_TIMED_OUT_DATA_V1_13; 11*8a978a17SVictor Perevertkin typedef struct _WDF_REQUEST_FATAL_ERROR_INFORMATION_LENGTH_MISMATCH_DATA_V1_13 *PWDF_REQUEST_FATAL_ERROR_INFORMATION_LENGTH_MISMATCH_DATA_V1_13; 12*8a978a17SVictor Perevertkin typedef const struct _WDF_REQUEST_FATAL_ERROR_INFORMATION_LENGTH_MISMATCH_DATA_V1_13 *PCWDF_REQUEST_FATAL_ERROR_INFORMATION_LENGTH_MISMATCH_DATA_V1_13; 13*8a978a17SVictor Perevertkin typedef struct _WDF_QUEUE_FATAL_ERROR_DATA_V1_13 *PWDF_QUEUE_FATAL_ERROR_DATA_V1_13; 14*8a978a17SVictor Perevertkin typedef const struct _WDF_QUEUE_FATAL_ERROR_DATA_V1_13 *PCWDF_QUEUE_FATAL_ERROR_DATA_V1_13; 15*8a978a17SVictor Perevertkin typedef struct _WDF_CHILD_IDENTIFICATION_DESCRIPTION_HEADER_V1_13 *PWDF_CHILD_IDENTIFICATION_DESCRIPTION_HEADER_V1_13; 16*8a978a17SVictor Perevertkin typedef const struct _WDF_CHILD_IDENTIFICATION_DESCRIPTION_HEADER_V1_13 *PCWDF_CHILD_IDENTIFICATION_DESCRIPTION_HEADER_V1_13; 17*8a978a17SVictor Perevertkin typedef struct _WDF_CHILD_ADDRESS_DESCRIPTION_HEADER_V1_13 *PWDF_CHILD_ADDRESS_DESCRIPTION_HEADER_V1_13; 18*8a978a17SVictor Perevertkin typedef const struct _WDF_CHILD_ADDRESS_DESCRIPTION_HEADER_V1_13 *PCWDF_CHILD_ADDRESS_DESCRIPTION_HEADER_V1_13; 19*8a978a17SVictor Perevertkin typedef struct _WDF_CHILD_RETRIEVE_INFO_V1_13 *PWDF_CHILD_RETRIEVE_INFO_V1_13; 20*8a978a17SVictor Perevertkin typedef const struct _WDF_CHILD_RETRIEVE_INFO_V1_13 *PCWDF_CHILD_RETRIEVE_INFO_V1_13; 21*8a978a17SVictor Perevertkin typedef struct _WDF_CHILD_LIST_CONFIG_V1_13 *PWDF_CHILD_LIST_CONFIG_V1_13; 22*8a978a17SVictor Perevertkin typedef const struct _WDF_CHILD_LIST_CONFIG_V1_13 *PCWDF_CHILD_LIST_CONFIG_V1_13; 23*8a978a17SVictor Perevertkin typedef struct _WDF_CHILD_LIST_ITERATOR_V1_13 *PWDF_CHILD_LIST_ITERATOR_V1_13; 24*8a978a17SVictor Perevertkin typedef const struct _WDF_CHILD_LIST_ITERATOR_V1_13 *PCWDF_CHILD_LIST_ITERATOR_V1_13; 25*8a978a17SVictor Perevertkin typedef struct _WDF_COMMON_BUFFER_CONFIG_V1_13 *PWDF_COMMON_BUFFER_CONFIG_V1_13; 26*8a978a17SVictor Perevertkin typedef const struct _WDF_COMMON_BUFFER_CONFIG_V1_13 *PCWDF_COMMON_BUFFER_CONFIG_V1_13; 27*8a978a17SVictor Perevertkin typedef struct _WDFCX_FILEOBJECT_CONFIG_V1_13 *PWDFCX_FILEOBJECT_CONFIG_V1_13; 28*8a978a17SVictor Perevertkin typedef const struct _WDFCX_FILEOBJECT_CONFIG_V1_13 *PCWDFCX_FILEOBJECT_CONFIG_V1_13; 29*8a978a17SVictor Perevertkin typedef struct _WDF_CLASS_EXTENSION_DESCRIPTOR_V1_13 *PWDF_CLASS_EXTENSION_DESCRIPTOR_V1_13; 30*8a978a17SVictor Perevertkin typedef const struct _WDF_CLASS_EXTENSION_DESCRIPTOR_V1_13 *PCWDF_CLASS_EXTENSION_DESCRIPTOR_V1_13; 31*8a978a17SVictor Perevertkin typedef struct _WDF_CLASS_VERSION_V1_13 *PWDF_CLASS_VERSION_V1_13; 32*8a978a17SVictor Perevertkin typedef const struct _WDF_CLASS_VERSION_V1_13 *PCWDF_CLASS_VERSION_V1_13; 33*8a978a17SVictor Perevertkin typedef struct _WDF_CLASS_BIND_INFO_V1_13 *PWDF_CLASS_BIND_INFO_V1_13; 34*8a978a17SVictor Perevertkin typedef const struct _WDF_CLASS_BIND_INFO_V1_13 *PCWDF_CLASS_BIND_INFO_V1_13; 35*8a978a17SVictor Perevertkin typedef struct _WDF_CLASS_LIBRARY_INFO_V1_13 *PWDF_CLASS_LIBRARY_INFO_V1_13; 36*8a978a17SVictor Perevertkin typedef const struct _WDF_CLASS_LIBRARY_INFO_V1_13 *PCWDF_CLASS_LIBRARY_INFO_V1_13; 37*8a978a17SVictor Perevertkin typedef struct _WDF_FILEOBJECT_CONFIG_V1_13 *PWDF_FILEOBJECT_CONFIG_V1_13; 38*8a978a17SVictor Perevertkin typedef const struct _WDF_FILEOBJECT_CONFIG_V1_13 *PCWDF_FILEOBJECT_CONFIG_V1_13; 39*8a978a17SVictor Perevertkin typedef struct _WDF_DEVICE_PNP_NOTIFICATION_DATA_V1_13 *PWDF_DEVICE_PNP_NOTIFICATION_DATA_V1_13; 40*8a978a17SVictor Perevertkin typedef const struct _WDF_DEVICE_PNP_NOTIFICATION_DATA_V1_13 *PCWDF_DEVICE_PNP_NOTIFICATION_DATA_V1_13; 41*8a978a17SVictor Perevertkin typedef struct _WDF_DEVICE_POWER_NOTIFICATION_DATA_V1_13 *PWDF_DEVICE_POWER_NOTIFICATION_DATA_V1_13; 42*8a978a17SVictor Perevertkin typedef const struct _WDF_DEVICE_POWER_NOTIFICATION_DATA_V1_13 *PCWDF_DEVICE_POWER_NOTIFICATION_DATA_V1_13; 43*8a978a17SVictor Perevertkin typedef struct _WDF_DEVICE_POWER_POLICY_NOTIFICATION_DATA_V1_13 *PWDF_DEVICE_POWER_POLICY_NOTIFICATION_DATA_V1_13; 44*8a978a17SVictor Perevertkin typedef const struct _WDF_DEVICE_POWER_POLICY_NOTIFICATION_DATA_V1_13 *PCWDF_DEVICE_POWER_POLICY_NOTIFICATION_DATA_V1_13; 45*8a978a17SVictor Perevertkin typedef struct _WDF_PNPPOWER_EVENT_CALLBACKS_V1_13 *PWDF_PNPPOWER_EVENT_CALLBACKS_V1_13; 46*8a978a17SVictor Perevertkin typedef const struct _WDF_PNPPOWER_EVENT_CALLBACKS_V1_13 *PCWDF_PNPPOWER_EVENT_CALLBACKS_V1_13; 47*8a978a17SVictor Perevertkin typedef struct _WDF_POWER_POLICY_EVENT_CALLBACKS_V1_13 *PWDF_POWER_POLICY_EVENT_CALLBACKS_V1_13; 48*8a978a17SVictor Perevertkin typedef const struct _WDF_POWER_POLICY_EVENT_CALLBACKS_V1_13 *PCWDF_POWER_POLICY_EVENT_CALLBACKS_V1_13; 49*8a978a17SVictor Perevertkin typedef struct _WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS_V1_13 *PWDF_DEVICE_POWER_POLICY_IDLE_SETTINGS_V1_13; 50*8a978a17SVictor Perevertkin typedef const struct _WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS_V1_13 *PCWDF_DEVICE_POWER_POLICY_IDLE_SETTINGS_V1_13; 51*8a978a17SVictor Perevertkin typedef struct _WDF_DEVICE_POWER_POLICY_WAKE_SETTINGS_V1_13 *PWDF_DEVICE_POWER_POLICY_WAKE_SETTINGS_V1_13; 52*8a978a17SVictor Perevertkin typedef const struct _WDF_DEVICE_POWER_POLICY_WAKE_SETTINGS_V1_13 *PCWDF_DEVICE_POWER_POLICY_WAKE_SETTINGS_V1_13; 53*8a978a17SVictor Perevertkin typedef struct _WDF_DEVICE_STATE_V1_13 *PWDF_DEVICE_STATE_V1_13; 54*8a978a17SVictor Perevertkin typedef const struct _WDF_DEVICE_STATE_V1_13 *PCWDF_DEVICE_STATE_V1_13; 55*8a978a17SVictor Perevertkin typedef struct _WDF_DEVICE_PNP_CAPABILITIES_V1_13 *PWDF_DEVICE_PNP_CAPABILITIES_V1_13; 56*8a978a17SVictor Perevertkin typedef const struct _WDF_DEVICE_PNP_CAPABILITIES_V1_13 *PCWDF_DEVICE_PNP_CAPABILITIES_V1_13; 57*8a978a17SVictor Perevertkin typedef struct _WDF_DEVICE_POWER_CAPABILITIES_V1_13 *PWDF_DEVICE_POWER_CAPABILITIES_V1_13; 58*8a978a17SVictor Perevertkin typedef const struct _WDF_DEVICE_POWER_CAPABILITIES_V1_13 *PCWDF_DEVICE_POWER_CAPABILITIES_V1_13; 59*8a978a17SVictor Perevertkin typedef struct _WDF_REMOVE_LOCK_OPTIONS_V1_13 *PWDF_REMOVE_LOCK_OPTIONS_V1_13; 60*8a978a17SVictor Perevertkin typedef const struct _WDF_REMOVE_LOCK_OPTIONS_V1_13 *PCWDF_REMOVE_LOCK_OPTIONS_V1_13; 61*8a978a17SVictor Perevertkin typedef struct _WDF_POWER_FRAMEWORK_SETTINGS_V1_13 *PWDF_POWER_FRAMEWORK_SETTINGS_V1_13; 62*8a978a17SVictor Perevertkin typedef const struct _WDF_POWER_FRAMEWORK_SETTINGS_V1_13 *PCWDF_POWER_FRAMEWORK_SETTINGS_V1_13; 63*8a978a17SVictor Perevertkin typedef struct _WDF_IO_TYPE_CONFIG_V1_13 *PWDF_IO_TYPE_CONFIG_V1_13; 64*8a978a17SVictor Perevertkin typedef const struct _WDF_IO_TYPE_CONFIG_V1_13 *PCWDF_IO_TYPE_CONFIG_V1_13; 65*8a978a17SVictor Perevertkin typedef struct _WDF_DEVICE_INTERFACE_PROPERTY_DATA_V1_13 *PWDF_DEVICE_INTERFACE_PROPERTY_DATA_V1_13; 66*8a978a17SVictor Perevertkin typedef const struct _WDF_DEVICE_INTERFACE_PROPERTY_DATA_V1_13 *PCWDF_DEVICE_INTERFACE_PROPERTY_DATA_V1_13; 67*8a978a17SVictor Perevertkin typedef struct _WDF_DEVICE_PROPERTY_DATA_V1_13 *PWDF_DEVICE_PROPERTY_DATA_V1_13; 68*8a978a17SVictor Perevertkin typedef const struct _WDF_DEVICE_PROPERTY_DATA_V1_13 *PCWDF_DEVICE_PROPERTY_DATA_V1_13; 69*8a978a17SVictor Perevertkin typedef struct _WDF_DMA_ENABLER_CONFIG_V1_13 *PWDF_DMA_ENABLER_CONFIG_V1_13; 70*8a978a17SVictor Perevertkin typedef const struct _WDF_DMA_ENABLER_CONFIG_V1_13 *PCWDF_DMA_ENABLER_CONFIG_V1_13; 71*8a978a17SVictor Perevertkin typedef struct _WDF_DMA_SYSTEM_PROFILE_CONFIG_V1_13 *PWDF_DMA_SYSTEM_PROFILE_CONFIG_V1_13; 72*8a978a17SVictor Perevertkin typedef const struct _WDF_DMA_SYSTEM_PROFILE_CONFIG_V1_13 *PCWDF_DMA_SYSTEM_PROFILE_CONFIG_V1_13; 73*8a978a17SVictor Perevertkin typedef struct _WDF_DPC_CONFIG_V1_13 *PWDF_DPC_CONFIG_V1_13; 74*8a978a17SVictor Perevertkin typedef const struct _WDF_DPC_CONFIG_V1_13 *PCWDF_DPC_CONFIG_V1_13; 75*8a978a17SVictor Perevertkin typedef struct _WDF_DRIVER_CONFIG_V1_13 *PWDF_DRIVER_CONFIG_V1_13; 76*8a978a17SVictor Perevertkin typedef const struct _WDF_DRIVER_CONFIG_V1_13 *PCWDF_DRIVER_CONFIG_V1_13; 77*8a978a17SVictor Perevertkin typedef struct _WDF_DRIVER_VERSION_AVAILABLE_PARAMS_V1_13 *PWDF_DRIVER_VERSION_AVAILABLE_PARAMS_V1_13; 78*8a978a17SVictor Perevertkin typedef const struct _WDF_DRIVER_VERSION_AVAILABLE_PARAMS_V1_13 *PCWDF_DRIVER_VERSION_AVAILABLE_PARAMS_V1_13; 79*8a978a17SVictor Perevertkin typedef struct _WDF_FDO_EVENT_CALLBACKS_V1_13 *PWDF_FDO_EVENT_CALLBACKS_V1_13; 80*8a978a17SVictor Perevertkin typedef const struct _WDF_FDO_EVENT_CALLBACKS_V1_13 *PCWDF_FDO_EVENT_CALLBACKS_V1_13; 81*8a978a17SVictor Perevertkin typedef struct _WDF_DRIVER_GLOBALS_V1_13 *PWDF_DRIVER_GLOBALS_V1_13; 82*8a978a17SVictor Perevertkin typedef const struct _WDF_DRIVER_GLOBALS_V1_13 *PCWDF_DRIVER_GLOBALS_V1_13; 83*8a978a17SVictor Perevertkin typedef struct _WDF_INTERRUPT_CONFIG_V1_13 *PWDF_INTERRUPT_CONFIG_V1_13; 84*8a978a17SVictor Perevertkin typedef const struct _WDF_INTERRUPT_CONFIG_V1_13 *PCWDF_INTERRUPT_CONFIG_V1_13; 85*8a978a17SVictor Perevertkin typedef struct _WDF_INTERRUPT_INFO_V1_13 *PWDF_INTERRUPT_INFO_V1_13; 86*8a978a17SVictor Perevertkin typedef const struct _WDF_INTERRUPT_INFO_V1_13 *PCWDF_INTERRUPT_INFO_V1_13; 87*8a978a17SVictor Perevertkin typedef struct _WDF_INTERRUPT_EXTENDED_POLICY_V1_13 *PWDF_INTERRUPT_EXTENDED_POLICY_V1_13; 88*8a978a17SVictor Perevertkin typedef const struct _WDF_INTERRUPT_EXTENDED_POLICY_V1_13 *PCWDF_INTERRUPT_EXTENDED_POLICY_V1_13; 89*8a978a17SVictor Perevertkin typedef struct _WDF_IO_QUEUE_CONFIG_V1_13 *PWDF_IO_QUEUE_CONFIG_V1_13; 90*8a978a17SVictor Perevertkin typedef const struct _WDF_IO_QUEUE_CONFIG_V1_13 *PCWDF_IO_QUEUE_CONFIG_V1_13; 91*8a978a17SVictor Perevertkin typedef struct _WDF_IO_QUEUE_FORWARD_PROGRESS_POLICY_V1_13 *PWDF_IO_QUEUE_FORWARD_PROGRESS_POLICY_V1_13; 92*8a978a17SVictor Perevertkin typedef const struct _WDF_IO_QUEUE_FORWARD_PROGRESS_POLICY_V1_13 *PCWDF_IO_QUEUE_FORWARD_PROGRESS_POLICY_V1_13; 93*8a978a17SVictor Perevertkin typedef struct _WDF_IO_TARGET_OPEN_PARAMS_V1_13 *PWDF_IO_TARGET_OPEN_PARAMS_V1_13; 94*8a978a17SVictor Perevertkin typedef const struct _WDF_IO_TARGET_OPEN_PARAMS_V1_13 *PCWDF_IO_TARGET_OPEN_PARAMS_V1_13; 95*8a978a17SVictor Perevertkin typedef struct _WDFMEMORY_OFFSET_V1_13 *PWDFMEMORY_OFFSET_V1_13; 96*8a978a17SVictor Perevertkin typedef const struct _WDFMEMORY_OFFSET_V1_13 *PCWDFMEMORY_OFFSET_V1_13; 97*8a978a17SVictor Perevertkin typedef struct _WDF_MEMORY_DESCRIPTOR_V1_13 *PWDF_MEMORY_DESCRIPTOR_V1_13; 98*8a978a17SVictor Perevertkin typedef const struct _WDF_MEMORY_DESCRIPTOR_V1_13 *PCWDF_MEMORY_DESCRIPTOR_V1_13; 99*8a978a17SVictor Perevertkin typedef struct _WDF_OBJECT_ATTRIBUTES_V1_13 *PWDF_OBJECT_ATTRIBUTES_V1_13; 100*8a978a17SVictor Perevertkin typedef const struct _WDF_OBJECT_ATTRIBUTES_V1_13 *PCWDF_OBJECT_ATTRIBUTES_V1_13; 101*8a978a17SVictor Perevertkin typedef struct _WDF_OBJECT_CONTEXT_TYPE_INFO_V1_13 *PWDF_OBJECT_CONTEXT_TYPE_INFO_V1_13; 102*8a978a17SVictor Perevertkin typedef const struct _WDF_OBJECT_CONTEXT_TYPE_INFO_V1_13 *PCWDF_OBJECT_CONTEXT_TYPE_INFO_V1_13; 103*8a978a17SVictor Perevertkin typedef struct _WDF_CUSTOM_TYPE_CONTEXT_V1_13 *PWDF_CUSTOM_TYPE_CONTEXT_V1_13; 104*8a978a17SVictor Perevertkin typedef const struct _WDF_CUSTOM_TYPE_CONTEXT_V1_13 *PCWDF_CUSTOM_TYPE_CONTEXT_V1_13; 105*8a978a17SVictor Perevertkin typedef struct _WDF_PDO_EVENT_CALLBACKS_V1_13 *PWDF_PDO_EVENT_CALLBACKS_V1_13; 106*8a978a17SVictor Perevertkin typedef const struct _WDF_PDO_EVENT_CALLBACKS_V1_13 *PCWDF_PDO_EVENT_CALLBACKS_V1_13; 107*8a978a17SVictor Perevertkin typedef struct _WDF_QUERY_INTERFACE_CONFIG_V1_13 *PWDF_QUERY_INTERFACE_CONFIG_V1_13; 108*8a978a17SVictor Perevertkin typedef const struct _WDF_QUERY_INTERFACE_CONFIG_V1_13 *PCWDF_QUERY_INTERFACE_CONFIG_V1_13; 109*8a978a17SVictor Perevertkin typedef struct _WDF_REQUEST_PARAMETERS_V1_13 *PWDF_REQUEST_PARAMETERS_V1_13; 110*8a978a17SVictor Perevertkin typedef const struct _WDF_REQUEST_PARAMETERS_V1_13 *PCWDF_REQUEST_PARAMETERS_V1_13; 111*8a978a17SVictor Perevertkin typedef struct _WDF_REQUEST_COMPLETION_PARAMS_V1_13 *PWDF_REQUEST_COMPLETION_PARAMS_V1_13; 112*8a978a17SVictor Perevertkin typedef const struct _WDF_REQUEST_COMPLETION_PARAMS_V1_13 *PCWDF_REQUEST_COMPLETION_PARAMS_V1_13; 113*8a978a17SVictor Perevertkin typedef struct _WDF_REQUEST_REUSE_PARAMS_V1_13 *PWDF_REQUEST_REUSE_PARAMS_V1_13; 114*8a978a17SVictor Perevertkin typedef const struct _WDF_REQUEST_REUSE_PARAMS_V1_13 *PCWDF_REQUEST_REUSE_PARAMS_V1_13; 115*8a978a17SVictor Perevertkin typedef struct _WDF_REQUEST_SEND_OPTIONS_V1_13 *PWDF_REQUEST_SEND_OPTIONS_V1_13; 116*8a978a17SVictor Perevertkin typedef const struct _WDF_REQUEST_SEND_OPTIONS_V1_13 *PCWDF_REQUEST_SEND_OPTIONS_V1_13; 117*8a978a17SVictor Perevertkin typedef struct _WDF_REQUEST_FORWARD_OPTIONS_V1_13 *PWDF_REQUEST_FORWARD_OPTIONS_V1_13; 118*8a978a17SVictor Perevertkin typedef const struct _WDF_REQUEST_FORWARD_OPTIONS_V1_13 *PCWDF_REQUEST_FORWARD_OPTIONS_V1_13; 119*8a978a17SVictor Perevertkin typedef struct _WDF_TIMER_CONFIG_V1_13 *PWDF_TIMER_CONFIG_V1_13; 120*8a978a17SVictor Perevertkin typedef const struct _WDF_TIMER_CONFIG_V1_13 *PCWDF_TIMER_CONFIG_V1_13; 121*8a978a17SVictor Perevertkin typedef struct _WDFOBJECT_TRIAGE_INFO_V1_13 *PWDFOBJECT_TRIAGE_INFO_V1_13; 122*8a978a17SVictor Perevertkin typedef const struct _WDFOBJECT_TRIAGE_INFO_V1_13 *PCWDFOBJECT_TRIAGE_INFO_V1_13; 123*8a978a17SVictor Perevertkin typedef struct _WDFCONTEXT_TRIAGE_INFO_V1_13 *PWDFCONTEXT_TRIAGE_INFO_V1_13; 124*8a978a17SVictor Perevertkin typedef const struct _WDFCONTEXT_TRIAGE_INFO_V1_13 *PCWDFCONTEXT_TRIAGE_INFO_V1_13; 125*8a978a17SVictor Perevertkin typedef struct _WDFCONTEXTTYPE_TRIAGE_INFO_V1_13 *PWDFCONTEXTTYPE_TRIAGE_INFO_V1_13; 126*8a978a17SVictor Perevertkin typedef const struct _WDFCONTEXTTYPE_TRIAGE_INFO_V1_13 *PCWDFCONTEXTTYPE_TRIAGE_INFO_V1_13; 127*8a978a17SVictor Perevertkin typedef struct _WDFQUEUE_TRIAGE_INFO_V1_13 *PWDFQUEUE_TRIAGE_INFO_V1_13; 128*8a978a17SVictor Perevertkin typedef const struct _WDFQUEUE_TRIAGE_INFO_V1_13 *PCWDFQUEUE_TRIAGE_INFO_V1_13; 129*8a978a17SVictor Perevertkin typedef struct _WDFFWDPROGRESS_TRIAGE_INFO_V1_13 *PWDFFWDPROGRESS_TRIAGE_INFO_V1_13; 130*8a978a17SVictor Perevertkin typedef const struct _WDFFWDPROGRESS_TRIAGE_INFO_V1_13 *PCWDFFWDPROGRESS_TRIAGE_INFO_V1_13; 131*8a978a17SVictor Perevertkin typedef struct _WDFIRPQUEUE_TRIAGE_INFO_V1_13 *PWDFIRPQUEUE_TRIAGE_INFO_V1_13; 132*8a978a17SVictor Perevertkin typedef const struct _WDFIRPQUEUE_TRIAGE_INFO_V1_13 *PCWDFIRPQUEUE_TRIAGE_INFO_V1_13; 133*8a978a17SVictor Perevertkin typedef struct _WDFREQUEST_TRIAGE_INFO_V1_13 *PWDFREQUEST_TRIAGE_INFO_V1_13; 134*8a978a17SVictor Perevertkin typedef const struct _WDFREQUEST_TRIAGE_INFO_V1_13 *PCWDFREQUEST_TRIAGE_INFO_V1_13; 135*8a978a17SVictor Perevertkin typedef struct _WDFDEVICE_TRIAGE_INFO_V1_13 *PWDFDEVICE_TRIAGE_INFO_V1_13; 136*8a978a17SVictor Perevertkin typedef const struct _WDFDEVICE_TRIAGE_INFO_V1_13 *PCWDFDEVICE_TRIAGE_INFO_V1_13; 137*8a978a17SVictor Perevertkin typedef struct _WDFIRP_TRIAGE_INFO_V1_13 *PWDFIRP_TRIAGE_INFO_V1_13; 138*8a978a17SVictor Perevertkin typedef const struct _WDFIRP_TRIAGE_INFO_V1_13 *PCWDFIRP_TRIAGE_INFO_V1_13; 139*8a978a17SVictor Perevertkin typedef struct _WDF_TRIAGE_INFO_V1_13 *PWDF_TRIAGE_INFO_V1_13; 140*8a978a17SVictor Perevertkin typedef const struct _WDF_TRIAGE_INFO_V1_13 *PCWDF_TRIAGE_INFO_V1_13; 141*8a978a17SVictor Perevertkin typedef struct _WDF_USB_REQUEST_COMPLETION_PARAMS_V1_13 *PWDF_USB_REQUEST_COMPLETION_PARAMS_V1_13; 142*8a978a17SVictor Perevertkin typedef const struct _WDF_USB_REQUEST_COMPLETION_PARAMS_V1_13 *PCWDF_USB_REQUEST_COMPLETION_PARAMS_V1_13; 143*8a978a17SVictor Perevertkin typedef struct _WDF_USB_CONTINUOUS_READER_CONFIG_V1_13 *PWDF_USB_CONTINUOUS_READER_CONFIG_V1_13; 144*8a978a17SVictor Perevertkin typedef const struct _WDF_USB_CONTINUOUS_READER_CONFIG_V1_13 *PCWDF_USB_CONTINUOUS_READER_CONFIG_V1_13; 145*8a978a17SVictor Perevertkin typedef struct _WDF_USB_DEVICE_INFORMATION_V1_13 *PWDF_USB_DEVICE_INFORMATION_V1_13; 146*8a978a17SVictor Perevertkin typedef const struct _WDF_USB_DEVICE_INFORMATION_V1_13 *PCWDF_USB_DEVICE_INFORMATION_V1_13; 147*8a978a17SVictor Perevertkin typedef struct _WDF_USB_INTERFACE_SETTING_PAIR_V1_13 *PWDF_USB_INTERFACE_SETTING_PAIR_V1_13; 148*8a978a17SVictor Perevertkin typedef const struct _WDF_USB_INTERFACE_SETTING_PAIR_V1_13 *PCWDF_USB_INTERFACE_SETTING_PAIR_V1_13; 149*8a978a17SVictor Perevertkin typedef struct _WDF_USB_DEVICE_SELECT_CONFIG_PARAMS_V1_13 *PWDF_USB_DEVICE_SELECT_CONFIG_PARAMS_V1_13; 150*8a978a17SVictor Perevertkin typedef const struct _WDF_USB_DEVICE_SELECT_CONFIG_PARAMS_V1_13 *PCWDF_USB_DEVICE_SELECT_CONFIG_PARAMS_V1_13; 151*8a978a17SVictor Perevertkin typedef struct _WDF_USB_INTERFACE_SELECT_SETTING_PARAMS_V1_13 *PWDF_USB_INTERFACE_SELECT_SETTING_PARAMS_V1_13; 152*8a978a17SVictor Perevertkin typedef const struct _WDF_USB_INTERFACE_SELECT_SETTING_PARAMS_V1_13 *PCWDF_USB_INTERFACE_SELECT_SETTING_PARAMS_V1_13; 153*8a978a17SVictor Perevertkin typedef struct _WDF_USB_PIPE_INFORMATION_V1_13 *PWDF_USB_PIPE_INFORMATION_V1_13; 154*8a978a17SVictor Perevertkin typedef const struct _WDF_USB_PIPE_INFORMATION_V1_13 *PCWDF_USB_PIPE_INFORMATION_V1_13; 155*8a978a17SVictor Perevertkin typedef struct _WDF_USB_DEVICE_CREATE_CONFIG_V1_13 *PWDF_USB_DEVICE_CREATE_CONFIG_V1_13; 156*8a978a17SVictor Perevertkin typedef const struct _WDF_USB_DEVICE_CREATE_CONFIG_V1_13 *PCWDF_USB_DEVICE_CREATE_CONFIG_V1_13; 157*8a978a17SVictor Perevertkin typedef struct _WDF_WMI_PROVIDER_CONFIG_V1_13 *PWDF_WMI_PROVIDER_CONFIG_V1_13; 158*8a978a17SVictor Perevertkin typedef const struct _WDF_WMI_PROVIDER_CONFIG_V1_13 *PCWDF_WMI_PROVIDER_CONFIG_V1_13; 159*8a978a17SVictor Perevertkin typedef struct _WDF_WMI_INSTANCE_CONFIG_V1_13 *PWDF_WMI_INSTANCE_CONFIG_V1_13; 160*8a978a17SVictor Perevertkin typedef const struct _WDF_WMI_INSTANCE_CONFIG_V1_13 *PCWDF_WMI_INSTANCE_CONFIG_V1_13; 161*8a978a17SVictor Perevertkin typedef struct _WDF_WORKITEM_CONFIG_V1_13 *PWDF_WORKITEM_CONFIG_V1_13; 162*8a978a17SVictor Perevertkin typedef const struct _WDF_WORKITEM_CONFIG_V1_13 *PCWDF_WORKITEM_CONFIG_V1_13; 163*8a978a17SVictor Perevertkin 164*8a978a17SVictor Perevertkin // 165*8a978a17SVictor Perevertkin // Versioning of structures for wdf.h 166*8a978a17SVictor Perevertkin // 167*8a978a17SVictor Perevertkin // End of versioning of structures for wdf.h 168*8a978a17SVictor Perevertkin 169*8a978a17SVictor Perevertkin // 170*8a978a17SVictor Perevertkin // Versioning of structures for wdfassert.h 171*8a978a17SVictor Perevertkin // 172*8a978a17SVictor Perevertkin // End of versioning of structures for wdfassert.h 173*8a978a17SVictor Perevertkin 174*8a978a17SVictor Perevertkin // 175*8a978a17SVictor Perevertkin // Versioning of structures for wdfbugcodes.h 176*8a978a17SVictor Perevertkin // 177*8a978a17SVictor Perevertkin typedef struct _WDF_POWER_ROUTINE_TIMED_OUT_DATA_V1_13 { 178*8a978a17SVictor Perevertkin // 179*8a978a17SVictor Perevertkin // Current power state associated with the timed out device 180*8a978a17SVictor Perevertkin // 181*8a978a17SVictor Perevertkin WDF_DEVICE_POWER_STATE PowerState; 182*8a978a17SVictor Perevertkin 183*8a978a17SVictor Perevertkin // 184*8a978a17SVictor Perevertkin // Current power policy state associated with the timed out device 185*8a978a17SVictor Perevertkin // 186*8a978a17SVictor Perevertkin WDF_DEVICE_POWER_POLICY_STATE PowerPolicyState; 187*8a978a17SVictor Perevertkin 188*8a978a17SVictor Perevertkin // 189*8a978a17SVictor Perevertkin // The device object for the timed out device 190*8a978a17SVictor Perevertkin // 191*8a978a17SVictor Perevertkin PDEVICE_OBJECT DeviceObject; 192*8a978a17SVictor Perevertkin 193*8a978a17SVictor Perevertkin // 194*8a978a17SVictor Perevertkin // The handle for the timed out device 195*8a978a17SVictor Perevertkin // 196*8a978a17SVictor Perevertkin WDFDEVICE Device; 197*8a978a17SVictor Perevertkin 198*8a978a17SVictor Perevertkin // 199*8a978a17SVictor Perevertkin // The thread which is stuck 200*8a978a17SVictor Perevertkin // 201*8a978a17SVictor Perevertkin PKTHREAD TimedOutThread; 202*8a978a17SVictor Perevertkin 203*8a978a17SVictor Perevertkin } WDF_POWER_ROUTINE_TIMED_OUT_DATA_V1_13; 204*8a978a17SVictor Perevertkin 205*8a978a17SVictor Perevertkin typedef struct _WDF_REQUEST_FATAL_ERROR_INFORMATION_LENGTH_MISMATCH_DATA_V1_13 { 206*8a978a17SVictor Perevertkin WDFREQUEST Request; 207*8a978a17SVictor Perevertkin 208*8a978a17SVictor Perevertkin PIRP Irp; 209*8a978a17SVictor Perevertkin 210*8a978a17SVictor Perevertkin ULONG OutputBufferLength; 211*8a978a17SVictor Perevertkin 212*8a978a17SVictor Perevertkin ULONG_PTR Information; 213*8a978a17SVictor Perevertkin 214*8a978a17SVictor Perevertkin UCHAR MajorFunction; 215*8a978a17SVictor Perevertkin 216*8a978a17SVictor Perevertkin } WDF_REQUEST_FATAL_ERROR_INFORMATION_LENGTH_MISMATCH_DATA_V1_13, *PWDF_REQUEST_FATAL_ERROR_INFORMATION_LENGTH_MISMATCH_DATA_V1_13; 217*8a978a17SVictor Perevertkin 218*8a978a17SVictor Perevertkin typedef struct _WDF_QUEUE_FATAL_ERROR_DATA_V1_13 { 219*8a978a17SVictor Perevertkin WDFQUEUE Queue; 220*8a978a17SVictor Perevertkin 221*8a978a17SVictor Perevertkin WDFREQUEST Request; 222*8a978a17SVictor Perevertkin 223*8a978a17SVictor Perevertkin NTSTATUS Status; 224*8a978a17SVictor Perevertkin 225*8a978a17SVictor Perevertkin } WDF_QUEUE_FATAL_ERROR_DATA_V1_13, *PWDF_QUEUE_FATAL_ERROR_DATA_V1_13; 226*8a978a17SVictor Perevertkin 227*8a978a17SVictor Perevertkin // End of versioning of structures for wdfbugcodes.h 228*8a978a17SVictor Perevertkin 229*8a978a17SVictor Perevertkin // 230*8a978a17SVictor Perevertkin // Versioning of structures for wdfchildlist.h 231*8a978a17SVictor Perevertkin // 232*8a978a17SVictor Perevertkin typedef struct _WDF_CHILD_IDENTIFICATION_DESCRIPTION_HEADER_V1_13 { 233*8a978a17SVictor Perevertkin // 234*8a978a17SVictor Perevertkin // Size in bytes of the entire description, including this header. 235*8a978a17SVictor Perevertkin // 236*8a978a17SVictor Perevertkin // Same value as WDF_CHILD_LIST_CONFIG::IdentificationDescriptionSize 237*8a978a17SVictor Perevertkin // Used as a sanity check. 238*8a978a17SVictor Perevertkin // 239*8a978a17SVictor Perevertkin ULONG IdentificationDescriptionSize; 240*8a978a17SVictor Perevertkin 241*8a978a17SVictor Perevertkin } WDF_CHILD_IDENTIFICATION_DESCRIPTION_HEADER_V1_13, *PWDF_CHILD_IDENTIFICATION_DESCRIPTION_HEADER_V1_13; 242*8a978a17SVictor Perevertkin 243*8a978a17SVictor Perevertkin typedef struct _WDF_CHILD_ADDRESS_DESCRIPTION_HEADER_V1_13 { 244*8a978a17SVictor Perevertkin // 245*8a978a17SVictor Perevertkin // Size in bytes of the entire description, including this header. 246*8a978a17SVictor Perevertkin // 247*8a978a17SVictor Perevertkin // Same value as WDF_CHILD_LIST_CONFIG::AddressDescriptionSize 248*8a978a17SVictor Perevertkin // Used as a sanity check. 249*8a978a17SVictor Perevertkin // 250*8a978a17SVictor Perevertkin ULONG AddressDescriptionSize; 251*8a978a17SVictor Perevertkin 252*8a978a17SVictor Perevertkin } WDF_CHILD_ADDRESS_DESCRIPTION_HEADER_V1_13, *PWDF_CHILD_ADDRESS_DESCRIPTION_HEADER_V1_13; 253*8a978a17SVictor Perevertkin 254*8a978a17SVictor Perevertkin typedef struct _WDF_CHILD_RETRIEVE_INFO_V1_13 { 255*8a978a17SVictor Perevertkin // 256*8a978a17SVictor Perevertkin // Size of the structure in bytes 257*8a978a17SVictor Perevertkin // 258*8a978a17SVictor Perevertkin ULONG Size; 259*8a978a17SVictor Perevertkin 260*8a978a17SVictor Perevertkin // 261*8a978a17SVictor Perevertkin // Must be a valid pointer when passed in, copied into upon success 262*8a978a17SVictor Perevertkin // 263*8a978a17SVictor Perevertkin PWDF_CHILD_IDENTIFICATION_DESCRIPTION_HEADER_V1_13 IdentificationDescription; 264*8a978a17SVictor Perevertkin 265*8a978a17SVictor Perevertkin // 266*8a978a17SVictor Perevertkin // Optional pointer when passed in, copied into upon success 267*8a978a17SVictor Perevertkin // 268*8a978a17SVictor Perevertkin PWDF_CHILD_ADDRESS_DESCRIPTION_HEADER_V1_13 AddressDescription; 269*8a978a17SVictor Perevertkin 270*8a978a17SVictor Perevertkin // 271*8a978a17SVictor Perevertkin // Status of the returned device 272*8a978a17SVictor Perevertkin // 273*8a978a17SVictor Perevertkin WDF_CHILD_LIST_RETRIEVE_DEVICE_STATUS Status; 274*8a978a17SVictor Perevertkin 275*8a978a17SVictor Perevertkin // 276*8a978a17SVictor Perevertkin // If provided, will be used for searching through the list of devices 277*8a978a17SVictor Perevertkin // instead of the default list ID compare function 278*8a978a17SVictor Perevertkin // 279*8a978a17SVictor Perevertkin PFN_WDF_CHILD_LIST_IDENTIFICATION_DESCRIPTION_COMPARE EvtChildListIdentificationDescriptionCompare; 280*8a978a17SVictor Perevertkin 281*8a978a17SVictor Perevertkin } WDF_CHILD_RETRIEVE_INFO_V1_13, *PWDF_CHILD_RETRIEVE_INFO_V1_13; 282*8a978a17SVictor Perevertkin 283*8a978a17SVictor Perevertkin typedef struct _WDF_CHILD_LIST_CONFIG_V1_13 { 284*8a978a17SVictor Perevertkin // 285*8a978a17SVictor Perevertkin // Size of this structure in bytes 286*8a978a17SVictor Perevertkin // 287*8a978a17SVictor Perevertkin ULONG Size; 288*8a978a17SVictor Perevertkin 289*8a978a17SVictor Perevertkin // 290*8a978a17SVictor Perevertkin // The size in bytes of an identificaiton description to be used with the 291*8a978a17SVictor Perevertkin // created WDFCHILDLIST handle 292*8a978a17SVictor Perevertkin // 293*8a978a17SVictor Perevertkin ULONG IdentificationDescriptionSize; 294*8a978a17SVictor Perevertkin 295*8a978a17SVictor Perevertkin // 296*8a978a17SVictor Perevertkin // Optional size in bytes of an address description to be used with the 297*8a978a17SVictor Perevertkin // created WDFCHILDLIST handle. 298*8a978a17SVictor Perevertkin // 299*8a978a17SVictor Perevertkin ULONG AddressDescriptionSize; 300*8a978a17SVictor Perevertkin 301*8a978a17SVictor Perevertkin // 302*8a978a17SVictor Perevertkin // Required callback to be invoked when a description on the device list 303*8a978a17SVictor Perevertkin // needs to be converted into a real WDFDEVICE handle. 304*8a978a17SVictor Perevertkin // 305*8a978a17SVictor Perevertkin PFN_WDF_CHILD_LIST_CREATE_DEVICE EvtChildListCreateDevice; 306*8a978a17SVictor Perevertkin 307*8a978a17SVictor Perevertkin // 308*8a978a17SVictor Perevertkin // Optional callback to be invoked when the device list needs to be 309*8a978a17SVictor Perevertkin // rescanned. This function will be called after the device has entered D0 310*8a978a17SVictor Perevertkin // and been fully initialized but before I/O has started. 311*8a978a17SVictor Perevertkin // 312*8a978a17SVictor Perevertkin PFN_WDF_CHILD_LIST_SCAN_FOR_CHILDREN EvtChildListScanForChildren; 313*8a978a17SVictor Perevertkin 314*8a978a17SVictor Perevertkin // 315*8a978a17SVictor Perevertkin // Optional callback to be invoked when an identification description needs 316*8a978a17SVictor Perevertkin // to be copied from one location to another. 317*8a978a17SVictor Perevertkin // 318*8a978a17SVictor Perevertkin // If left NULL, RtlCopyMemory will be used to copy the description. 319*8a978a17SVictor Perevertkin // 320*8a978a17SVictor Perevertkin PFN_WDF_CHILD_LIST_IDENTIFICATION_DESCRIPTION_COPY EvtChildListIdentificationDescriptionCopy; 321*8a978a17SVictor Perevertkin 322*8a978a17SVictor Perevertkin // 323*8a978a17SVictor Perevertkin // Optional callback to be invoked when an identification description needs 324*8a978a17SVictor Perevertkin // to be duplicated. As opposed to EvtChildListIdentificationDescriptionCopy, 325*8a978a17SVictor Perevertkin // EvtChildListIdentificationDescriptionDuplicate can fail. 326*8a978a17SVictor Perevertkin // 327*8a978a17SVictor Perevertkin PFN_WDF_CHILD_LIST_IDENTIFICATION_DESCRIPTION_DUPLICATE EvtChildListIdentificationDescriptionDuplicate; 328*8a978a17SVictor Perevertkin 329*8a978a17SVictor Perevertkin // 330*8a978a17SVictor Perevertkin // Optional callback to be invoked when an identification description needs 331*8a978a17SVictor Perevertkin // to be cleaned up. This function should *NOT* free the description passed 332*8a978a17SVictor Perevertkin // to it, just free any associated resources. 333*8a978a17SVictor Perevertkin // 334*8a978a17SVictor Perevertkin PFN_WDF_CHILD_LIST_IDENTIFICATION_DESCRIPTION_CLEANUP EvtChildListIdentificationDescriptionCleanup; 335*8a978a17SVictor Perevertkin 336*8a978a17SVictor Perevertkin // 337*8a978a17SVictor Perevertkin // Optional callback to be invoked when an identification description needs 338*8a978a17SVictor Perevertkin // to be compared with another identificaiton description. 339*8a978a17SVictor Perevertkin // 340*8a978a17SVictor Perevertkin // If left NULL, RtlCompareMemory will be used to compare the two 341*8a978a17SVictor Perevertkin // descriptions. 342*8a978a17SVictor Perevertkin // 343*8a978a17SVictor Perevertkin PFN_WDF_CHILD_LIST_IDENTIFICATION_DESCRIPTION_COMPARE EvtChildListIdentificationDescriptionCompare; 344*8a978a17SVictor Perevertkin 345*8a978a17SVictor Perevertkin // 346*8a978a17SVictor Perevertkin // Optional callback to be invoked when an address description needs 347*8a978a17SVictor Perevertkin // to be copied from one location to another. 348*8a978a17SVictor Perevertkin // 349*8a978a17SVictor Perevertkin // If left NULL, RtlCopyMemory will be used to copy the description. 350*8a978a17SVictor Perevertkin // 351*8a978a17SVictor Perevertkin PFN_WDF_CHILD_LIST_ADDRESS_DESCRIPTION_COPY EvtChildListAddressDescriptionCopy; 352*8a978a17SVictor Perevertkin 353*8a978a17SVictor Perevertkin // 354*8a978a17SVictor Perevertkin // Optional callback to be invoked when an address description needs to be 355*8a978a17SVictor Perevertkin // duplicated. As opposed to EvtChildListAddressDescriptionCopy, 356*8a978a17SVictor Perevertkin // EvtChildListAddressDescriptionDuplicate can fail. 357*8a978a17SVictor Perevertkin // 358*8a978a17SVictor Perevertkin PFN_WDF_CHILD_LIST_ADDRESS_DESCRIPTION_DUPLICATE EvtChildListAddressDescriptionDuplicate; 359*8a978a17SVictor Perevertkin 360*8a978a17SVictor Perevertkin // 361*8a978a17SVictor Perevertkin // Optional callback to be invoked when an address description needs to be 362*8a978a17SVictor Perevertkin // cleaned up. This function should *NOT* free the description passed to 363*8a978a17SVictor Perevertkin // it, just free any associated resources. 364*8a978a17SVictor Perevertkin // 365*8a978a17SVictor Perevertkin PFN_WDF_CHILD_LIST_ADDRESS_DESCRIPTION_CLEANUP EvtChildListAddressDescriptionCleanup; 366*8a978a17SVictor Perevertkin 367*8a978a17SVictor Perevertkin // 368*8a978a17SVictor Perevertkin // If provided, will be called when the child's stack requests that the 369*8a978a17SVictor Perevertkin // child be reenumerated. Returning TRUE allows for the reenumeration to 370*8a978a17SVictor Perevertkin // proceed. FALSE will no reenumerate the stack. 371*8a978a17SVictor Perevertkin // 372*8a978a17SVictor Perevertkin PFN_WDF_CHILD_LIST_DEVICE_REENUMERATED EvtChildListDeviceReenumerated; 373*8a978a17SVictor Perevertkin 374*8a978a17SVictor Perevertkin } WDF_CHILD_LIST_CONFIG_V1_13, *PWDF_CHILD_LIST_CONFIG_V1_13; 375*8a978a17SVictor Perevertkin 376*8a978a17SVictor Perevertkin typedef struct _WDF_CHILD_LIST_ITERATOR_V1_13 { 377*8a978a17SVictor Perevertkin // 378*8a978a17SVictor Perevertkin // Size of this structure in bytes 379*8a978a17SVictor Perevertkin // 380*8a978a17SVictor Perevertkin ULONG Size; 381*8a978a17SVictor Perevertkin 382*8a978a17SVictor Perevertkin // 383*8a978a17SVictor Perevertkin // What type of devices to return, see WDF_RETRIEVE_CHILD_FLAGS for 384*8a978a17SVictor Perevertkin // flag values 385*8a978a17SVictor Perevertkin // 386*8a978a17SVictor Perevertkin // 387*8a978a17SVictor Perevertkin ULONG Flags; 388*8a978a17SVictor Perevertkin 389*8a978a17SVictor Perevertkin // 390*8a978a17SVictor Perevertkin // For internal use, treat this field as opaque 391*8a978a17SVictor Perevertkin // 392*8a978a17SVictor Perevertkin PVOID Reserved[4]; 393*8a978a17SVictor Perevertkin 394*8a978a17SVictor Perevertkin } WDF_CHILD_LIST_ITERATOR_V1_13, *PWDF_CHILD_LIST_ITERATOR_V1_13; 395*8a978a17SVictor Perevertkin 396*8a978a17SVictor Perevertkin // End of versioning of structures for wdfchildlist.h 397*8a978a17SVictor Perevertkin 398*8a978a17SVictor Perevertkin // 399*8a978a17SVictor Perevertkin // Versioning of structures for wdfcollection.h 400*8a978a17SVictor Perevertkin // 401*8a978a17SVictor Perevertkin // End of versioning of structures for wdfcollection.h 402*8a978a17SVictor Perevertkin 403*8a978a17SVictor Perevertkin // 404*8a978a17SVictor Perevertkin // Versioning of structures for wdfCommonBuffer.h 405*8a978a17SVictor Perevertkin // 406*8a978a17SVictor Perevertkin typedef struct _WDF_COMMON_BUFFER_CONFIG_V1_13 { 407*8a978a17SVictor Perevertkin // 408*8a978a17SVictor Perevertkin // Size of this structure in bytes 409*8a978a17SVictor Perevertkin // 410*8a978a17SVictor Perevertkin ULONG Size; 411*8a978a17SVictor Perevertkin 412*8a978a17SVictor Perevertkin // 413*8a978a17SVictor Perevertkin // Alignment requirement of the buffer address 414*8a978a17SVictor Perevertkin // 415*8a978a17SVictor Perevertkin ULONG AlignmentRequirement; 416*8a978a17SVictor Perevertkin 417*8a978a17SVictor Perevertkin } WDF_COMMON_BUFFER_CONFIG_V1_13, *PWDF_COMMON_BUFFER_CONFIG_V1_13; 418*8a978a17SVictor Perevertkin 419*8a978a17SVictor Perevertkin // End of versioning of structures for wdfCommonBuffer.h 420*8a978a17SVictor Perevertkin 421*8a978a17SVictor Perevertkin // 422*8a978a17SVictor Perevertkin // Versioning of structures for wdfcontrol.h 423*8a978a17SVictor Perevertkin // 424*8a978a17SVictor Perevertkin // End of versioning of structures for wdfcontrol.h 425*8a978a17SVictor Perevertkin 426*8a978a17SVictor Perevertkin // 427*8a978a17SVictor Perevertkin // Versioning of structures for wdfcore.h 428*8a978a17SVictor Perevertkin // 429*8a978a17SVictor Perevertkin // End of versioning of structures for wdfcore.h 430*8a978a17SVictor Perevertkin 431*8a978a17SVictor Perevertkin // 432*8a978a17SVictor Perevertkin // Versioning of structures for wdfcx.h 433*8a978a17SVictor Perevertkin // 434*8a978a17SVictor Perevertkin typedef struct _WDFCX_FILEOBJECT_CONFIG_V1_13 { 435*8a978a17SVictor Perevertkin // 436*8a978a17SVictor Perevertkin // Size of this structure in bytes 437*8a978a17SVictor Perevertkin // 438*8a978a17SVictor Perevertkin ULONG Size; 439*8a978a17SVictor Perevertkin 440*8a978a17SVictor Perevertkin // 441*8a978a17SVictor Perevertkin // Event callback for create requests 442*8a978a17SVictor Perevertkin // 443*8a978a17SVictor Perevertkin PFN_WDFCX_DEVICE_FILE_CREATE EvtCxDeviceFileCreate; 444*8a978a17SVictor Perevertkin 445*8a978a17SVictor Perevertkin // 446*8a978a17SVictor Perevertkin // Event callback for close requests 447*8a978a17SVictor Perevertkin // 448*8a978a17SVictor Perevertkin PFN_WDF_FILE_CLOSE EvtFileClose; 449*8a978a17SVictor Perevertkin 450*8a978a17SVictor Perevertkin // 451*8a978a17SVictor Perevertkin // Event callback for cleanup requests 452*8a978a17SVictor Perevertkin // 453*8a978a17SVictor Perevertkin PFN_WDF_FILE_CLEANUP EvtFileCleanup; 454*8a978a17SVictor Perevertkin 455*8a978a17SVictor Perevertkin // 456*8a978a17SVictor Perevertkin // If WdfTrue, create/cleanup/close file object related requests will be 457*8a978a17SVictor Perevertkin // sent down the stack. 458*8a978a17SVictor Perevertkin // 459*8a978a17SVictor Perevertkin // If WdfFalse, create/cleanup/close will be completed at this location in 460*8a978a17SVictor Perevertkin // the device stack. 461*8a978a17SVictor Perevertkin // 462*8a978a17SVictor Perevertkin // If WdfDefault, behavior depends on device type 463*8a978a17SVictor Perevertkin // FDO, PDO, Control: use the WdfFalse behavior 464*8a978a17SVictor Perevertkin // Filter: use the WdfTrue behavior 465*8a978a17SVictor Perevertkin // 466*8a978a17SVictor Perevertkin WDF_TRI_STATE AutoForwardCleanupClose; 467*8a978a17SVictor Perevertkin 468*8a978a17SVictor Perevertkin // 469*8a978a17SVictor Perevertkin // Specify whether framework should create WDFFILEOBJECT and also 470*8a978a17SVictor Perevertkin // whether it can FsContexts fields in the WDM fileobject to store 471*8a978a17SVictor Perevertkin // WDFFILEOBJECT so that it can avoid table look up and improve perf. 472*8a978a17SVictor Perevertkin // 473*8a978a17SVictor Perevertkin WDF_FILEOBJECT_CLASS FileObjectClass; 474*8a978a17SVictor Perevertkin 475*8a978a17SVictor Perevertkin } WDFCX_FILEOBJECT_CONFIG_V1_13, *PWDFCX_FILEOBJECT_CONFIG_V1_13; 476*8a978a17SVictor Perevertkin 477*8a978a17SVictor Perevertkin // End of versioning of structures for wdfcx.h 478*8a978a17SVictor Perevertkin 479*8a978a17SVictor Perevertkin // 480*8a978a17SVictor Perevertkin // Versioning of structures for wdfcxbase.h 481*8a978a17SVictor Perevertkin // 482*8a978a17SVictor Perevertkin typedef struct _WDF_CLASS_EXTENSION_DESCRIPTOR_V1_13 { 483*8a978a17SVictor Perevertkin PCWDF_CLASS_EXTENSION_DESCRIPTOR_V1_13 Next; 484*8a978a17SVictor Perevertkin 485*8a978a17SVictor Perevertkin ULONG Size; 486*8a978a17SVictor Perevertkin 487*8a978a17SVictor Perevertkin PFN_WDF_CLASS_EXTENSIONIN_BIND Bind; 488*8a978a17SVictor Perevertkin 489*8a978a17SVictor Perevertkin PFN_WDF_CLASS_EXTENSIONIN_UNBIND Unbind; 490*8a978a17SVictor Perevertkin 491*8a978a17SVictor Perevertkin } WDF_CLASS_EXTENSION_DESCRIPTOR_V1_13, *PWDF_CLASS_EXTENSION_DESCRIPTOR_V1_13; 492*8a978a17SVictor Perevertkin 493*8a978a17SVictor Perevertkin typedef struct _WDF_CLASS_VERSION_V1_13 { 494*8a978a17SVictor Perevertkin WDF_MAJOR_VERSION Major; 495*8a978a17SVictor Perevertkin 496*8a978a17SVictor Perevertkin WDF_MINOR_VERSION Minor; 497*8a978a17SVictor Perevertkin 498*8a978a17SVictor Perevertkin WDF_BUILD_NUMBER Build; 499*8a978a17SVictor Perevertkin 500*8a978a17SVictor Perevertkin } WDF_CLASS_VERSION_V1_13; 501*8a978a17SVictor Perevertkin 502*8a978a17SVictor Perevertkin typedef struct _WDF_CLASS_BIND_INFO_V1_13 { 503*8a978a17SVictor Perevertkin // 504*8a978a17SVictor Perevertkin // Size of the structure in bytes 505*8a978a17SVictor Perevertkin // 506*8a978a17SVictor Perevertkin ULONG Size; 507*8a978a17SVictor Perevertkin 508*8a978a17SVictor Perevertkin // 509*8a978a17SVictor Perevertkin // Name of the class to bind to 510*8a978a17SVictor Perevertkin // 511*8a978a17SVictor Perevertkin PWSTR ClassName; 512*8a978a17SVictor Perevertkin 513*8a978a17SVictor Perevertkin // 514*8a978a17SVictor Perevertkin // Version information for the class 515*8a978a17SVictor Perevertkin // 516*8a978a17SVictor Perevertkin WDF_CLASS_VERSION_V1_13 Version; 517*8a978a17SVictor Perevertkin 518*8a978a17SVictor Perevertkin // 519*8a978a17SVictor Perevertkin // Function export table from the class driver to resolve on bind 520*8a978a17SVictor Perevertkin // 521*8a978a17SVictor Perevertkin PFN_WDF_CLASS_EXPORT * FunctionTable; 522*8a978a17SVictor Perevertkin 523*8a978a17SVictor Perevertkin // 524*8a978a17SVictor Perevertkin // Number of entries in FunctionTable 525*8a978a17SVictor Perevertkin // 526*8a978a17SVictor Perevertkin ULONG FunctionTableCount; 527*8a978a17SVictor Perevertkin 528*8a978a17SVictor Perevertkin // 529*8a978a17SVictor Perevertkin // Optional field where the client specify additional information 530*8a978a17SVictor Perevertkin // for the class driver to resolve 531*8a978a17SVictor Perevertkin // 532*8a978a17SVictor Perevertkin PVOID ClassBindInfo; 533*8a978a17SVictor Perevertkin 534*8a978a17SVictor Perevertkin // 535*8a978a17SVictor Perevertkin // Optional bind callback. If set, WdfVersionBindClass will not 536*8a978a17SVictor Perevertkin // be called and it will be up to ClientClassBind to call this function 537*8a978a17SVictor Perevertkin // if required. 538*8a978a17SVictor Perevertkin // 539*8a978a17SVictor Perevertkin PFN_WDF_CLIENT_BIND_CLASS ClientBindClass; 540*8a978a17SVictor Perevertkin 541*8a978a17SVictor Perevertkin // 542*8a978a17SVictor Perevertkin // Optional unbind callback. If set, WdfVersionUnbindClass will not be 543*8a978a17SVictor Perevertkin // called and it will be up to ClientClassUnbind to call this function 544*8a978a17SVictor Perevertkin // if required. 545*8a978a17SVictor Perevertkin // 546*8a978a17SVictor Perevertkin PFN_WDF_CLIENT_UNBIND_CLASS ClientUnbindClass; 547*8a978a17SVictor Perevertkin 548*8a978a17SVictor Perevertkin // 549*8a978a17SVictor Perevertkin // Diagnostic cookie to use during debugging 550*8a978a17SVictor Perevertkin // 551*8a978a17SVictor Perevertkin PVOID ClassModule; 552*8a978a17SVictor Perevertkin 553*8a978a17SVictor Perevertkin } WDF_CLASS_BIND_INFO_V1_13, * PWDF_CLASS_BIND_INFO_V1_13; 554*8a978a17SVictor Perevertkin 555*8a978a17SVictor Perevertkin typedef struct _WDF_CLASS_LIBRARY_INFO_V1_13 { 556*8a978a17SVictor Perevertkin // 557*8a978a17SVictor Perevertkin // Size of this structure in bytes 558*8a978a17SVictor Perevertkin // 559*8a978a17SVictor Perevertkin ULONG Size; 560*8a978a17SVictor Perevertkin 561*8a978a17SVictor Perevertkin // 562*8a978a17SVictor Perevertkin // Version of this class library 563*8a978a17SVictor Perevertkin // 564*8a978a17SVictor Perevertkin WDF_CLASS_VERSION_V1_13 Version; 565*8a978a17SVictor Perevertkin 566*8a978a17SVictor Perevertkin // 567*8a978a17SVictor Perevertkin // Callback to be called by the loader to initialize the class library 568*8a978a17SVictor Perevertkin // 569*8a978a17SVictor Perevertkin PFN_WDF_CLASS_LIBRARY_INITIALIZE ClassLibraryInitialize; 570*8a978a17SVictor Perevertkin 571*8a978a17SVictor Perevertkin // 572*8a978a17SVictor Perevertkin // Callback to be called by the loader to deinitialize the class library 573*8a978a17SVictor Perevertkin // after succesful initialization (immediately before the class library will 574*8a978a17SVictor Perevertkin // be unloaded). 575*8a978a17SVictor Perevertkin // 576*8a978a17SVictor Perevertkin PFN_WDF_CLASS_LIBRARY_DEINITIALIZE ClassLibraryDeinitialize; 577*8a978a17SVictor Perevertkin 578*8a978a17SVictor Perevertkin // 579*8a978a17SVictor Perevertkin // Callback to be called by the loader when a client driver has request to 580*8a978a17SVictor Perevertkin // be bound to this class library. 581*8a978a17SVictor Perevertkin // 582*8a978a17SVictor Perevertkin PFN_WDF_CLASS_LIBRARY_BIND_CLIENT ClassLibraryBindClient; 583*8a978a17SVictor Perevertkin 584*8a978a17SVictor Perevertkin // 585*8a978a17SVictor Perevertkin // Callback to be called by the loader when a previously bound client driver 586*8a978a17SVictor Perevertkin // is being unloaded. 587*8a978a17SVictor Perevertkin // 588*8a978a17SVictor Perevertkin PFN_WDF_CLASS_LIBRARY_UNBIND_CLIENT ClassLibraryUnbindClient; 589*8a978a17SVictor Perevertkin 590*8a978a17SVictor Perevertkin } WDF_CLASS_LIBRARY_INFO_V1_13, *PWDF_CLASS_LIBRARY_INFO_V1_13; 591*8a978a17SVictor Perevertkin 592*8a978a17SVictor Perevertkin // End of versioning of structures for wdfcxbase.h 593*8a978a17SVictor Perevertkin 594*8a978a17SVictor Perevertkin // 595*8a978a17SVictor Perevertkin // Versioning of structures for wdfDevice.h 596*8a978a17SVictor Perevertkin // 597*8a978a17SVictor Perevertkin typedef struct _WDF_FILEOBJECT_CONFIG_V1_13 { 598*8a978a17SVictor Perevertkin // 599*8a978a17SVictor Perevertkin // Size of this structure in bytes 600*8a978a17SVictor Perevertkin // 601*8a978a17SVictor Perevertkin ULONG Size; 602*8a978a17SVictor Perevertkin 603*8a978a17SVictor Perevertkin // 604*8a978a17SVictor Perevertkin // Event callback for create requests 605*8a978a17SVictor Perevertkin // 606*8a978a17SVictor Perevertkin PFN_WDF_DEVICE_FILE_CREATE EvtDeviceFileCreate; 607*8a978a17SVictor Perevertkin 608*8a978a17SVictor Perevertkin // 609*8a978a17SVictor Perevertkin // Event callback for close requests 610*8a978a17SVictor Perevertkin // 611*8a978a17SVictor Perevertkin PFN_WDF_FILE_CLOSE EvtFileClose; 612*8a978a17SVictor Perevertkin 613*8a978a17SVictor Perevertkin // 614*8a978a17SVictor Perevertkin // Event callback for cleanup requests 615*8a978a17SVictor Perevertkin // 616*8a978a17SVictor Perevertkin PFN_WDF_FILE_CLEANUP EvtFileCleanup; 617*8a978a17SVictor Perevertkin 618*8a978a17SVictor Perevertkin // 619*8a978a17SVictor Perevertkin // If WdfTrue, create/cleanup/close file object related requests will be 620*8a978a17SVictor Perevertkin // sent down the stack. 621*8a978a17SVictor Perevertkin // 622*8a978a17SVictor Perevertkin // If WdfFalse, create/cleanup/close will be completed at this location in 623*8a978a17SVictor Perevertkin // the device stack. 624*8a978a17SVictor Perevertkin // 625*8a978a17SVictor Perevertkin // If WdfDefault, behavior depends on device type 626*8a978a17SVictor Perevertkin // FDO, PDO, Control: use the WdfFalse behavior 627*8a978a17SVictor Perevertkin // Filter: use the WdfTrue behavior 628*8a978a17SVictor Perevertkin // 629*8a978a17SVictor Perevertkin WDF_TRI_STATE AutoForwardCleanupClose; 630*8a978a17SVictor Perevertkin 631*8a978a17SVictor Perevertkin // 632*8a978a17SVictor Perevertkin // Specify whether framework should create WDFFILEOBJECT and also 633*8a978a17SVictor Perevertkin // whether it can FsContexts fields in the WDM fileobject to store 634*8a978a17SVictor Perevertkin // WDFFILEOBJECT so that it can avoid table look up and improve perf. 635*8a978a17SVictor Perevertkin // 636*8a978a17SVictor Perevertkin WDF_FILEOBJECT_CLASS FileObjectClass; 637*8a978a17SVictor Perevertkin 638*8a978a17SVictor Perevertkin } WDF_FILEOBJECT_CONFIG_V1_13, *PWDF_FILEOBJECT_CONFIG_V1_13; 639*8a978a17SVictor Perevertkin 640*8a978a17SVictor Perevertkin typedef struct _WDF_DEVICE_PNP_NOTIFICATION_DATA_V1_13 { 641*8a978a17SVictor Perevertkin // 642*8a978a17SVictor Perevertkin // Type of data 643*8a978a17SVictor Perevertkin // 644*8a978a17SVictor Perevertkin WDF_STATE_NOTIFICATION_TYPE Type; 645*8a978a17SVictor Perevertkin 646*8a978a17SVictor Perevertkin union { 647*8a978a17SVictor Perevertkin struct { 648*8a978a17SVictor Perevertkin // 649*8a978a17SVictor Perevertkin // The current state that is about to be exited 650*8a978a17SVictor Perevertkin // 651*8a978a17SVictor Perevertkin WDF_DEVICE_PNP_STATE CurrentState; 652*8a978a17SVictor Perevertkin 653*8a978a17SVictor Perevertkin // 654*8a978a17SVictor Perevertkin // The new state that is about to be entered 655*8a978a17SVictor Perevertkin // 656*8a978a17SVictor Perevertkin WDF_DEVICE_PNP_STATE NewState; 657*8a978a17SVictor Perevertkin 658*8a978a17SVictor Perevertkin } EnterState; 659*8a978a17SVictor Perevertkin 660*8a978a17SVictor Perevertkin struct { 661*8a978a17SVictor Perevertkin // 662*8a978a17SVictor Perevertkin // The current state 663*8a978a17SVictor Perevertkin // 664*8a978a17SVictor Perevertkin WDF_DEVICE_PNP_STATE CurrentState; 665*8a978a17SVictor Perevertkin 666*8a978a17SVictor Perevertkin } PostProcessState; 667*8a978a17SVictor Perevertkin 668*8a978a17SVictor Perevertkin struct { 669*8a978a17SVictor Perevertkin // 670*8a978a17SVictor Perevertkin // The current state that is about to be exitted 671*8a978a17SVictor Perevertkin // 672*8a978a17SVictor Perevertkin WDF_DEVICE_PNP_STATE CurrentState; 673*8a978a17SVictor Perevertkin 674*8a978a17SVictor Perevertkin // 675*8a978a17SVictor Perevertkin // The state that is about to be entered 676*8a978a17SVictor Perevertkin // 677*8a978a17SVictor Perevertkin WDF_DEVICE_PNP_STATE NewState; 678*8a978a17SVictor Perevertkin 679*8a978a17SVictor Perevertkin } LeaveState; 680*8a978a17SVictor Perevertkin 681*8a978a17SVictor Perevertkin } Data; 682*8a978a17SVictor Perevertkin 683*8a978a17SVictor Perevertkin } WDF_DEVICE_PNP_NOTIFICATION_DATA_V1_13; 684*8a978a17SVictor Perevertkin 685*8a978a17SVictor Perevertkin typedef struct _WDF_DEVICE_POWER_NOTIFICATION_DATA_V1_13 { 686*8a978a17SVictor Perevertkin // 687*8a978a17SVictor Perevertkin // Type of data 688*8a978a17SVictor Perevertkin // 689*8a978a17SVictor Perevertkin WDF_STATE_NOTIFICATION_TYPE Type; 690*8a978a17SVictor Perevertkin 691*8a978a17SVictor Perevertkin union { 692*8a978a17SVictor Perevertkin struct { 693*8a978a17SVictor Perevertkin // 694*8a978a17SVictor Perevertkin // The current state that is about to be exitted 695*8a978a17SVictor Perevertkin // 696*8a978a17SVictor Perevertkin WDF_DEVICE_POWER_STATE CurrentState; 697*8a978a17SVictor Perevertkin 698*8a978a17SVictor Perevertkin // 699*8a978a17SVictor Perevertkin // The new state that is about to be entered 700*8a978a17SVictor Perevertkin // 701*8a978a17SVictor Perevertkin WDF_DEVICE_POWER_STATE NewState; 702*8a978a17SVictor Perevertkin 703*8a978a17SVictor Perevertkin } EnterState; 704*8a978a17SVictor Perevertkin 705*8a978a17SVictor Perevertkin struct { 706*8a978a17SVictor Perevertkin // 707*8a978a17SVictor Perevertkin // The current state 708*8a978a17SVictor Perevertkin // 709*8a978a17SVictor Perevertkin WDF_DEVICE_POWER_STATE CurrentState; 710*8a978a17SVictor Perevertkin 711*8a978a17SVictor Perevertkin } PostProcessState; 712*8a978a17SVictor Perevertkin 713*8a978a17SVictor Perevertkin struct { 714*8a978a17SVictor Perevertkin // 715*8a978a17SVictor Perevertkin // The current state that is about to be exitted 716*8a978a17SVictor Perevertkin // 717*8a978a17SVictor Perevertkin WDF_DEVICE_POWER_STATE CurrentState; 718*8a978a17SVictor Perevertkin 719*8a978a17SVictor Perevertkin // 720*8a978a17SVictor Perevertkin // The state that is about to be entered 721*8a978a17SVictor Perevertkin // 722*8a978a17SVictor Perevertkin WDF_DEVICE_POWER_STATE NewState; 723*8a978a17SVictor Perevertkin 724*8a978a17SVictor Perevertkin } LeaveState; 725*8a978a17SVictor Perevertkin 726*8a978a17SVictor Perevertkin } Data; 727*8a978a17SVictor Perevertkin 728*8a978a17SVictor Perevertkin } WDF_DEVICE_POWER_NOTIFICATION_DATA_V1_13; 729*8a978a17SVictor Perevertkin 730*8a978a17SVictor Perevertkin typedef struct _WDF_DEVICE_POWER_POLICY_NOTIFICATION_DATA_V1_13 { 731*8a978a17SVictor Perevertkin // 732*8a978a17SVictor Perevertkin // Type of data 733*8a978a17SVictor Perevertkin // 734*8a978a17SVictor Perevertkin WDF_STATE_NOTIFICATION_TYPE Type; 735*8a978a17SVictor Perevertkin 736*8a978a17SVictor Perevertkin union { 737*8a978a17SVictor Perevertkin struct { 738*8a978a17SVictor Perevertkin // 739*8a978a17SVictor Perevertkin // The current state that is about to be exitted 740*8a978a17SVictor Perevertkin // 741*8a978a17SVictor Perevertkin WDF_DEVICE_POWER_POLICY_STATE CurrentState; 742*8a978a17SVictor Perevertkin 743*8a978a17SVictor Perevertkin // 744*8a978a17SVictor Perevertkin // The new state that is about to be entered 745*8a978a17SVictor Perevertkin // 746*8a978a17SVictor Perevertkin WDF_DEVICE_POWER_POLICY_STATE NewState; 747*8a978a17SVictor Perevertkin 748*8a978a17SVictor Perevertkin } EnterState; 749*8a978a17SVictor Perevertkin 750*8a978a17SVictor Perevertkin struct { 751*8a978a17SVictor Perevertkin // 752*8a978a17SVictor Perevertkin // The current state 753*8a978a17SVictor Perevertkin // 754*8a978a17SVictor Perevertkin WDF_DEVICE_POWER_POLICY_STATE CurrentState; 755*8a978a17SVictor Perevertkin 756*8a978a17SVictor Perevertkin } PostProcessState; 757*8a978a17SVictor Perevertkin 758*8a978a17SVictor Perevertkin struct { 759*8a978a17SVictor Perevertkin // 760*8a978a17SVictor Perevertkin // The current state that is about to be exitted 761*8a978a17SVictor Perevertkin // 762*8a978a17SVictor Perevertkin WDF_DEVICE_POWER_POLICY_STATE CurrentState; 763*8a978a17SVictor Perevertkin 764*8a978a17SVictor Perevertkin // 765*8a978a17SVictor Perevertkin // The state that is about to be entered 766*8a978a17SVictor Perevertkin // 767*8a978a17SVictor Perevertkin WDF_DEVICE_POWER_POLICY_STATE NewState; 768*8a978a17SVictor Perevertkin 769*8a978a17SVictor Perevertkin } LeaveState; 770*8a978a17SVictor Perevertkin 771*8a978a17SVictor Perevertkin } Data; 772*8a978a17SVictor Perevertkin 773*8a978a17SVictor Perevertkin } WDF_DEVICE_POWER_POLICY_NOTIFICATION_DATA_V1_13; 774*8a978a17SVictor Perevertkin 775*8a978a17SVictor Perevertkin typedef struct _WDF_PNPPOWER_EVENT_CALLBACKS_V1_13 { 776*8a978a17SVictor Perevertkin // 777*8a978a17SVictor Perevertkin // Size of this structure in bytes 778*8a978a17SVictor Perevertkin // 779*8a978a17SVictor Perevertkin ULONG Size; 780*8a978a17SVictor Perevertkin 781*8a978a17SVictor Perevertkin PFN_WDF_DEVICE_D0_ENTRY EvtDeviceD0Entry; 782*8a978a17SVictor Perevertkin 783*8a978a17SVictor Perevertkin PFN_WDF_DEVICE_D0_ENTRY_POST_INTERRUPTS_ENABLED EvtDeviceD0EntryPostInterruptsEnabled; 784*8a978a17SVictor Perevertkin 785*8a978a17SVictor Perevertkin PFN_WDF_DEVICE_D0_EXIT EvtDeviceD0Exit; 786*8a978a17SVictor Perevertkin 787*8a978a17SVictor Perevertkin PFN_WDF_DEVICE_D0_EXIT_PRE_INTERRUPTS_DISABLED EvtDeviceD0ExitPreInterruptsDisabled; 788*8a978a17SVictor Perevertkin 789*8a978a17SVictor Perevertkin PFN_WDF_DEVICE_PREPARE_HARDWARE EvtDevicePrepareHardware; 790*8a978a17SVictor Perevertkin 791*8a978a17SVictor Perevertkin PFN_WDF_DEVICE_RELEASE_HARDWARE EvtDeviceReleaseHardware; 792*8a978a17SVictor Perevertkin 793*8a978a17SVictor Perevertkin PFN_WDF_DEVICE_SELF_MANAGED_IO_CLEANUP EvtDeviceSelfManagedIoCleanup; 794*8a978a17SVictor Perevertkin 795*8a978a17SVictor Perevertkin PFN_WDF_DEVICE_SELF_MANAGED_IO_FLUSH EvtDeviceSelfManagedIoFlush; 796*8a978a17SVictor Perevertkin 797*8a978a17SVictor Perevertkin PFN_WDF_DEVICE_SELF_MANAGED_IO_INIT EvtDeviceSelfManagedIoInit; 798*8a978a17SVictor Perevertkin 799*8a978a17SVictor Perevertkin PFN_WDF_DEVICE_SELF_MANAGED_IO_SUSPEND EvtDeviceSelfManagedIoSuspend; 800*8a978a17SVictor Perevertkin 801*8a978a17SVictor Perevertkin PFN_WDF_DEVICE_SELF_MANAGED_IO_RESTART EvtDeviceSelfManagedIoRestart; 802*8a978a17SVictor Perevertkin 803*8a978a17SVictor Perevertkin PFN_WDF_DEVICE_SURPRISE_REMOVAL EvtDeviceSurpriseRemoval; 804*8a978a17SVictor Perevertkin 805*8a978a17SVictor Perevertkin PFN_WDF_DEVICE_QUERY_REMOVE EvtDeviceQueryRemove; 806*8a978a17SVictor Perevertkin 807*8a978a17SVictor Perevertkin PFN_WDF_DEVICE_QUERY_STOP EvtDeviceQueryStop; 808*8a978a17SVictor Perevertkin 809*8a978a17SVictor Perevertkin PFN_WDF_DEVICE_USAGE_NOTIFICATION EvtDeviceUsageNotification; 810*8a978a17SVictor Perevertkin 811*8a978a17SVictor Perevertkin PFN_WDF_DEVICE_RELATIONS_QUERY EvtDeviceRelationsQuery; 812*8a978a17SVictor Perevertkin 813*8a978a17SVictor Perevertkin PFN_WDF_DEVICE_USAGE_NOTIFICATION_EX EvtDeviceUsageNotificationEx; 814*8a978a17SVictor Perevertkin 815*8a978a17SVictor Perevertkin } WDF_PNPPOWER_EVENT_CALLBACKS_V1_13, *PWDF_PNPPOWER_EVENT_CALLBACKS_V1_13; 816*8a978a17SVictor Perevertkin 817*8a978a17SVictor Perevertkin typedef struct _WDF_POWER_POLICY_EVENT_CALLBACKS_V1_13 { 818*8a978a17SVictor Perevertkin // 819*8a978a17SVictor Perevertkin // Size of this structure in bytes 820*8a978a17SVictor Perevertkin // 821*8a978a17SVictor Perevertkin ULONG Size; 822*8a978a17SVictor Perevertkin 823*8a978a17SVictor Perevertkin PFN_WDF_DEVICE_ARM_WAKE_FROM_S0 EvtDeviceArmWakeFromS0; 824*8a978a17SVictor Perevertkin 825*8a978a17SVictor Perevertkin PFN_WDF_DEVICE_DISARM_WAKE_FROM_S0 EvtDeviceDisarmWakeFromS0; 826*8a978a17SVictor Perevertkin 827*8a978a17SVictor Perevertkin PFN_WDF_DEVICE_WAKE_FROM_S0_TRIGGERED EvtDeviceWakeFromS0Triggered; 828*8a978a17SVictor Perevertkin 829*8a978a17SVictor Perevertkin PFN_WDF_DEVICE_ARM_WAKE_FROM_SX EvtDeviceArmWakeFromSx; 830*8a978a17SVictor Perevertkin 831*8a978a17SVictor Perevertkin PFN_WDF_DEVICE_DISARM_WAKE_FROM_SX EvtDeviceDisarmWakeFromSx; 832*8a978a17SVictor Perevertkin 833*8a978a17SVictor Perevertkin PFN_WDF_DEVICE_WAKE_FROM_SX_TRIGGERED EvtDeviceWakeFromSxTriggered; 834*8a978a17SVictor Perevertkin 835*8a978a17SVictor Perevertkin PFN_WDF_DEVICE_ARM_WAKE_FROM_SX_WITH_REASON EvtDeviceArmWakeFromSxWithReason; 836*8a978a17SVictor Perevertkin 837*8a978a17SVictor Perevertkin } WDF_POWER_POLICY_EVENT_CALLBACKS_V1_13, *PWDF_POWER_POLICY_EVENT_CALLBACKS_V1_13; 838*8a978a17SVictor Perevertkin 839*8a978a17SVictor Perevertkin typedef struct _WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS_V1_13 { 840*8a978a17SVictor Perevertkin // 841*8a978a17SVictor Perevertkin // Size of this structure in bytes 842*8a978a17SVictor Perevertkin // 843*8a978a17SVictor Perevertkin ULONG Size; 844*8a978a17SVictor Perevertkin 845*8a978a17SVictor Perevertkin // 846*8a978a17SVictor Perevertkin // Indicates whether the device can wake itself up while the machine is in 847*8a978a17SVictor Perevertkin // S0. 848*8a978a17SVictor Perevertkin // 849*8a978a17SVictor Perevertkin WDF_POWER_POLICY_S0_IDLE_CAPABILITIES IdleCaps; 850*8a978a17SVictor Perevertkin 851*8a978a17SVictor Perevertkin // 852*8a978a17SVictor Perevertkin // The low power state in which the device will be placed when it is idled 853*8a978a17SVictor Perevertkin // out while the machine is in S0. 854*8a978a17SVictor Perevertkin // 855*8a978a17SVictor Perevertkin DEVICE_POWER_STATE DxState; 856*8a978a17SVictor Perevertkin 857*8a978a17SVictor Perevertkin // 858*8a978a17SVictor Perevertkin // Amount of time the device must be idle before idling out. Timeout is in 859*8a978a17SVictor Perevertkin // milliseconds. 860*8a978a17SVictor Perevertkin // 861*8a978a17SVictor Perevertkin ULONG IdleTimeout; 862*8a978a17SVictor Perevertkin 863*8a978a17SVictor Perevertkin // 864*8a978a17SVictor Perevertkin // Inidcates whether a user can control the idle policy of the device. 865*8a978a17SVictor Perevertkin // By default, a user is allowed to change the policy. 866*8a978a17SVictor Perevertkin // 867*8a978a17SVictor Perevertkin WDF_POWER_POLICY_S0_IDLE_USER_CONTROL UserControlOfIdleSettings; 868*8a978a17SVictor Perevertkin 869*8a978a17SVictor Perevertkin // 870*8a978a17SVictor Perevertkin // If WdfTrue, idling out while the machine is in S0 will be enabled. 871*8a978a17SVictor Perevertkin // 872*8a978a17SVictor Perevertkin // If WdfFalse, idling out will be disabled. 873*8a978a17SVictor Perevertkin // 874*8a978a17SVictor Perevertkin // If WdfUseDefault, the idling out will be enabled. If 875*8a978a17SVictor Perevertkin // UserControlOfIdleSettings is set to IdleAllowUserControl, the user's 876*8a978a17SVictor Perevertkin // settings will override the default. 877*8a978a17SVictor Perevertkin // 878*8a978a17SVictor Perevertkin WDF_TRI_STATE Enabled; 879*8a978a17SVictor Perevertkin 880*8a978a17SVictor Perevertkin // 881*8a978a17SVictor Perevertkin // This field is applicable only when IdleCaps == IdleCannotWakeFromS0 882*8a978a17SVictor Perevertkin // If WdfTrue,device is powered up on System Wake even if device is idle 883*8a978a17SVictor Perevertkin // If WdfFalse, device is not powered up on system wake if it is idle 884*8a978a17SVictor Perevertkin // If WdfUseDefault, the behavior is same as WdfFalse 885*8a978a17SVictor Perevertkin // 886*8a978a17SVictor Perevertkin WDF_TRI_STATE PowerUpIdleDeviceOnSystemWake; 887*8a978a17SVictor Perevertkin 888*8a978a17SVictor Perevertkin // 889*8a978a17SVictor Perevertkin // This field determines how the IdleTimeout field is used. 890*8a978a17SVictor Perevertkin // 891*8a978a17SVictor Perevertkin // If the value is DriverManagedIdleTimeout, then the idle timeout value 892*8a978a17SVictor Perevertkin // is determined by the IdleTimeout field of this structure. 893*8a978a17SVictor Perevertkin // 894*8a978a17SVictor Perevertkin // If the value is SystemManagedIdleTimeout, then the timeout value is 895*8a978a17SVictor Perevertkin // determined by the power framework (PoFx) on operating systems where 896*8a978a17SVictor Perevertkin // the PoFx is available (i.e. Windows 8 and later). The IdleTimeout field 897*8a978a17SVictor Perevertkin // is ignored on these operating systems. On operating systems where the 898*8a978a17SVictor Perevertkin // PoFx is not available, the behavior is same as DriverManagedIdleTimeout. 899*8a978a17SVictor Perevertkin // 900*8a978a17SVictor Perevertkin // If the value is SystemManagedIdleTimeoutWithHint, then the timeout value 901*8a978a17SVictor Perevertkin // is determined by the power framework (PoFx) on operating systems where 902*8a978a17SVictor Perevertkin // the PoFx is available (i.e. Windows 8 and later). In addition, the value 903*8a978a17SVictor Perevertkin // specified in the IdleTimeout field is provided as a hint to the PoFx in 904*8a978a17SVictor Perevertkin // determining when the device should be allowed to enter a low-power state. 905*8a978a17SVictor Perevertkin // Since it is only a hint, the actual duration after which the PoFx allows 906*8a978a17SVictor Perevertkin // the device to enter a low-power state might be greater than or less than 907*8a978a17SVictor Perevertkin // the IdleTimeout value. On operating systems where the PoFx is not 908*8a978a17SVictor Perevertkin // available, the behavior is same as DriverManagedIdleTimeout. 909*8a978a17SVictor Perevertkin // 910*8a978a17SVictor Perevertkin WDF_POWER_POLICY_IDLE_TIMEOUT_TYPE IdleTimeoutType; 911*8a978a17SVictor Perevertkin 912*8a978a17SVictor Perevertkin // 913*8a978a17SVictor Perevertkin // This field forces the device to avoid idling in the D3cold power state. 914*8a978a17SVictor Perevertkin // WDF will ensure, with help from the bus drivers, that the device will 915*8a978a17SVictor Perevertkin // idle in a D-state that can successfully generate a wake signal, if 916*8a978a17SVictor Perevertkin // necessary. If the client specifies that DxState == PowerDeviceD3, this 917*8a978a17SVictor Perevertkin // setting allows the client to distinguish betwen D3hot and D3cold. If 918*8a978a17SVictor Perevertkin // the client sets DxState == PowerDeviceMaximum, then WDF will pick the 919*8a978a17SVictor Perevertkin // deepest idle state identified by the bus driver. If that deepest state 920*8a978a17SVictor Perevertkin // is D3cold, this field allows the client to override that and choose 921*8a978a17SVictor Perevertkin // D3hot. 922*8a978a17SVictor Perevertkin // 923*8a978a17SVictor Perevertkin // If WdfTrue, device will not use D3cold in S0. 924*8a978a17SVictor Perevertkin // If WdfFalse, device will use D3cold in S0 if the ACPI firmware indicates 925*8a978a17SVictor Perevertkin // that the device can enter that state, if DxState above does not 926*8a978a17SVictor Perevertkin // specify some other D-state and, if the device is armed for 927*8a978a17SVictor Perevertkin // wake, that it can generate its wake signal from D3cold. 928*8a978a17SVictor Perevertkin // If WdfUseDefault, this setting will be derived from the driver's INF, 929*8a978a17SVictor Perevertkin // specifically the presence or absence of the following two lines in 930*8a978a17SVictor Perevertkin // the DDInstall.HW section: 931*8a978a17SVictor Perevertkin // Include=machine.inf 932*8a978a17SVictor Perevertkin // Needs=PciD3ColdSupported 933*8a978a17SVictor Perevertkin // 934*8a978a17SVictor Perevertkin WDF_TRI_STATE ExcludeD3Cold; 935*8a978a17SVictor Perevertkin 936*8a978a17SVictor Perevertkin } WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS_V1_13, *PWDF_DEVICE_POWER_POLICY_IDLE_SETTINGS_V1_13; 937*8a978a17SVictor Perevertkin 938*8a978a17SVictor Perevertkin typedef struct _WDF_DEVICE_POWER_POLICY_WAKE_SETTINGS_V1_13 { 939*8a978a17SVictor Perevertkin // 940*8a978a17SVictor Perevertkin // Size of this structure in bytes 941*8a978a17SVictor Perevertkin // 942*8a978a17SVictor Perevertkin ULONG Size; 943*8a978a17SVictor Perevertkin 944*8a978a17SVictor Perevertkin // 945*8a978a17SVictor Perevertkin // The low power state in which the device will be placed when it is armed 946*8a978a17SVictor Perevertkin // for wake from Sx. 947*8a978a17SVictor Perevertkin // 948*8a978a17SVictor Perevertkin DEVICE_POWER_STATE DxState; 949*8a978a17SVictor Perevertkin 950*8a978a17SVictor Perevertkin // 951*8a978a17SVictor Perevertkin // Inidcates whether a user can control the idle policy of the device. 952*8a978a17SVictor Perevertkin // By default, a user is allowed to change the policy. 953*8a978a17SVictor Perevertkin // 954*8a978a17SVictor Perevertkin WDF_POWER_POLICY_SX_WAKE_USER_CONTROL UserControlOfWakeSettings; 955*8a978a17SVictor Perevertkin 956*8a978a17SVictor Perevertkin // 957*8a978a17SVictor Perevertkin // If WdfTrue, arming the device for wake while the machine is in Sx is 958*8a978a17SVictor Perevertkin // enabled. 959*8a978a17SVictor Perevertkin // 960*8a978a17SVictor Perevertkin // If WdfFalse, arming the device for wake while the machine is in Sx is 961*8a978a17SVictor Perevertkin // disabled. 962*8a978a17SVictor Perevertkin // 963*8a978a17SVictor Perevertkin // If WdfUseDefault, arming will be enabled. If UserControlOfWakeSettings 964*8a978a17SVictor Perevertkin // is set to WakeAllowUserControl, the user's settings will override the 965*8a978a17SVictor Perevertkin // default. 966*8a978a17SVictor Perevertkin // 967*8a978a17SVictor Perevertkin WDF_TRI_STATE Enabled; 968*8a978a17SVictor Perevertkin 969*8a978a17SVictor Perevertkin // 970*8a978a17SVictor Perevertkin // If set to TRUE, arming the parent device can depend on whether there 971*8a978a17SVictor Perevertkin // is atleast one child device armed for wake. 972*8a978a17SVictor Perevertkin // 973*8a978a17SVictor Perevertkin // If set to FALSE, arming of the parent device will be independent of 974*8a978a17SVictor Perevertkin // whether any of the child devices are armed for wake. 975*8a978a17SVictor Perevertkin // 976*8a978a17SVictor Perevertkin BOOLEAN ArmForWakeIfChildrenAreArmedForWake; 977*8a978a17SVictor Perevertkin 978*8a978a17SVictor Perevertkin // 979*8a978a17SVictor Perevertkin // Indicates that whenever the parent device completes the wake irp 980*8a978a17SVictor Perevertkin // successfully, the status needs to be also propagated to the child 981*8a978a17SVictor Perevertkin // devices. This helps in tracking which devices were responsible for 982*8a978a17SVictor Perevertkin // waking the system. 983*8a978a17SVictor Perevertkin // 984*8a978a17SVictor Perevertkin BOOLEAN IndicateChildWakeOnParentWake; 985*8a978a17SVictor Perevertkin 986*8a978a17SVictor Perevertkin } WDF_DEVICE_POWER_POLICY_WAKE_SETTINGS_V1_13, *PWDF_DEVICE_POWER_POLICY_WAKE_SETTINGS_V1_13; 987*8a978a17SVictor Perevertkin 988*8a978a17SVictor Perevertkin typedef struct _WDF_DEVICE_STATE_V1_13 { 989*8a978a17SVictor Perevertkin // 990*8a978a17SVictor Perevertkin // Size of this structure in bytes 991*8a978a17SVictor Perevertkin // 992*8a978a17SVictor Perevertkin ULONG Size; 993*8a978a17SVictor Perevertkin 994*8a978a17SVictor Perevertkin // 995*8a978a17SVictor Perevertkin // If set to WdfTrue, the device will be disabled 996*8a978a17SVictor Perevertkin // 997*8a978a17SVictor Perevertkin WDF_TRI_STATE Disabled; 998*8a978a17SVictor Perevertkin 999*8a978a17SVictor Perevertkin // 1000*8a978a17SVictor Perevertkin // If set to WdfTrue, the device will not be displayed in device manager. 1001*8a978a17SVictor Perevertkin // Once hidden, the device cannot be unhidden. 1002*8a978a17SVictor Perevertkin // 1003*8a978a17SVictor Perevertkin WDF_TRI_STATE DontDisplayInUI; 1004*8a978a17SVictor Perevertkin 1005*8a978a17SVictor Perevertkin // 1006*8a978a17SVictor Perevertkin // If set to WdfTrue, the device is reporting itself as failed. If set 1007*8a978a17SVictor Perevertkin // in conjuction with ResourcesChanged to WdfTrue, the device will receive 1008*8a978a17SVictor Perevertkin // a PnP stop and then a new PnP start device. 1009*8a978a17SVictor Perevertkin // 1010*8a978a17SVictor Perevertkin WDF_TRI_STATE Failed; 1011*8a978a17SVictor Perevertkin 1012*8a978a17SVictor Perevertkin // 1013*8a978a17SVictor Perevertkin // If set to WdfTrue, the device cannot be subsequently disabled. 1014*8a978a17SVictor Perevertkin // 1015*8a978a17SVictor Perevertkin WDF_TRI_STATE NotDisableable; 1016*8a978a17SVictor Perevertkin 1017*8a978a17SVictor Perevertkin 1018*8a978a17SVictor Perevertkin 1019*8a978a17SVictor Perevertkin 1020*8a978a17SVictor Perevertkin // 1021*8a978a17SVictor Perevertkin // 1022*8a978a17SVictor Perevertkin // If set to WdfTrue, the device stack will be torn down. 1023*8a978a17SVictor Perevertkin // 1024*8a978a17SVictor Perevertkin WDF_TRI_STATE Removed; 1025*8a978a17SVictor Perevertkin 1026*8a978a17SVictor Perevertkin // 1027*8a978a17SVictor Perevertkin // If set to WdfTrue, the device will be sent another PnP start. If the 1028*8a978a17SVictor Perevertkin // Failed field is set to WdfTrue as well, a PnP stop will be sent before 1029*8a978a17SVictor Perevertkin // the start. 1030*8a978a17SVictor Perevertkin // 1031*8a978a17SVictor Perevertkin WDF_TRI_STATE ResourcesChanged; 1032*8a978a17SVictor Perevertkin 1033*8a978a17SVictor Perevertkin } WDF_DEVICE_STATE_V1_13, *PWDF_DEVICE_STATE_V1_13; 1034*8a978a17SVictor Perevertkin 1035*8a978a17SVictor Perevertkin typedef struct _WDF_DEVICE_PNP_CAPABILITIES_V1_13 { 1036*8a978a17SVictor Perevertkin // 1037*8a978a17SVictor Perevertkin // Size of the structure in bytes 1038*8a978a17SVictor Perevertkin // 1039*8a978a17SVictor Perevertkin ULONG Size; 1040*8a978a17SVictor Perevertkin 1041*8a978a17SVictor Perevertkin // 1042*8a978a17SVictor Perevertkin // NOTE: To mark a PDO as raw, call WdfPdoInitAssignRawDevice 1043*8a978a17SVictor Perevertkin // 1044*8a978a17SVictor Perevertkin // 1045*8a978a17SVictor Perevertkin WDF_TRI_STATE LockSupported; 1046*8a978a17SVictor Perevertkin 1047*8a978a17SVictor Perevertkin WDF_TRI_STATE EjectSupported; 1048*8a978a17SVictor Perevertkin 1049*8a978a17SVictor Perevertkin WDF_TRI_STATE Removable; 1050*8a978a17SVictor Perevertkin 1051*8a978a17SVictor Perevertkin WDF_TRI_STATE DockDevice; 1052*8a978a17SVictor Perevertkin 1053*8a978a17SVictor Perevertkin WDF_TRI_STATE UniqueID; 1054*8a978a17SVictor Perevertkin 1055*8a978a17SVictor Perevertkin WDF_TRI_STATE SilentInstall; 1056*8a978a17SVictor Perevertkin 1057*8a978a17SVictor Perevertkin WDF_TRI_STATE SurpriseRemovalOK; 1058*8a978a17SVictor Perevertkin 1059*8a978a17SVictor Perevertkin WDF_TRI_STATE HardwareDisabled; 1060*8a978a17SVictor Perevertkin 1061*8a978a17SVictor Perevertkin WDF_TRI_STATE NoDisplayInUI; 1062*8a978a17SVictor Perevertkin 1063*8a978a17SVictor Perevertkin // 1064*8a978a17SVictor Perevertkin // Default values of -1 indicate not to set this value 1065*8a978a17SVictor Perevertkin // 1066*8a978a17SVictor Perevertkin ULONG Address; 1067*8a978a17SVictor Perevertkin 1068*8a978a17SVictor Perevertkin ULONG UINumber; 1069*8a978a17SVictor Perevertkin 1070*8a978a17SVictor Perevertkin } WDF_DEVICE_PNP_CAPABILITIES_V1_13, *PWDF_DEVICE_PNP_CAPABILITIES_V1_13; 1071*8a978a17SVictor Perevertkin 1072*8a978a17SVictor Perevertkin typedef struct _WDF_DEVICE_POWER_CAPABILITIES_V1_13 { 1073*8a978a17SVictor Perevertkin // 1074*8a978a17SVictor Perevertkin // Size of the structure in bytes 1075*8a978a17SVictor Perevertkin // 1076*8a978a17SVictor Perevertkin ULONG Size; 1077*8a978a17SVictor Perevertkin 1078*8a978a17SVictor Perevertkin WDF_TRI_STATE DeviceD1; 1079*8a978a17SVictor Perevertkin 1080*8a978a17SVictor Perevertkin WDF_TRI_STATE DeviceD2; 1081*8a978a17SVictor Perevertkin 1082*8a978a17SVictor Perevertkin WDF_TRI_STATE WakeFromD0; 1083*8a978a17SVictor Perevertkin 1084*8a978a17SVictor Perevertkin WDF_TRI_STATE WakeFromD1; 1085*8a978a17SVictor Perevertkin 1086*8a978a17SVictor Perevertkin WDF_TRI_STATE WakeFromD2; 1087*8a978a17SVictor Perevertkin 1088*8a978a17SVictor Perevertkin WDF_TRI_STATE WakeFromD3; 1089*8a978a17SVictor Perevertkin 1090*8a978a17SVictor Perevertkin // 1091*8a978a17SVictor Perevertkin // Default value PowerDeviceMaximum indicates not to set this value 1092*8a978a17SVictor Perevertkin // 1093*8a978a17SVictor Perevertkin DEVICE_POWER_STATE DeviceState[PowerSystemMaximum]; 1094*8a978a17SVictor Perevertkin 1095*8a978a17SVictor Perevertkin // 1096*8a978a17SVictor Perevertkin // Default value PowerDeviceMaximum, PowerSystemMaximum indicates not to 1097*8a978a17SVictor Perevertkin // set this value. 1098*8a978a17SVictor Perevertkin // 1099*8a978a17SVictor Perevertkin DEVICE_POWER_STATE DeviceWake; 1100*8a978a17SVictor Perevertkin 1101*8a978a17SVictor Perevertkin SYSTEM_POWER_STATE SystemWake; 1102*8a978a17SVictor Perevertkin 1103*8a978a17SVictor Perevertkin // 1104*8a978a17SVictor Perevertkin // Default values of -1 indicate not to set this value 1105*8a978a17SVictor Perevertkin // 1106*8a978a17SVictor Perevertkin ULONG D1Latency; 1107*8a978a17SVictor Perevertkin 1108*8a978a17SVictor Perevertkin ULONG D2Latency; 1109*8a978a17SVictor Perevertkin 1110*8a978a17SVictor Perevertkin ULONG D3Latency; 1111*8a978a17SVictor Perevertkin 1112*8a978a17SVictor Perevertkin // 1113*8a978a17SVictor Perevertkin // Ideal Dx state for the device to be put into when the machine moves into 1114*8a978a17SVictor Perevertkin // Sx and the device is not armed for wake. By default, the default will be 1115*8a978a17SVictor Perevertkin // placed into D3. If IdealDxStateForSx is lighter then 1116*8a978a17SVictor Perevertkin // DeviceState[Sx], then DeviceState[Sx] will be used as the Dx state. 1117*8a978a17SVictor Perevertkin // 1118*8a978a17SVictor Perevertkin DEVICE_POWER_STATE IdealDxStateForSx; 1119*8a978a17SVictor Perevertkin 1120*8a978a17SVictor Perevertkin } WDF_DEVICE_POWER_CAPABILITIES_V1_13, *PWDF_DEVICE_POWER_CAPABILITIES_V1_13; 1121*8a978a17SVictor Perevertkin 1122*8a978a17SVictor Perevertkin typedef struct _WDF_REMOVE_LOCK_OPTIONS_V1_13 { 1123*8a978a17SVictor Perevertkin // 1124*8a978a17SVictor Perevertkin // Size of the structure in bytes 1125*8a978a17SVictor Perevertkin // 1126*8a978a17SVictor Perevertkin ULONG Size; 1127*8a978a17SVictor Perevertkin 1128*8a978a17SVictor Perevertkin // 1129*8a978a17SVictor Perevertkin // Bit field combination of values from the WDF_REMOVE_LOCK_OPTIONS_FLAGS 1130*8a978a17SVictor Perevertkin // enumeration 1131*8a978a17SVictor Perevertkin // 1132*8a978a17SVictor Perevertkin ULONG Flags; 1133*8a978a17SVictor Perevertkin 1134*8a978a17SVictor Perevertkin } WDF_REMOVE_LOCK_OPTIONS_V1_13, *PWDF_REMOVE_LOCK_OPTIONS_V1_13; 1135*8a978a17SVictor Perevertkin 1136*8a978a17SVictor Perevertkin typedef struct _WDF_POWER_FRAMEWORK_SETTINGS_V1_13 { 1137*8a978a17SVictor Perevertkin // 1138*8a978a17SVictor Perevertkin // Size of the structure, in bytes. 1139*8a978a17SVictor Perevertkin // 1140*8a978a17SVictor Perevertkin ULONG Size; 1141*8a978a17SVictor Perevertkin 1142*8a978a17SVictor Perevertkin // 1143*8a978a17SVictor Perevertkin // Client driver's callback function that is invoked after KMDF has 1144*8a978a17SVictor Perevertkin // registered with the power framework. This field can be NULL if the 1145*8a978a17SVictor Perevertkin // client driver does not wish to specify this callback. 1146*8a978a17SVictor Perevertkin // 1147*8a978a17SVictor Perevertkin PFN_WDFDEVICE_WDM_POST_PO_FX_REGISTER_DEVICE EvtDeviceWdmPostPoFxRegisterDevice; 1148*8a978a17SVictor Perevertkin 1149*8a978a17SVictor Perevertkin // 1150*8a978a17SVictor Perevertkin // Client driver's callback function that is invoked before KMDF 1151*8a978a17SVictor Perevertkin // unregisters with the power framework. This field can be NULL if the 1152*8a978a17SVictor Perevertkin // client driver does not wish to specify this callback. 1153*8a978a17SVictor Perevertkin // 1154*8a978a17SVictor Perevertkin PFN_WDFDEVICE_WDM_PRE_PO_FX_UNREGISTER_DEVICE EvtDeviceWdmPrePoFxUnregisterDevice; 1155*8a978a17SVictor Perevertkin 1156*8a978a17SVictor Perevertkin // 1157*8a978a17SVictor Perevertkin // Pointer to a PO_FX_COMPONENT structure that describes the only component 1158*8a978a17SVictor Perevertkin // in the single-component device. This field can be NULL if the client 1159*8a978a17SVictor Perevertkin // driver wants KMDF to use the default specification for this component 1160*8a978a17SVictor Perevertkin // (i.e. support for F0 only). 1161*8a978a17SVictor Perevertkin // 1162*8a978a17SVictor Perevertkin PPO_FX_COMPONENT Component; 1163*8a978a17SVictor Perevertkin 1164*8a978a17SVictor Perevertkin // 1165*8a978a17SVictor Perevertkin // Client driver's PO_FX_COMPONENT_ACTIVE_CONDITION_CALLBACK callback 1166*8a978a17SVictor Perevertkin // function. This field can be NULL if the client driver does not wish to 1167*8a978a17SVictor Perevertkin // specify this callback. 1168*8a978a17SVictor Perevertkin // 1169*8a978a17SVictor Perevertkin PPO_FX_COMPONENT_ACTIVE_CONDITION_CALLBACK ComponentActiveConditionCallback; 1170*8a978a17SVictor Perevertkin 1171*8a978a17SVictor Perevertkin // 1172*8a978a17SVictor Perevertkin // Client driver's PO_FX_COMPONENT_IDLE_CONDITION_CALLBACK callback 1173*8a978a17SVictor Perevertkin // function. This field can be NULL if the client driver does not wish to 1174*8a978a17SVictor Perevertkin // specify this callback. 1175*8a978a17SVictor Perevertkin // 1176*8a978a17SVictor Perevertkin PPO_FX_COMPONENT_IDLE_CONDITION_CALLBACK ComponentIdleConditionCallback; 1177*8a978a17SVictor Perevertkin 1178*8a978a17SVictor Perevertkin // 1179*8a978a17SVictor Perevertkin // Client driver's PO_FX_COMPONENT_IDLE_STATE_CALLBACK callback function. 1180*8a978a17SVictor Perevertkin // This field can be NULL if the client driver does not wish to specify 1181*8a978a17SVictor Perevertkin // this callback. 1182*8a978a17SVictor Perevertkin // 1183*8a978a17SVictor Perevertkin PPO_FX_COMPONENT_IDLE_STATE_CALLBACK ComponentIdleStateCallback; 1184*8a978a17SVictor Perevertkin 1185*8a978a17SVictor Perevertkin // 1186*8a978a17SVictor Perevertkin // Client driver's PO_FX_POWER_CONTROL_CALLBACK callback function. This 1187*8a978a17SVictor Perevertkin // field can be NULL if the client driver does not wish to specify this 1188*8a978a17SVictor Perevertkin // callback. 1189*8a978a17SVictor Perevertkin // 1190*8a978a17SVictor Perevertkin PPO_FX_POWER_CONTROL_CALLBACK PowerControlCallback; 1191*8a978a17SVictor Perevertkin 1192*8a978a17SVictor Perevertkin // 1193*8a978a17SVictor Perevertkin // Context value that is passed in to the ComponentIdleStateCallback and 1194*8a978a17SVictor Perevertkin // PowerControlCallback callback functions. 1195*8a978a17SVictor Perevertkin // 1196*8a978a17SVictor Perevertkin PVOID PoFxDeviceContext; 1197*8a978a17SVictor Perevertkin 1198*8a978a17SVictor Perevertkin } WDF_POWER_FRAMEWORK_SETTINGS_V1_13, *PWDF_POWER_FRAMEWORK_SETTINGS_V1_13; 1199*8a978a17SVictor Perevertkin 1200*8a978a17SVictor Perevertkin typedef struct _WDF_IO_TYPE_CONFIG_V1_13 { 1201*8a978a17SVictor Perevertkin // 1202*8a978a17SVictor Perevertkin // Size of this structure in bytes 1203*8a978a17SVictor Perevertkin // 1204*8a978a17SVictor Perevertkin ULONG Size; 1205*8a978a17SVictor Perevertkin 1206*8a978a17SVictor Perevertkin // 1207*8a978a17SVictor Perevertkin // <KMDF_DOC/> 1208*8a978a17SVictor Perevertkin // Identifies the method that the driver will use to access data buffers 1209*8a978a17SVictor Perevertkin // that it receives for read and write requests. 1210*8a978a17SVictor Perevertkin // 1211*8a978a17SVictor Perevertkin // <UMDF_DOC/> 1212*8a978a17SVictor Perevertkin // Identifies the method that the driver will "prefer" to use to access data 1213*8a978a17SVictor Perevertkin // buffers that it receives for read and write requests. Note that UMDF 1214*8a978a17SVictor Perevertkin // driver provides just a preference, and not a guarantee.Therefore, 1215*8a978a17SVictor Perevertkin // even if a driver specified direct access method, UMDF might use the 1216*8a978a17SVictor Perevertkin // buffered access method for one or more of the device's requests to 1217*8a978a17SVictor Perevertkin // improve performance. For example, UMDF uses buffered access for small 1218*8a978a17SVictor Perevertkin // buffers, if it can copy the data to the driver's buffer faster than it 1219*8a978a17SVictor Perevertkin // can map the buffers for direct access. 1220*8a978a17SVictor Perevertkin // 1221*8a978a17SVictor Perevertkin WDF_DEVICE_IO_TYPE ReadWriteIoType; 1222*8a978a17SVictor Perevertkin 1223*8a978a17SVictor Perevertkin // 1224*8a978a17SVictor Perevertkin // <UMDF_ONLY/> 1225*8a978a17SVictor Perevertkin // Identifies the method that the driver will "prefer" to use to access data 1226*8a978a17SVictor Perevertkin // buffers that it receives for IOCTL requests. Note that UMDF 1227*8a978a17SVictor Perevertkin // driver provides just a preference, and not a guarantee. Therefore, 1228*8a978a17SVictor Perevertkin // even if a driver specified direct access method, UMDF might use the 1229*8a978a17SVictor Perevertkin // buffered access method for one or more of the device's requests to 1230*8a978a17SVictor Perevertkin // improve performance. For example, UMDF uses buffered access for small 1231*8a978a17SVictor Perevertkin // buffers, if it can copy the data to the driver's buffer faster than it 1232*8a978a17SVictor Perevertkin // can map the buffers for direct access. 1233*8a978a17SVictor Perevertkin // 1234*8a978a17SVictor Perevertkin WDF_DEVICE_IO_TYPE DeviceControlIoType; 1235*8a978a17SVictor Perevertkin 1236*8a978a17SVictor Perevertkin // 1237*8a978a17SVictor Perevertkin // <UMDF_ONLY/> 1238*8a978a17SVictor Perevertkin // Optional, Provides the smallest buffer size (in bytes) for which 1239*8a978a17SVictor Perevertkin // UMDF will use direct access for the buffers. For example, set 1240*8a978a17SVictor Perevertkin // DirectTransferThreshold to "12288" to indicate that UMDF should use buffered 1241*8a978a17SVictor Perevertkin // access for all buffers that are smaller than 12 kilobytes, and direct 1242*8a978a17SVictor Perevertkin // access for buffers equal to or greater than that. Typically, you 1243*8a978a17SVictor Perevertkin // do not need to provide this value because UMDF uses a value that provides 1244*8a978a17SVictor Perevertkin // the best performance. Note that there are other requirements that must be 1245*8a978a17SVictor Perevertkin // met in order to get direct access of buffers. See Docs for details. 1246*8a978a17SVictor Perevertkin // 1247*8a978a17SVictor Perevertkin ULONG DirectTransferThreshold; 1248*8a978a17SVictor Perevertkin 1249*8a978a17SVictor Perevertkin } WDF_IO_TYPE_CONFIG_V1_13, *PWDF_IO_TYPE_CONFIG_V1_13; 1250*8a978a17SVictor Perevertkin 1251*8a978a17SVictor Perevertkin typedef struct _WDF_DEVICE_PROPERTY_DATA_V1_13 { 1252*8a978a17SVictor Perevertkin // 1253*8a978a17SVictor Perevertkin // Size of this structure 1254*8a978a17SVictor Perevertkin // 1255*8a978a17SVictor Perevertkin _In_ ULONG Size; 1256*8a978a17SVictor Perevertkin 1257*8a978a17SVictor Perevertkin // 1258*8a978a17SVictor Perevertkin // A pointer to a DEVPROPKEY structure that specifies the device 1259*8a978a17SVictor Perevertkin // property key. 1260*8a978a17SVictor Perevertkin // 1261*8a978a17SVictor Perevertkin _In_ const DEVPROPKEY * PropertyKey; 1262*8a978a17SVictor Perevertkin 1263*8a978a17SVictor Perevertkin // 1264*8a978a17SVictor Perevertkin // A locale identifier. Set this parameter either to a language-specific 1265*8a978a17SVictor Perevertkin // LCID value or to LOCALE_NEUTRAL. The LOCALE_NEUTRAL LCID specifies 1266*8a978a17SVictor Perevertkin // that the property is language-neutral (that is, not specific to any 1267*8a978a17SVictor Perevertkin // language). Do not set this parameter to LOCALE_SYSTEM_DEFAULT or 1268*8a978a17SVictor Perevertkin // LOCALE_USER_DEFAULT. For more information about language-specific 1269*8a978a17SVictor Perevertkin // LCID values, see LCID Structure. 1270*8a978a17SVictor Perevertkin // 1271*8a978a17SVictor Perevertkin _In_ LCID Lcid; 1272*8a978a17SVictor Perevertkin 1273*8a978a17SVictor Perevertkin // 1274*8a978a17SVictor Perevertkin // Set this parameter to PLUGPLAY_PROPERTY_PERSISTENT if the property 1275*8a978a17SVictor Perevertkin // value set by this routine should persist across computer restarts. 1276*8a978a17SVictor Perevertkin // Otherwise, set Flags to zero. Ignored for Query DDIs. 1277*8a978a17SVictor Perevertkin // 1278*8a978a17SVictor Perevertkin _In_ ULONG Flags; 1279*8a978a17SVictor Perevertkin 1280*8a978a17SVictor Perevertkin } WDF_DEVICE_PROPERTY_DATA_V1_13, *PWDF_DEVICE_PROPERTY_DATA_V1_13; 1281*8a978a17SVictor Perevertkin 1282*8a978a17SVictor Perevertkin // End of versioning of structures for wdfDevice.h 1283*8a978a17SVictor Perevertkin 1284*8a978a17SVictor Perevertkin // 1285*8a978a17SVictor Perevertkin // Versioning of structures for wdfDmaEnabler.h 1286*8a978a17SVictor Perevertkin // 1287*8a978a17SVictor Perevertkin typedef struct _WDF_DMA_ENABLER_CONFIG_V1_13 { 1288*8a978a17SVictor Perevertkin // 1289*8a978a17SVictor Perevertkin // Size of this structure in bytes 1290*8a978a17SVictor Perevertkin // 1291*8a978a17SVictor Perevertkin ULONG Size; 1292*8a978a17SVictor Perevertkin 1293*8a978a17SVictor Perevertkin // 1294*8a978a17SVictor Perevertkin // One of the above WDF_DMA_PROFILES 1295*8a978a17SVictor Perevertkin // 1296*8a978a17SVictor Perevertkin WDF_DMA_PROFILE Profile; 1297*8a978a17SVictor Perevertkin 1298*8a978a17SVictor Perevertkin // 1299*8a978a17SVictor Perevertkin // Maximum DMA Transfer handled in bytes. 1300*8a978a17SVictor Perevertkin // 1301*8a978a17SVictor Perevertkin size_t MaximumLength; 1302*8a978a17SVictor Perevertkin 1303*8a978a17SVictor Perevertkin // 1304*8a978a17SVictor Perevertkin // The various DMA PnP/Power event callbacks 1305*8a978a17SVictor Perevertkin // 1306*8a978a17SVictor Perevertkin PFN_WDF_DMA_ENABLER_FILL EvtDmaEnablerFill; 1307*8a978a17SVictor Perevertkin 1308*8a978a17SVictor Perevertkin PFN_WDF_DMA_ENABLER_FLUSH EvtDmaEnablerFlush; 1309*8a978a17SVictor Perevertkin 1310*8a978a17SVictor Perevertkin PFN_WDF_DMA_ENABLER_DISABLE EvtDmaEnablerDisable; 1311*8a978a17SVictor Perevertkin 1312*8a978a17SVictor Perevertkin PFN_WDF_DMA_ENABLER_ENABLE EvtDmaEnablerEnable; 1313*8a978a17SVictor Perevertkin 1314*8a978a17SVictor Perevertkin PFN_WDF_DMA_ENABLER_SELFMANAGED_IO_START EvtDmaEnablerSelfManagedIoStart; 1315*8a978a17SVictor Perevertkin 1316*8a978a17SVictor Perevertkin PFN_WDF_DMA_ENABLER_SELFMANAGED_IO_STOP EvtDmaEnablerSelfManagedIoStop; 1317*8a978a17SVictor Perevertkin 1318*8a978a17SVictor Perevertkin // 1319*8a978a17SVictor Perevertkin // Overrides the address width specified by the DMA profile. 1320*8a978a17SVictor Perevertkin // 1321*8a978a17SVictor Perevertkin ULONG AddressWidthOverride; 1322*8a978a17SVictor Perevertkin 1323*8a978a17SVictor Perevertkin // 1324*8a978a17SVictor Perevertkin // Overrides the version of the WDM DMA interfaces that WDF uses 1325*8a978a17SVictor Perevertkin // (0 for default). 1326*8a978a17SVictor Perevertkin // 1327*8a978a17SVictor Perevertkin ULONG WdmDmaVersionOverride; 1328*8a978a17SVictor Perevertkin 1329*8a978a17SVictor Perevertkin // 1330*8a978a17SVictor Perevertkin // Bit field combination of values from the WDF_DMA_ENABLER_CONFIG_FLAGS 1331*8a978a17SVictor Perevertkin // enumeration 1332*8a978a17SVictor Perevertkin // 1333*8a978a17SVictor Perevertkin ULONG Flags; 1334*8a978a17SVictor Perevertkin 1335*8a978a17SVictor Perevertkin } WDF_DMA_ENABLER_CONFIG_V1_13, *PWDF_DMA_ENABLER_CONFIG_V1_13; 1336*8a978a17SVictor Perevertkin 1337*8a978a17SVictor Perevertkin typedef struct _WDF_DMA_SYSTEM_PROFILE_CONFIG_V1_13 { 1338*8a978a17SVictor Perevertkin // 1339*8a978a17SVictor Perevertkin // The size of this structure in bytes 1340*8a978a17SVictor Perevertkin // 1341*8a978a17SVictor Perevertkin ULONG Size; 1342*8a978a17SVictor Perevertkin 1343*8a978a17SVictor Perevertkin // 1344*8a978a17SVictor Perevertkin // Specifies that the transfer is controlled by the device's DMA 1345*8a978a17SVictor Perevertkin // request line. 1346*8a978a17SVictor Perevertkin // 1347*8a978a17SVictor Perevertkin // 1348*8a978a17SVictor Perevertkin BOOLEAN DemandMode; 1349*8a978a17SVictor Perevertkin 1350*8a978a17SVictor Perevertkin // 1351*8a978a17SVictor Perevertkin // Specifies that the DMA engine will loop back to the beginning 1352*8a978a17SVictor Perevertkin // of the buffer once it reaches the end. 1353*8a978a17SVictor Perevertkin // 1354*8a978a17SVictor Perevertkin // 1355*8a978a17SVictor Perevertkin BOOLEAN LoopedTransfer; 1356*8a978a17SVictor Perevertkin 1357*8a978a17SVictor Perevertkin // 1358*8a978a17SVictor Perevertkin // Width of the register to DMA to/from 1359*8a978a17SVictor Perevertkin // 1360*8a978a17SVictor Perevertkin // 1361*8a978a17SVictor Perevertkin DMA_WIDTH DmaWidth; 1362*8a978a17SVictor Perevertkin 1363*8a978a17SVictor Perevertkin // 1364*8a978a17SVictor Perevertkin // The adress at which to write to the device 1365*8a978a17SVictor Perevertkin // 1366*8a978a17SVictor Perevertkin PHYSICAL_ADDRESS DeviceAddress; 1367*8a978a17SVictor Perevertkin 1368*8a978a17SVictor Perevertkin // 1369*8a978a17SVictor Perevertkin // The translated resource descriptor for the DMA channel assigned 1370*8a978a17SVictor Perevertkin // the device during EvtDevicePrepareHardware 1371*8a978a17SVictor Perevertkin // 1372*8a978a17SVictor Perevertkin PCM_PARTIAL_RESOURCE_DESCRIPTOR DmaDescriptor; 1373*8a978a17SVictor Perevertkin 1374*8a978a17SVictor Perevertkin } WDF_DMA_SYSTEM_PROFILE_CONFIG_V1_13, *PWDF_DMA_SYSTEM_PROFILE_CONFIG_V1_13; 1375*8a978a17SVictor Perevertkin 1376*8a978a17SVictor Perevertkin // End of versioning of structures for wdfDmaEnabler.h 1377*8a978a17SVictor Perevertkin 1378*8a978a17SVictor Perevertkin // 1379*8a978a17SVictor Perevertkin // Versioning of structures for wdfDmaTransaction.h 1380*8a978a17SVictor Perevertkin // 1381*8a978a17SVictor Perevertkin // End of versioning of structures for wdfDmaTransaction.h 1382*8a978a17SVictor Perevertkin 1383*8a978a17SVictor Perevertkin // 1384*8a978a17SVictor Perevertkin // Versioning of structures for wdfdpc.h 1385*8a978a17SVictor Perevertkin // 1386*8a978a17SVictor Perevertkin typedef struct _WDF_DPC_CONFIG_V1_13 { 1387*8a978a17SVictor Perevertkin ULONG Size; 1388*8a978a17SVictor Perevertkin 1389*8a978a17SVictor Perevertkin PFN_WDF_DPC EvtDpcFunc; 1390*8a978a17SVictor Perevertkin 1391*8a978a17SVictor Perevertkin // 1392*8a978a17SVictor Perevertkin // If this is TRUE, the DPC will automatically serialize 1393*8a978a17SVictor Perevertkin // with the event callback handlers of its Parent Object. 1394*8a978a17SVictor Perevertkin // 1395*8a978a17SVictor Perevertkin // Parent Object's callback constraints should be compatible 1396*8a978a17SVictor Perevertkin // with the DPC (DISPATCH_LEVEL), or the request will fail. 1397*8a978a17SVictor Perevertkin // 1398*8a978a17SVictor Perevertkin BOOLEAN AutomaticSerialization; 1399*8a978a17SVictor Perevertkin 1400*8a978a17SVictor Perevertkin } WDF_DPC_CONFIG_V1_13, *PWDF_DPC_CONFIG_V1_13; 1401*8a978a17SVictor Perevertkin 1402*8a978a17SVictor Perevertkin // End of versioning of structures for wdfdpc.h 1403*8a978a17SVictor Perevertkin 1404*8a978a17SVictor Perevertkin // 1405*8a978a17SVictor Perevertkin // Versioning of structures for wdfdriver.h 1406*8a978a17SVictor Perevertkin // 1407*8a978a17SVictor Perevertkin typedef struct _WDF_DRIVER_CONFIG_V1_13 { 1408*8a978a17SVictor Perevertkin // 1409*8a978a17SVictor Perevertkin // Size of this structure in bytes 1410*8a978a17SVictor Perevertkin // 1411*8a978a17SVictor Perevertkin ULONG Size; 1412*8a978a17SVictor Perevertkin 1413*8a978a17SVictor Perevertkin // 1414*8a978a17SVictor Perevertkin // Event callbacks 1415*8a978a17SVictor Perevertkin // 1416*8a978a17SVictor Perevertkin PFN_WDF_DRIVER_DEVICE_ADD EvtDriverDeviceAdd; 1417*8a978a17SVictor Perevertkin 1418*8a978a17SVictor Perevertkin PFN_WDF_DRIVER_UNLOAD EvtDriverUnload; 1419*8a978a17SVictor Perevertkin 1420*8a978a17SVictor Perevertkin // 1421*8a978a17SVictor Perevertkin // Combination of WDF_DRIVER_INIT_FLAGS values 1422*8a978a17SVictor Perevertkin // 1423*8a978a17SVictor Perevertkin ULONG DriverInitFlags; 1424*8a978a17SVictor Perevertkin 1425*8a978a17SVictor Perevertkin // 1426*8a978a17SVictor Perevertkin // Pool tag to use for all allocations made by the framework on behalf of 1427*8a978a17SVictor Perevertkin // the client driver. 1428*8a978a17SVictor Perevertkin // 1429*8a978a17SVictor Perevertkin ULONG DriverPoolTag; 1430*8a978a17SVictor Perevertkin 1431*8a978a17SVictor Perevertkin } WDF_DRIVER_CONFIG_V1_13, *PWDF_DRIVER_CONFIG_V1_13; 1432*8a978a17SVictor Perevertkin 1433*8a978a17SVictor Perevertkin typedef struct _WDF_DRIVER_VERSION_AVAILABLE_PARAMS_V1_13 { 1434*8a978a17SVictor Perevertkin // 1435*8a978a17SVictor Perevertkin // Size of the structure in bytes 1436*8a978a17SVictor Perevertkin // 1437*8a978a17SVictor Perevertkin ULONG Size; 1438*8a978a17SVictor Perevertkin 1439*8a978a17SVictor Perevertkin // 1440*8a978a17SVictor Perevertkin // Major Version requested 1441*8a978a17SVictor Perevertkin // 1442*8a978a17SVictor Perevertkin ULONG MajorVersion; 1443*8a978a17SVictor Perevertkin 1444*8a978a17SVictor Perevertkin // 1445*8a978a17SVictor Perevertkin // Minor Version requested 1446*8a978a17SVictor Perevertkin // 1447*8a978a17SVictor Perevertkin ULONG MinorVersion; 1448*8a978a17SVictor Perevertkin 1449*8a978a17SVictor Perevertkin } WDF_DRIVER_VERSION_AVAILABLE_PARAMS_V1_13, *PWDF_DRIVER_VERSION_AVAILABLE_PARAMS_V1_13; 1450*8a978a17SVictor Perevertkin 1451*8a978a17SVictor Perevertkin // End of versioning of structures for wdfdriver.h 1452*8a978a17SVictor Perevertkin 1453*8a978a17SVictor Perevertkin // 1454*8a978a17SVictor Perevertkin // Versioning of structures for wdffdo.h 1455*8a978a17SVictor Perevertkin // 1456*8a978a17SVictor Perevertkin typedef struct _WDF_FDO_EVENT_CALLBACKS_V1_13 { 1457*8a978a17SVictor Perevertkin // 1458*8a978a17SVictor Perevertkin // Size of this structure in bytes 1459*8a978a17SVictor Perevertkin // 1460*8a978a17SVictor Perevertkin ULONG Size; 1461*8a978a17SVictor Perevertkin 1462*8a978a17SVictor Perevertkin PFN_WDF_DEVICE_FILTER_RESOURCE_REQUIREMENTS EvtDeviceFilterAddResourceRequirements; 1463*8a978a17SVictor Perevertkin 1464*8a978a17SVictor Perevertkin PFN_WDF_DEVICE_FILTER_RESOURCE_REQUIREMENTS EvtDeviceFilterRemoveResourceRequirements; 1465*8a978a17SVictor Perevertkin 1466*8a978a17SVictor Perevertkin PFN_WDF_DEVICE_REMOVE_ADDED_RESOURCES EvtDeviceRemoveAddedResources; 1467*8a978a17SVictor Perevertkin 1468*8a978a17SVictor Perevertkin } WDF_FDO_EVENT_CALLBACKS_V1_13, *PWDF_FDO_EVENT_CALLBACKS_V1_13; 1469*8a978a17SVictor Perevertkin 1470*8a978a17SVictor Perevertkin // End of versioning of structures for wdffdo.h 1471*8a978a17SVictor Perevertkin 1472*8a978a17SVictor Perevertkin // 1473*8a978a17SVictor Perevertkin // Versioning of structures for wdffileobject.h 1474*8a978a17SVictor Perevertkin // 1475*8a978a17SVictor Perevertkin // End of versioning of structures for wdffileobject.h 1476*8a978a17SVictor Perevertkin 1477*8a978a17SVictor Perevertkin // 1478*8a978a17SVictor Perevertkin // Versioning of structures for wdfGlobals.h 1479*8a978a17SVictor Perevertkin // 1480*8a978a17SVictor Perevertkin typedef struct _WDF_DRIVER_GLOBALS_V1_13 { 1481*8a978a17SVictor Perevertkin // backpointer to the handle for this driver 1482*8a978a17SVictor Perevertkin WDFDRIVER Driver; 1483*8a978a17SVictor Perevertkin 1484*8a978a17SVictor Perevertkin // Flags indicated by the driver during create 1485*8a978a17SVictor Perevertkin ULONG DriverFlags; 1486*8a978a17SVictor Perevertkin 1487*8a978a17SVictor Perevertkin // Tag generated by WDF for the driver. Tag used by allocations made on 1488*8a978a17SVictor Perevertkin // behalf of the driver by WDF. 1489*8a978a17SVictor Perevertkin ULONG DriverTag; 1490*8a978a17SVictor Perevertkin 1491*8a978a17SVictor Perevertkin CHAR DriverName[WDF_DRIVER_GLOBALS_NAME_LEN]; 1492*8a978a17SVictor Perevertkin 1493*8a978a17SVictor Perevertkin // If TRUE, the stub code will capture DriverObject->DriverUnload and insert 1494*8a978a17SVictor Perevertkin // itself first in the unload chain. If FALSE, DriverUnload is left alone 1495*8a978a17SVictor Perevertkin // (but WDF will not be notified of unload and there will be no auto cleanup). 1496*8a978a17SVictor Perevertkin BOOLEAN DisplaceDriverUnload; 1497*8a978a17SVictor Perevertkin 1498*8a978a17SVictor Perevertkin } WDF_DRIVER_GLOBALS_V1_13, *PWDF_DRIVER_GLOBALS_V1_13; 1499*8a978a17SVictor Perevertkin 1500*8a978a17SVictor Perevertkin // End of versioning of structures for wdfGlobals.h 1501*8a978a17SVictor Perevertkin 1502*8a978a17SVictor Perevertkin // 1503*8a978a17SVictor Perevertkin // Versioning of structures for wdfhwaccess.h 1504*8a978a17SVictor Perevertkin // 1505*8a978a17SVictor Perevertkin // End of versioning of structures for wdfhwaccess.h 1506*8a978a17SVictor Perevertkin 1507*8a978a17SVictor Perevertkin // 1508*8a978a17SVictor Perevertkin // Versioning of structures for wdfinstaller.h 1509*8a978a17SVictor Perevertkin // 1510*8a978a17SVictor Perevertkin // End of versioning of structures for wdfinstaller.h 1511*8a978a17SVictor Perevertkin 1512*8a978a17SVictor Perevertkin // 1513*8a978a17SVictor Perevertkin // Versioning of structures for wdfinternal.h 1514*8a978a17SVictor Perevertkin // 1515*8a978a17SVictor Perevertkin // End of versioning of structures for wdfinternal.h 1516*8a978a17SVictor Perevertkin 1517*8a978a17SVictor Perevertkin // 1518*8a978a17SVictor Perevertkin // Versioning of structures for wdfinterrupt.h 1519*8a978a17SVictor Perevertkin // 1520*8a978a17SVictor Perevertkin // 1521*8a978a17SVictor Perevertkin // Interrupt Configuration Structure 1522*8a978a17SVictor Perevertkin // 1523*8a978a17SVictor Perevertkin typedef struct _WDF_INTERRUPT_CONFIG_V1_13 { 1524*8a978a17SVictor Perevertkin ULONG Size; 1525*8a978a17SVictor Perevertkin 1526*8a978a17SVictor Perevertkin // 1527*8a978a17SVictor Perevertkin // If this interrupt is to be synchronized with other interrupt(s) assigned 1528*8a978a17SVictor Perevertkin // to the same WDFDEVICE, create a WDFSPINLOCK and assign it to each of the 1529*8a978a17SVictor Perevertkin // WDFINTERRUPTs config. 1530*8a978a17SVictor Perevertkin // 1531*8a978a17SVictor Perevertkin WDFSPINLOCK SpinLock; 1532*8a978a17SVictor Perevertkin 1533*8a978a17SVictor Perevertkin WDF_TRI_STATE ShareVector; 1534*8a978a17SVictor Perevertkin 1535*8a978a17SVictor Perevertkin BOOLEAN FloatingSave; 1536*8a978a17SVictor Perevertkin 1537*8a978a17SVictor Perevertkin // 1538*8a978a17SVictor Perevertkin // DIRQL handling: automatic serialization of the DpcForIsr/WaitItemForIsr. 1539*8a978a17SVictor Perevertkin // Passive-level handling: automatic serialization of all callbacks. 1540*8a978a17SVictor Perevertkin // 1541*8a978a17SVictor Perevertkin BOOLEAN AutomaticSerialization; 1542*8a978a17SVictor Perevertkin 1543*8a978a17SVictor Perevertkin // 1544*8a978a17SVictor Perevertkin // Event Callbacks 1545*8a978a17SVictor Perevertkin // 1546*8a978a17SVictor Perevertkin PFN_WDF_INTERRUPT_ISR EvtInterruptIsr; 1547*8a978a17SVictor Perevertkin 1548*8a978a17SVictor Perevertkin PFN_WDF_INTERRUPT_DPC EvtInterruptDpc; 1549*8a978a17SVictor Perevertkin 1550*8a978a17SVictor Perevertkin PFN_WDF_INTERRUPT_ENABLE EvtInterruptEnable; 1551*8a978a17SVictor Perevertkin 1552*8a978a17SVictor Perevertkin PFN_WDF_INTERRUPT_DISABLE EvtInterruptDisable; 1553*8a978a17SVictor Perevertkin 1554*8a978a17SVictor Perevertkin PFN_WDF_INTERRUPT_WORKITEM EvtInterruptWorkItem; 1555*8a978a17SVictor Perevertkin 1556*8a978a17SVictor Perevertkin // 1557*8a978a17SVictor Perevertkin // These fields are only used when interrupt is created in 1558*8a978a17SVictor Perevertkin // EvtDevicePrepareHardware callback. 1559*8a978a17SVictor Perevertkin // 1560*8a978a17SVictor Perevertkin PCM_PARTIAL_RESOURCE_DESCRIPTOR InterruptRaw; 1561*8a978a17SVictor Perevertkin 1562*8a978a17SVictor Perevertkin PCM_PARTIAL_RESOURCE_DESCRIPTOR InterruptTranslated; 1563*8a978a17SVictor Perevertkin 1564*8a978a17SVictor Perevertkin // 1565*8a978a17SVictor Perevertkin // Optional passive lock for handling interrupts at passive-level. 1566*8a978a17SVictor Perevertkin // 1567*8a978a17SVictor Perevertkin WDFWAITLOCK WaitLock; 1568*8a978a17SVictor Perevertkin 1569*8a978a17SVictor Perevertkin // 1570*8a978a17SVictor Perevertkin // TRUE: handle interrupt at passive-level. 1571*8a978a17SVictor Perevertkin // FALSE: handle interrupt at DIRQL level. This is the default. 1572*8a978a17SVictor Perevertkin // 1573*8a978a17SVictor Perevertkin BOOLEAN PassiveHandling; 1574*8a978a17SVictor Perevertkin 1575*8a978a17SVictor Perevertkin // 1576*8a978a17SVictor Perevertkin // TRUE: Interrupt is reported inactive on explicit power down 1577*8a978a17SVictor Perevertkin // instead of disconnecting it. 1578*8a978a17SVictor Perevertkin // FALSE: Interrupt is disconnected instead of reporting inactive 1579*8a978a17SVictor Perevertkin // on explicit power down. 1580*8a978a17SVictor Perevertkin // DEFAULT: Framework decides the right value. 1581*8a978a17SVictor Perevertkin // 1582*8a978a17SVictor Perevertkin WDF_TRI_STATE ReportInactiveOnPowerDown; 1583*8a978a17SVictor Perevertkin 1584*8a978a17SVictor Perevertkin // 1585*8a978a17SVictor Perevertkin // TRUE: Interrupt is used to wake the device from low-power states 1586*8a978a17SVictor Perevertkin // and when the device is armed for wake this interrupt should 1587*8a978a17SVictor Perevertkin // remain connected. 1588*8a978a17SVictor Perevertkin // FALSE: Interrupt is not used to wake the device from low-power states. 1589*8a978a17SVictor Perevertkin // This is the default. 1590*8a978a17SVictor Perevertkin // 1591*8a978a17SVictor Perevertkin BOOLEAN CanWakeDevice; 1592*8a978a17SVictor Perevertkin 1593*8a978a17SVictor Perevertkin } WDF_INTERRUPT_CONFIG_V1_13, *PWDF_INTERRUPT_CONFIG_V1_13; 1594*8a978a17SVictor Perevertkin 1595*8a978a17SVictor Perevertkin typedef struct _WDF_INTERRUPT_INFO_V1_13 { 1596*8a978a17SVictor Perevertkin // 1597*8a978a17SVictor Perevertkin // Size of this structure in bytes 1598*8a978a17SVictor Perevertkin // 1599*8a978a17SVictor Perevertkin ULONG Size; 1600*8a978a17SVictor Perevertkin 1601*8a978a17SVictor Perevertkin ULONG64 Reserved1; 1602*8a978a17SVictor Perevertkin 1603*8a978a17SVictor Perevertkin KAFFINITY TargetProcessorSet; 1604*8a978a17SVictor Perevertkin 1605*8a978a17SVictor Perevertkin ULONG Reserved2; 1606*8a978a17SVictor Perevertkin 1607*8a978a17SVictor Perevertkin ULONG MessageNumber; 1608*8a978a17SVictor Perevertkin 1609*8a978a17SVictor Perevertkin ULONG Vector; 1610*8a978a17SVictor Perevertkin 1611*8a978a17SVictor Perevertkin KIRQL Irql; 1612*8a978a17SVictor Perevertkin 1613*8a978a17SVictor Perevertkin KINTERRUPT_MODE Mode; 1614*8a978a17SVictor Perevertkin 1615*8a978a17SVictor Perevertkin WDF_INTERRUPT_POLARITY Polarity; 1616*8a978a17SVictor Perevertkin 1617*8a978a17SVictor Perevertkin BOOLEAN MessageSignaled; 1618*8a978a17SVictor Perevertkin 1619*8a978a17SVictor Perevertkin // CM_SHARE_DISPOSITION 1620*8a978a17SVictor Perevertkin UCHAR ShareDisposition; 1621*8a978a17SVictor Perevertkin 1622*8a978a17SVictor Perevertkin DECLSPEC_ALIGN(8) USHORT Group; 1623*8a978a17SVictor Perevertkin 1624*8a978a17SVictor Perevertkin } WDF_INTERRUPT_INFO_V1_13, *PWDF_INTERRUPT_INFO_V1_13; 1625*8a978a17SVictor Perevertkin 1626*8a978a17SVictor Perevertkin // 1627*8a978a17SVictor Perevertkin // Interrupt Extended Policy Configuration Structure 1628*8a978a17SVictor Perevertkin // 1629*8a978a17SVictor Perevertkin typedef struct _WDF_INTERRUPT_EXTENDED_POLICY_V1_13 { 1630*8a978a17SVictor Perevertkin // 1631*8a978a17SVictor Perevertkin // Size of this structure in bytes 1632*8a978a17SVictor Perevertkin // 1633*8a978a17SVictor Perevertkin ULONG Size; 1634*8a978a17SVictor Perevertkin 1635*8a978a17SVictor Perevertkin WDF_INTERRUPT_POLICY Policy; 1636*8a978a17SVictor Perevertkin 1637*8a978a17SVictor Perevertkin WDF_INTERRUPT_PRIORITY Priority; 1638*8a978a17SVictor Perevertkin 1639*8a978a17SVictor Perevertkin GROUP_AFFINITY TargetProcessorSetAndGroup; 1640*8a978a17SVictor Perevertkin 1641*8a978a17SVictor Perevertkin } WDF_INTERRUPT_EXTENDED_POLICY_V1_13, *PWDF_INTERRUPT_EXTENDED_POLICY_V1_13; 1642*8a978a17SVictor Perevertkin 1643*8a978a17SVictor Perevertkin // End of versioning of structures for wdfinterrupt.h 1644*8a978a17SVictor Perevertkin 1645*8a978a17SVictor Perevertkin // 1646*8a978a17SVictor Perevertkin // Versioning of structures for wdfio.h 1647*8a978a17SVictor Perevertkin // 1648*8a978a17SVictor Perevertkin // 1649*8a978a17SVictor Perevertkin // This is the structure used to configure an IoQueue and 1650*8a978a17SVictor Perevertkin // register callback events to it. 1651*8a978a17SVictor Perevertkin // 1652*8a978a17SVictor Perevertkin // 1653*8a978a17SVictor Perevertkin typedef struct _WDF_IO_QUEUE_CONFIG_V1_13 { 1654*8a978a17SVictor Perevertkin ULONG Size; 1655*8a978a17SVictor Perevertkin 1656*8a978a17SVictor Perevertkin WDF_IO_QUEUE_DISPATCH_TYPE DispatchType; 1657*8a978a17SVictor Perevertkin 1658*8a978a17SVictor Perevertkin WDF_TRI_STATE PowerManaged; 1659*8a978a17SVictor Perevertkin 1660*8a978a17SVictor Perevertkin BOOLEAN AllowZeroLengthRequests; 1661*8a978a17SVictor Perevertkin 1662*8a978a17SVictor Perevertkin BOOLEAN DefaultQueue; 1663*8a978a17SVictor Perevertkin 1664*8a978a17SVictor Perevertkin PFN_WDF_IO_QUEUE_IO_DEFAULT EvtIoDefault; 1665*8a978a17SVictor Perevertkin 1666*8a978a17SVictor Perevertkin PFN_WDF_IO_QUEUE_IO_READ EvtIoRead; 1667*8a978a17SVictor Perevertkin 1668*8a978a17SVictor Perevertkin PFN_WDF_IO_QUEUE_IO_WRITE EvtIoWrite; 1669*8a978a17SVictor Perevertkin 1670*8a978a17SVictor Perevertkin PFN_WDF_IO_QUEUE_IO_DEVICE_CONTROL EvtIoDeviceControl; 1671*8a978a17SVictor Perevertkin 1672*8a978a17SVictor Perevertkin PFN_WDF_IO_QUEUE_IO_INTERNAL_DEVICE_CONTROL EvtIoInternalDeviceControl; 1673*8a978a17SVictor Perevertkin 1674*8a978a17SVictor Perevertkin PFN_WDF_IO_QUEUE_IO_STOP EvtIoStop; 1675*8a978a17SVictor Perevertkin 1676*8a978a17SVictor Perevertkin PFN_WDF_IO_QUEUE_IO_RESUME EvtIoResume; 1677*8a978a17SVictor Perevertkin 1678*8a978a17SVictor Perevertkin PFN_WDF_IO_QUEUE_IO_CANCELED_ON_QUEUE EvtIoCanceledOnQueue; 1679*8a978a17SVictor Perevertkin 1680*8a978a17SVictor Perevertkin union { 1681*8a978a17SVictor Perevertkin struct { 1682*8a978a17SVictor Perevertkin ULONG NumberOfPresentedRequests; 1683*8a978a17SVictor Perevertkin 1684*8a978a17SVictor Perevertkin } Parallel; 1685*8a978a17SVictor Perevertkin 1686*8a978a17SVictor Perevertkin } Settings; 1687*8a978a17SVictor Perevertkin 1688*8a978a17SVictor Perevertkin WDFDRIVER Driver; 1689*8a978a17SVictor Perevertkin 1690*8a978a17SVictor Perevertkin } WDF_IO_QUEUE_CONFIG_V1_13, *PWDF_IO_QUEUE_CONFIG_V1_13; 1691*8a978a17SVictor Perevertkin 1692*8a978a17SVictor Perevertkin typedef struct _WDF_IO_QUEUE_FORWARD_PROGRESS_POLICY_V1_13 { 1693*8a978a17SVictor Perevertkin ULONG Size; 1694*8a978a17SVictor Perevertkin 1695*8a978a17SVictor Perevertkin ULONG TotalForwardProgressRequests; 1696*8a978a17SVictor Perevertkin 1697*8a978a17SVictor Perevertkin // 1698*8a978a17SVictor Perevertkin // Specify the type of the policy here. 1699*8a978a17SVictor Perevertkin // 1700*8a978a17SVictor Perevertkin WDF_IO_FORWARD_PROGRESS_RESERVED_POLICY ForwardProgressReservedPolicy; 1701*8a978a17SVictor Perevertkin 1702*8a978a17SVictor Perevertkin // 1703*8a978a17SVictor Perevertkin // Structure which contains the policy specific fields 1704*8a978a17SVictor Perevertkin // 1705*8a978a17SVictor Perevertkin WDF_IO_FORWARD_PROGRESS_RESERVED_POLICY_SETTINGS ForwardProgressReservePolicySettings; 1706*8a978a17SVictor Perevertkin 1707*8a978a17SVictor Perevertkin // 1708*8a978a17SVictor Perevertkin // Callback for reserved request given at initialization time 1709*8a978a17SVictor Perevertkin // 1710*8a978a17SVictor Perevertkin PFN_WDF_IO_ALLOCATE_RESOURCES_FOR_RESERVED_REQUEST EvtIoAllocateResourcesForReservedRequest; 1711*8a978a17SVictor Perevertkin 1712*8a978a17SVictor Perevertkin // 1713*8a978a17SVictor Perevertkin // Callback for reserved request given at run time 1714*8a978a17SVictor Perevertkin // 1715*8a978a17SVictor Perevertkin PFN_WDF_IO_ALLOCATE_REQUEST_RESOURCES EvtIoAllocateRequestResources; 1716*8a978a17SVictor Perevertkin 1717*8a978a17SVictor Perevertkin } WDF_IO_QUEUE_FORWARD_PROGRESS_POLICY_V1_13, *PWDF_IO_QUEUE_FORWARD_PROGRESS_POLICY_V1_13; 1718*8a978a17SVictor Perevertkin 1719*8a978a17SVictor Perevertkin // End of versioning of structures for wdfio.h 1720*8a978a17SVictor Perevertkin 1721*8a978a17SVictor Perevertkin // 1722*8a978a17SVictor Perevertkin // Versioning of structures for wdfIoTarget.h 1723*8a978a17SVictor Perevertkin // 1724*8a978a17SVictor Perevertkin typedef struct _WDF_IO_TARGET_OPEN_PARAMS_V1_13 { 1725*8a978a17SVictor Perevertkin // 1726*8a978a17SVictor Perevertkin // Size of this structure in bytes 1727*8a978a17SVictor Perevertkin // 1728*8a978a17SVictor Perevertkin ULONG Size; 1729*8a978a17SVictor Perevertkin 1730*8a978a17SVictor Perevertkin // 1731*8a978a17SVictor Perevertkin // Indicates which fields of this structure are going to be used in 1732*8a978a17SVictor Perevertkin // creating the WDFIOTARGET. 1733*8a978a17SVictor Perevertkin // 1734*8a978a17SVictor Perevertkin WDF_IO_TARGET_OPEN_TYPE Type; 1735*8a978a17SVictor Perevertkin 1736*8a978a17SVictor Perevertkin // 1737*8a978a17SVictor Perevertkin // Notification when the target is being queried for removal. 1738*8a978a17SVictor Perevertkin // If !NT_SUCCESS is returned, the query will fail and the target will 1739*8a978a17SVictor Perevertkin // remain opened. 1740*8a978a17SVictor Perevertkin // 1741*8a978a17SVictor Perevertkin PFN_WDF_IO_TARGET_QUERY_REMOVE EvtIoTargetQueryRemove; 1742*8a978a17SVictor Perevertkin 1743*8a978a17SVictor Perevertkin // 1744*8a978a17SVictor Perevertkin // The previous query remove has been canceled and the target can now be 1745*8a978a17SVictor Perevertkin // reopened. 1746*8a978a17SVictor Perevertkin // 1747*8a978a17SVictor Perevertkin PFN_WDF_IO_TARGET_REMOVE_CANCELED EvtIoTargetRemoveCanceled; 1748*8a978a17SVictor Perevertkin 1749*8a978a17SVictor Perevertkin // 1750*8a978a17SVictor Perevertkin // The query remove has succeeded and the target is now removed from the 1751*8a978a17SVictor Perevertkin // system. 1752*8a978a17SVictor Perevertkin // 1753*8a978a17SVictor Perevertkin PFN_WDF_IO_TARGET_REMOVE_COMPLETE EvtIoTargetRemoveComplete; 1754*8a978a17SVictor Perevertkin 1755*8a978a17SVictor Perevertkin // <KMDF_ONLY/> 1756*8a978a17SVictor Perevertkin // ========== WdfIoTargetOpenUseExistingDevice begin ========== 1757*8a978a17SVictor Perevertkin // 1758*8a978a17SVictor Perevertkin // The device object to send requests to 1759*8a978a17SVictor Perevertkin // 1760*8a978a17SVictor Perevertkin PDEVICE_OBJECT TargetDeviceObject; 1761*8a978a17SVictor Perevertkin 1762*8a978a17SVictor Perevertkin // <KMDF_ONLY/> 1763*8a978a17SVictor Perevertkin // File object representing the TargetDeviceObject. The PFILE_OBJECT will 1764*8a978a17SVictor Perevertkin // be passed as a parameter in all requests sent to the resulting 1765*8a978a17SVictor Perevertkin // WDFIOTARGET. 1766*8a978a17SVictor Perevertkin // 1767*8a978a17SVictor Perevertkin PFILE_OBJECT TargetFileObject; 1768*8a978a17SVictor Perevertkin 1769*8a978a17SVictor Perevertkin // ========== WdfIoTargetOpenUseExistingDevice end ========== 1770*8a978a17SVictor Perevertkin // 1771*8a978a17SVictor Perevertkin // ========== WdfIoTargetOpenByName begin ========== 1772*8a978a17SVictor Perevertkin // 1773*8a978a17SVictor Perevertkin // Name of the device to open. 1774*8a978a17SVictor Perevertkin // 1775*8a978a17SVictor Perevertkin UNICODE_STRING TargetDeviceName; 1776*8a978a17SVictor Perevertkin 1777*8a978a17SVictor Perevertkin // <KMDF_DOC> 1778*8a978a17SVictor Perevertkin // The access desired on the device being opened up, ie WDM FILE_XXX_ACCESS 1779*8a978a17SVictor Perevertkin // such as FILE_ANY_ACCESS, FILE_SPECIAL_ACCESS, FILE_READ_ACCESS, or 1780*8a978a17SVictor Perevertkin // FILE_WRITE_ACCESS or you can use values such as GENERIC_READ, 1781*8a978a17SVictor Perevertkin // GENERIC_WRITE, or GENERIC_ALL. 1782*8a978a17SVictor Perevertkin // </KMDF_DOC> 1783*8a978a17SVictor Perevertkin // <UMDF_DOC> 1784*8a978a17SVictor Perevertkin // The requested access to the file or device, which can be summarized as 1785*8a978a17SVictor Perevertkin // read, write, both or neither zero). For more information about 1786*8a978a17SVictor Perevertkin // this member, see the dwDesiredAccess parameter of CreateFile in the 1787*8a978a17SVictor Perevertkin // Windows SDK. Note that ACCESS_MASK data type is a DWORD value. 1788*8a978a17SVictor Perevertkin // </UMDF_DOC> 1789*8a978a17SVictor Perevertkin // 1790*8a978a17SVictor Perevertkin ACCESS_MASK DesiredAccess; 1791*8a978a17SVictor Perevertkin 1792*8a978a17SVictor Perevertkin // 1793*8a978a17SVictor Perevertkin // <KMDF_DOC> 1794*8a978a17SVictor Perevertkin // Share access desired on the target being opened, ie WDM FILE_SHARE_XXX 1795*8a978a17SVictor Perevertkin // values such as FILE_SHARE_READ, FILE_SHARE_WRITE, FILE_SHARE_DELETE. 1796*8a978a17SVictor Perevertkin // A zero value means exclusive access to the target. 1797*8a978a17SVictor Perevertkin // 1798*8a978a17SVictor Perevertkin // </KMDF_DOC> 1799*8a978a17SVictor Perevertkin // <UMDF_DOC> 1800*8a978a17SVictor Perevertkin // The type of sharing to allow for the file. For more information about 1801*8a978a17SVictor Perevertkin // this member, see the dwShareMode parameter of CreateFile in the 1802*8a978a17SVictor Perevertkin // Windows SDK. A value of 0 means exclusive access. 1803*8a978a17SVictor Perevertkin // </UMDF_DOC> 1804*8a978a17SVictor Perevertkin // 1805*8a978a17SVictor Perevertkin ULONG ShareAccess; 1806*8a978a17SVictor Perevertkin 1807*8a978a17SVictor Perevertkin // 1808*8a978a17SVictor Perevertkin // <KMDF_DOC> 1809*8a978a17SVictor Perevertkin // File attributes, see ZwCreateFile in the DDK for a list of valid 1810*8a978a17SVictor Perevertkin // values and their meaning. 1811*8a978a17SVictor Perevertkin // </KMDF_DOC> 1812*8a978a17SVictor Perevertkin // <UMDF_DOC> 1813*8a978a17SVictor Perevertkin // Additional flags and attributes for the file. For more information about 1814*8a978a17SVictor Perevertkin // this member, see the dwFlagsAndAttributes parameter of CreateFile 1815*8a978a17SVictor Perevertkin // in the Windows SDK. 1816*8a978a17SVictor Perevertkin // </UMDF_DOC> 1817*8a978a17SVictor Perevertkin // 1818*8a978a17SVictor Perevertkin ULONG FileAttributes; 1819*8a978a17SVictor Perevertkin 1820*8a978a17SVictor Perevertkin // 1821*8a978a17SVictor Perevertkin // <KMDF_DOC> 1822*8a978a17SVictor Perevertkin // Create disposition, see ZwCreateFile in the DDK for a list of valid 1823*8a978a17SVictor Perevertkin // values and their meaning. 1824*8a978a17SVictor Perevertkin // </KMDF_DOC> 1825*8a978a17SVictor Perevertkin // <UMDF_DOC> 1826*8a978a17SVictor Perevertkin // The action to take if the file already exists. For more information 1827*8a978a17SVictor Perevertkin // about this member, see the dwCreationDisposition parameter of 1828*8a978a17SVictor Perevertkin // CreateFile in the Windows SDK. 1829*8a978a17SVictor Perevertkin // </UMDF_DOC> 1830*8a978a17SVictor Perevertkin // 1831*8a978a17SVictor Perevertkin ULONG CreateDisposition; 1832*8a978a17SVictor Perevertkin 1833*8a978a17SVictor Perevertkin // 1834*8a978a17SVictor Perevertkin // <KMDF_ONLY/> 1835*8a978a17SVictor Perevertkin // Options for opening the device, see CreateOptions for ZwCreateFile in the 1836*8a978a17SVictor Perevertkin // DDK for a list of valid values and their meaning. 1837*8a978a17SVictor Perevertkin // 1838*8a978a17SVictor Perevertkin ULONG CreateOptions; 1839*8a978a17SVictor Perevertkin 1840*8a978a17SVictor Perevertkin // 1841*8a978a17SVictor Perevertkin // <KMDF_ONLY/> 1842*8a978a17SVictor Perevertkin // 1843*8a978a17SVictor Perevertkin PVOID EaBuffer; 1844*8a978a17SVictor Perevertkin 1845*8a978a17SVictor Perevertkin // 1846*8a978a17SVictor Perevertkin // <KMDF_ONLY/> 1847*8a978a17SVictor Perevertkin // 1848*8a978a17SVictor Perevertkin ULONG EaBufferLength; 1849*8a978a17SVictor Perevertkin 1850*8a978a17SVictor Perevertkin // 1851*8a978a17SVictor Perevertkin // <KMDF_ONLY/> 1852*8a978a17SVictor Perevertkin // 1853*8a978a17SVictor Perevertkin PLONGLONG AllocationSize; 1854*8a978a17SVictor Perevertkin 1855*8a978a17SVictor Perevertkin // ========== WdfIoTargetOpenByName end ========== 1856*8a978a17SVictor Perevertkin // 1857*8a978a17SVictor Perevertkin // 1858*8a978a17SVictor Perevertkin // <KMDF_ONLY/> 1859*8a978a17SVictor Perevertkin // 1860*8a978a17SVictor Perevertkin // On return for a create by name, this will contain one of the following 1861*8a978a17SVictor Perevertkin // values: FILE_CREATED, FILE_OPENED, FILE_OVERWRITTEN, FILE_SUPERSEDED, 1862*8a978a17SVictor Perevertkin // FILE_EXISTS, FILE_DOES_NOT_EXIST 1863*8a978a17SVictor Perevertkin // 1864*8a978a17SVictor Perevertkin ULONG FileInformation; 1865*8a978a17SVictor Perevertkin 1866*8a978a17SVictor Perevertkin // ========== WdfIoTargetOpenLocalTargetByFile begin ========== 1867*8a978a17SVictor Perevertkin // 1868*8a978a17SVictor Perevertkin // 1869*8a978a17SVictor Perevertkin // <UMDF_ONLY/> A UNICODE_STRING-formatted string that contains the 1870*8a978a17SVictor Perevertkin // name of the file to create a file object from. This parameter is 1871*8a978a17SVictor Perevertkin // optional, and is applicable only when Type parameter is 1872*8a978a17SVictor Perevertkin // WdfIoTargetOpenLocalTargetByFile. The driver can leave this member 1873*8a978a17SVictor Perevertkin // unchanged if the driver does not have to create the file object 1874*8a978a17SVictor Perevertkin // from a file name. If the driver must supply a name, the string that 1875*8a978a17SVictor Perevertkin // the driver passes must not contain any path separator characters 1876*8a978a17SVictor Perevertkin // ("/" or "\"). 1877*8a978a17SVictor Perevertkin // 1878*8a978a17SVictor Perevertkin UNICODE_STRING FileName; 1879*8a978a17SVictor Perevertkin 1880*8a978a17SVictor Perevertkin } WDF_IO_TARGET_OPEN_PARAMS_V1_13, *PWDF_IO_TARGET_OPEN_PARAMS_V1_13; 1881*8a978a17SVictor Perevertkin 1882*8a978a17SVictor Perevertkin // End of versioning of structures for wdfIoTarget.h 1883*8a978a17SVictor Perevertkin 1884*8a978a17SVictor Perevertkin // 1885*8a978a17SVictor Perevertkin // Versioning of structures for wdfMemory.h 1886*8a978a17SVictor Perevertkin // 1887*8a978a17SVictor Perevertkin typedef struct _WDFMEMORY_OFFSET_V1_13 { 1888*8a978a17SVictor Perevertkin // 1889*8a978a17SVictor Perevertkin // Offset into the WDFMEMORY that the operation should start at. 1890*8a978a17SVictor Perevertkin // 1891*8a978a17SVictor Perevertkin size_t BufferOffset; 1892*8a978a17SVictor Perevertkin 1893*8a978a17SVictor Perevertkin // 1894*8a978a17SVictor Perevertkin // Number of bytes that the operation should access. If 0, the entire 1895*8a978a17SVictor Perevertkin // length of the WDFMEMORY buffer will be used in the operation or ignored 1896*8a978a17SVictor Perevertkin // depending on the API. 1897*8a978a17SVictor Perevertkin // 1898*8a978a17SVictor Perevertkin size_t BufferLength; 1899*8a978a17SVictor Perevertkin 1900*8a978a17SVictor Perevertkin } WDFMEMORY_OFFSET_V1_13, *PWDFMEMORY_OFFSET_V1_13; 1901*8a978a17SVictor Perevertkin 1902*8a978a17SVictor Perevertkin typedef struct _WDF_MEMORY_DESCRIPTOR_V1_13 { 1903*8a978a17SVictor Perevertkin WDF_MEMORY_DESCRIPTOR_TYPE Type; 1904*8a978a17SVictor Perevertkin 1905*8a978a17SVictor Perevertkin union { 1906*8a978a17SVictor Perevertkin struct { 1907*8a978a17SVictor Perevertkin PVOID Buffer; 1908*8a978a17SVictor Perevertkin 1909*8a978a17SVictor Perevertkin ULONG Length; 1910*8a978a17SVictor Perevertkin 1911*8a978a17SVictor Perevertkin } BufferType; 1912*8a978a17SVictor Perevertkin 1913*8a978a17SVictor Perevertkin struct { 1914*8a978a17SVictor Perevertkin PMDL Mdl; 1915*8a978a17SVictor Perevertkin 1916*8a978a17SVictor Perevertkin ULONG BufferLength; 1917*8a978a17SVictor Perevertkin 1918*8a978a17SVictor Perevertkin } MdlType; 1919*8a978a17SVictor Perevertkin 1920*8a978a17SVictor Perevertkin struct { 1921*8a978a17SVictor Perevertkin WDFMEMORY Memory; 1922*8a978a17SVictor Perevertkin 1923*8a978a17SVictor Perevertkin PWDFMEMORY_OFFSET_V1_13 Offsets; 1924*8a978a17SVictor Perevertkin 1925*8a978a17SVictor Perevertkin } HandleType; 1926*8a978a17SVictor Perevertkin 1927*8a978a17SVictor Perevertkin } u; 1928*8a978a17SVictor Perevertkin 1929*8a978a17SVictor Perevertkin } WDF_MEMORY_DESCRIPTOR_V1_13, *PWDF_MEMORY_DESCRIPTOR_V1_13; 1930*8a978a17SVictor Perevertkin 1931*8a978a17SVictor Perevertkin // End of versioning of structures for wdfMemory.h 1932*8a978a17SVictor Perevertkin 1933*8a978a17SVictor Perevertkin // 1934*8a978a17SVictor Perevertkin // Versioning of structures for wdfMiniport.h 1935*8a978a17SVictor Perevertkin // 1936*8a978a17SVictor Perevertkin // End of versioning of structures for wdfMiniport.h 1937*8a978a17SVictor Perevertkin 1938*8a978a17SVictor Perevertkin // 1939*8a978a17SVictor Perevertkin // Versioning of structures for wdfObject.h 1940*8a978a17SVictor Perevertkin // 1941*8a978a17SVictor Perevertkin typedef struct _WDF_OBJECT_ATTRIBUTES_V1_13 { 1942*8a978a17SVictor Perevertkin // 1943*8a978a17SVictor Perevertkin // Size in bytes of this structure 1944*8a978a17SVictor Perevertkin // 1945*8a978a17SVictor Perevertkin ULONG Size; 1946*8a978a17SVictor Perevertkin 1947*8a978a17SVictor Perevertkin // 1948*8a978a17SVictor Perevertkin // Function to call when the object is deleted 1949*8a978a17SVictor Perevertkin // 1950*8a978a17SVictor Perevertkin PFN_WDF_OBJECT_CONTEXT_CLEANUP EvtCleanupCallback; 1951*8a978a17SVictor Perevertkin 1952*8a978a17SVictor Perevertkin // 1953*8a978a17SVictor Perevertkin // Function to call when the objects memory is destroyed when the 1954*8a978a17SVictor Perevertkin // the last reference count goes to zero 1955*8a978a17SVictor Perevertkin // 1956*8a978a17SVictor Perevertkin PFN_WDF_OBJECT_CONTEXT_DESTROY EvtDestroyCallback; 1957*8a978a17SVictor Perevertkin 1958*8a978a17SVictor Perevertkin // 1959*8a978a17SVictor Perevertkin // Execution level constraints for Object 1960*8a978a17SVictor Perevertkin // 1961*8a978a17SVictor Perevertkin WDF_EXECUTION_LEVEL ExecutionLevel; 1962*8a978a17SVictor Perevertkin 1963*8a978a17SVictor Perevertkin // 1964*8a978a17SVictor Perevertkin // Synchronization level constraint for Object 1965*8a978a17SVictor Perevertkin // 1966*8a978a17SVictor Perevertkin WDF_SYNCHRONIZATION_SCOPE SynchronizationScope; 1967*8a978a17SVictor Perevertkin 1968*8a978a17SVictor Perevertkin // 1969*8a978a17SVictor Perevertkin // Optional Parent Object 1970*8a978a17SVictor Perevertkin // 1971*8a978a17SVictor Perevertkin WDFOBJECT ParentObject; 1972*8a978a17SVictor Perevertkin 1973*8a978a17SVictor Perevertkin // 1974*8a978a17SVictor Perevertkin // Overrides the size of the context allocated as specified by 1975*8a978a17SVictor Perevertkin // ContextTypeInfo->ContextSize 1976*8a978a17SVictor Perevertkin // 1977*8a978a17SVictor Perevertkin size_t ContextSizeOverride; 1978*8a978a17SVictor Perevertkin 1979*8a978a17SVictor Perevertkin // 1980*8a978a17SVictor Perevertkin // Pointer to the type information to be associated with the object 1981*8a978a17SVictor Perevertkin // 1982*8a978a17SVictor Perevertkin PCWDF_OBJECT_CONTEXT_TYPE_INFO_V1_13 ContextTypeInfo; 1983*8a978a17SVictor Perevertkin 1984*8a978a17SVictor Perevertkin } WDF_OBJECT_ATTRIBUTES_V1_13, *PWDF_OBJECT_ATTRIBUTES_V1_13; 1985*8a978a17SVictor Perevertkin 1986*8a978a17SVictor Perevertkin // 1987*8a978a17SVictor Perevertkin // Since C does not have strong type checking we must invent our own 1988*8a978a17SVictor Perevertkin // 1989*8a978a17SVictor Perevertkin typedef struct _WDF_OBJECT_CONTEXT_TYPE_INFO_V1_13 { 1990*8a978a17SVictor Perevertkin // 1991*8a978a17SVictor Perevertkin // The size of this structure in bytes 1992*8a978a17SVictor Perevertkin // 1993*8a978a17SVictor Perevertkin ULONG Size; 1994*8a978a17SVictor Perevertkin 1995*8a978a17SVictor Perevertkin // 1996*8a978a17SVictor Perevertkin // String representation of the context's type name, i.e. "DEVICE_CONTEXT" 1997*8a978a17SVictor Perevertkin // 1998*8a978a17SVictor Perevertkin PCHAR ContextName; 1999*8a978a17SVictor Perevertkin 2000*8a978a17SVictor Perevertkin // 2001*8a978a17SVictor Perevertkin // The size of the context in bytes. This will be the size of the context 2002*8a978a17SVictor Perevertkin // associated with the handle unless 2003*8a978a17SVictor Perevertkin // WDF_OBJECT_ATTRIBUTES::ContextSizeOverride is specified. 2004*8a978a17SVictor Perevertkin // 2005*8a978a17SVictor Perevertkin size_t ContextSize; 2006*8a978a17SVictor Perevertkin 2007*8a978a17SVictor Perevertkin // 2008*8a978a17SVictor Perevertkin // If NULL, this structure is the unique type identifier for the context 2009*8a978a17SVictor Perevertkin // type. If != NULL, the UniqueType pointer value is the unique type id 2010*8a978a17SVictor Perevertkin // for the context type. 2011*8a978a17SVictor Perevertkin // 2012*8a978a17SVictor Perevertkin PCWDF_OBJECT_CONTEXT_TYPE_INFO_V1_13 UniqueType; 2013*8a978a17SVictor Perevertkin 2014*8a978a17SVictor Perevertkin // 2015*8a978a17SVictor Perevertkin // Function pointer to retrieve the context type information structure 2016*8a978a17SVictor Perevertkin // pointer from the provider of the context type. This function is invoked 2017*8a978a17SVictor Perevertkin // by the client driver's entry point by the KMDF stub after all class 2018*8a978a17SVictor Perevertkin // drivers are loaded and before DriverEntry is invoked. 2019*8a978a17SVictor Perevertkin // 2020*8a978a17SVictor Perevertkin PFN_GET_UNIQUE_CONTEXT_TYPE EvtDriverGetUniqueContextType; 2021*8a978a17SVictor Perevertkin 2022*8a978a17SVictor Perevertkin } WDF_OBJECT_CONTEXT_TYPE_INFO_V1_13, *PWDF_OBJECT_CONTEXT_TYPE_INFO_V1_13; 2023*8a978a17SVictor Perevertkin 2024*8a978a17SVictor Perevertkin // 2025*8a978a17SVictor Perevertkin // Core structure for supporting custom types, see macros below. 2026*8a978a17SVictor Perevertkin // 2027*8a978a17SVictor Perevertkin typedef struct _WDF_CUSTOM_TYPE_CONTEXT_V1_13 { 2028*8a978a17SVictor Perevertkin ULONG Size; 2029*8a978a17SVictor Perevertkin 2030*8a978a17SVictor Perevertkin ULONG_PTR Data; 2031*8a978a17SVictor Perevertkin 2032*8a978a17SVictor Perevertkin } WDF_CUSTOM_TYPE_CONTEXT_V1_13, *PWDF_CUSTOM_TYPE_CONTEXT_V1_13; 2033*8a978a17SVictor Perevertkin 2034*8a978a17SVictor Perevertkin // End of versioning of structures for wdfObject.h 2035*8a978a17SVictor Perevertkin 2036*8a978a17SVictor Perevertkin // 2037*8a978a17SVictor Perevertkin // Versioning of structures for wdfpdo.h 2038*8a978a17SVictor Perevertkin // 2039*8a978a17SVictor Perevertkin typedef struct _WDF_PDO_EVENT_CALLBACKS_V1_13 { 2040*8a978a17SVictor Perevertkin // 2041*8a978a17SVictor Perevertkin // The size of this structure in bytes 2042*8a978a17SVictor Perevertkin // 2043*8a978a17SVictor Perevertkin ULONG Size; 2044*8a978a17SVictor Perevertkin 2045*8a978a17SVictor Perevertkin // 2046*8a978a17SVictor Perevertkin // Called in response to IRP_MN_QUERY_RESOURCES 2047*8a978a17SVictor Perevertkin // 2048*8a978a17SVictor Perevertkin PFN_WDF_DEVICE_RESOURCES_QUERY EvtDeviceResourcesQuery; 2049*8a978a17SVictor Perevertkin 2050*8a978a17SVictor Perevertkin // 2051*8a978a17SVictor Perevertkin // Called in response to IRP_MN_QUERY_RESOURCE_REQUIREMENTS 2052*8a978a17SVictor Perevertkin // 2053*8a978a17SVictor Perevertkin PFN_WDF_DEVICE_RESOURCE_REQUIREMENTS_QUERY EvtDeviceResourceRequirementsQuery; 2054*8a978a17SVictor Perevertkin 2055*8a978a17SVictor Perevertkin // 2056*8a978a17SVictor Perevertkin // Called in response to IRP_MN_EJECT 2057*8a978a17SVictor Perevertkin // 2058*8a978a17SVictor Perevertkin PFN_WDF_DEVICE_EJECT EvtDeviceEject; 2059*8a978a17SVictor Perevertkin 2060*8a978a17SVictor Perevertkin // 2061*8a978a17SVictor Perevertkin // Called in response to IRP_MN_SET_LOCK 2062*8a978a17SVictor Perevertkin // 2063*8a978a17SVictor Perevertkin PFN_WDF_DEVICE_SET_LOCK EvtDeviceSetLock; 2064*8a978a17SVictor Perevertkin 2065*8a978a17SVictor Perevertkin // 2066*8a978a17SVictor Perevertkin // Called in response to the power policy owner sending a wait wake to the 2067*8a978a17SVictor Perevertkin // PDO. Bus generic arming shoulding occur here. 2068*8a978a17SVictor Perevertkin // 2069*8a978a17SVictor Perevertkin PFN_WDF_DEVICE_ENABLE_WAKE_AT_BUS EvtDeviceEnableWakeAtBus; 2070*8a978a17SVictor Perevertkin 2071*8a978a17SVictor Perevertkin // 2072*8a978a17SVictor Perevertkin // Called in response to the power policy owner sending a wait wake to the 2073*8a978a17SVictor Perevertkin // PDO. Bus generic disarming shoulding occur here. 2074*8a978a17SVictor Perevertkin // 2075*8a978a17SVictor Perevertkin PFN_WDF_DEVICE_DISABLE_WAKE_AT_BUS EvtDeviceDisableWakeAtBus; 2076*8a978a17SVictor Perevertkin 2077*8a978a17SVictor Perevertkin // 2078*8a978a17SVictor Perevertkin // Called when reporting the PDO missing to PnP manager in response to 2079*8a978a17SVictor Perevertkin // IRP_MN_QUERY_DEVICE_RELATIONS for Bus Relations. 2080*8a978a17SVictor Perevertkin // 2081*8a978a17SVictor Perevertkin PFN_WDF_DEVICE_REPORTED_MISSING EvtDeviceReportedMissing; 2082*8a978a17SVictor Perevertkin 2083*8a978a17SVictor Perevertkin } WDF_PDO_EVENT_CALLBACKS_V1_13, *PWDF_PDO_EVENT_CALLBACKS_V1_13; 2084*8a978a17SVictor Perevertkin 2085*8a978a17SVictor Perevertkin // End of versioning of structures for wdfpdo.h 2086*8a978a17SVictor Perevertkin 2087*8a978a17SVictor Perevertkin // 2088*8a978a17SVictor Perevertkin // Versioning of structures for wdfpool.h 2089*8a978a17SVictor Perevertkin // 2090*8a978a17SVictor Perevertkin // End of versioning of structures for wdfpool.h 2091*8a978a17SVictor Perevertkin 2092*8a978a17SVictor Perevertkin // 2093*8a978a17SVictor Perevertkin // Versioning of structures for wdfqueryinterface.h 2094*8a978a17SVictor Perevertkin // 2095*8a978a17SVictor Perevertkin typedef struct _WDF_QUERY_INTERFACE_CONFIG_V1_13 { 2096*8a978a17SVictor Perevertkin // 2097*8a978a17SVictor Perevertkin // Size of this structure in bytes. 2098*8a978a17SVictor Perevertkin // 2099*8a978a17SVictor Perevertkin ULONG Size; 2100*8a978a17SVictor Perevertkin 2101*8a978a17SVictor Perevertkin // 2102*8a978a17SVictor Perevertkin // Interface to be returned to the caller. Optional if BehaviorType is set 2103*8a978a17SVictor Perevertkin // to WdfQueryInterfaceTypePassThrough or ImportInterface is set to TRUE. 2104*8a978a17SVictor Perevertkin // 2105*8a978a17SVictor Perevertkin PINTERFACE Interface; 2106*8a978a17SVictor Perevertkin 2107*8a978a17SVictor Perevertkin // 2108*8a978a17SVictor Perevertkin // The GUID identifying the interface 2109*8a978a17SVictor Perevertkin // 2110*8a978a17SVictor Perevertkin CONST GUID * InterfaceType; 2111*8a978a17SVictor Perevertkin 2112*8a978a17SVictor Perevertkin // 2113*8a978a17SVictor Perevertkin // Valid only for PDOs. The framework will allocate a new request and 2114*8a978a17SVictor Perevertkin // forward it down the parent's device stack. 2115*8a978a17SVictor Perevertkin // 2116*8a978a17SVictor Perevertkin BOOLEAN SendQueryToParentStack; 2117*8a978a17SVictor Perevertkin 2118*8a978a17SVictor Perevertkin // 2119*8a978a17SVictor Perevertkin // Driver supplied callback which is called after some basic interface 2120*8a978a17SVictor Perevertkin // validation has been performed (size, version, and guid checking). This 2121*8a978a17SVictor Perevertkin // is an optional parameter and may be NULL unless ImportInterface is 2122*8a978a17SVictor Perevertkin // specified. 2123*8a978a17SVictor Perevertkin // 2124*8a978a17SVictor Perevertkin // If the callback returns !NT_SUCCESS, this error will be returned to the 2125*8a978a17SVictor Perevertkin // caller and the query interface will fail. 2126*8a978a17SVictor Perevertkin // 2127*8a978a17SVictor Perevertkin // In this callback, the caller is free to modify the ExposedInterface in 2128*8a978a17SVictor Perevertkin // any manner of its choosing. For instance, the callback may change any 2129*8a978a17SVictor Perevertkin // field in the interface. The callback may also alloate a dynamic context 2130*8a978a17SVictor Perevertkin // to be associated with the interface; the InterfaceReference and 2131*8a978a17SVictor Perevertkin // InterfaceDereference functions may also be overridden. 2132*8a978a17SVictor Perevertkin // 2133*8a978a17SVictor Perevertkin // If ImportInterface is set to TRUE, then this is a required field and the 2134*8a978a17SVictor Perevertkin // callback must initialize the interface (the framework will leave the 2135*8a978a17SVictor Perevertkin // ExposedInterface buffer exactly as it received it) since the framework 2136*8a978a17SVictor Perevertkin // has no way of knowing which fields to fill in and which to leave alone. 2137*8a978a17SVictor Perevertkin // 2138*8a978a17SVictor Perevertkin PFN_WDF_DEVICE_PROCESS_QUERY_INTERFACE_REQUEST EvtDeviceProcessQueryInterfaceRequest; 2139*8a978a17SVictor Perevertkin 2140*8a978a17SVictor Perevertkin // 2141*8a978a17SVictor Perevertkin // If TRUE, the interface provided by the caller contains data that the 2142*8a978a17SVictor Perevertkin // driver is interested in. By setting to this field to TRUE, the 2143*8a978a17SVictor Perevertkin // EvtDeviceProcessQueryInterfaceRequest callback must initialize the 2144*8a978a17SVictor Perevertkin // ExposedInterface. 2145*8a978a17SVictor Perevertkin // 2146*8a978a17SVictor Perevertkin // If FALSE, the entire ExposedInterface is initialized through a memory 2147*8a978a17SVictor Perevertkin // copy before the EvtDeviceProcessQueryInterfaceRequest is called. 2148*8a978a17SVictor Perevertkin // 2149*8a978a17SVictor Perevertkin BOOLEAN ImportInterface; 2150*8a978a17SVictor Perevertkin 2151*8a978a17SVictor Perevertkin } WDF_QUERY_INTERFACE_CONFIG_V1_13, *PWDF_QUERY_INTERFACE_CONFIG_V1_13; 2152*8a978a17SVictor Perevertkin 2153*8a978a17SVictor Perevertkin // End of versioning of structures for wdfqueryinterface.h 2154*8a978a17SVictor Perevertkin 2155*8a978a17SVictor Perevertkin // 2156*8a978a17SVictor Perevertkin // Versioning of structures for wdfregistry.h 2157*8a978a17SVictor Perevertkin // 2158*8a978a17SVictor Perevertkin // End of versioning of structures for wdfregistry.h 2159*8a978a17SVictor Perevertkin 2160*8a978a17SVictor Perevertkin // 2161*8a978a17SVictor Perevertkin // Versioning of structures for wdfrequest.h 2162*8a978a17SVictor Perevertkin // 2163*8a978a17SVictor Perevertkin // 2164*8a978a17SVictor Perevertkin // This parameters structure allows general access to a requests parameters 2165*8a978a17SVictor Perevertkin // 2166*8a978a17SVictor Perevertkin typedef struct _WDF_REQUEST_PARAMETERS_V1_13 { 2167*8a978a17SVictor Perevertkin USHORT Size; 2168*8a978a17SVictor Perevertkin 2169*8a978a17SVictor Perevertkin UCHAR MinorFunction; 2170*8a978a17SVictor Perevertkin 2171*8a978a17SVictor Perevertkin WDF_REQUEST_TYPE Type; 2172*8a978a17SVictor Perevertkin 2173*8a978a17SVictor Perevertkin // 2174*8a978a17SVictor Perevertkin // The following user parameters are based on the service that is being 2175*8a978a17SVictor Perevertkin // invoked. Drivers and file systems can determine which set to use based 2176*8a978a17SVictor Perevertkin // on the above major and minor function codes. 2177*8a978a17SVictor Perevertkin // 2178*8a978a17SVictor Perevertkin union { 2179*8a978a17SVictor Perevertkin // 2180*8a978a17SVictor Perevertkin // System service parameters for: Create 2181*8a978a17SVictor Perevertkin // 2182*8a978a17SVictor Perevertkin // 2183*8a978a17SVictor Perevertkin struct { 2184*8a978a17SVictor Perevertkin PIO_SECURITY_CONTEXT SecurityContext; 2185*8a978a17SVictor Perevertkin 2186*8a978a17SVictor Perevertkin ULONG Options; 2187*8a978a17SVictor Perevertkin 2188*8a978a17SVictor Perevertkin USHORT POINTER_ALIGNMENT FileAttributes; 2189*8a978a17SVictor Perevertkin 2190*8a978a17SVictor Perevertkin USHORT ShareAccess; 2191*8a978a17SVictor Perevertkin 2192*8a978a17SVictor Perevertkin ULONG POINTER_ALIGNMENT EaLength; 2193*8a978a17SVictor Perevertkin 2194*8a978a17SVictor Perevertkin } Create; 2195*8a978a17SVictor Perevertkin 2196*8a978a17SVictor Perevertkin // 2197*8a978a17SVictor Perevertkin // System service parameters for: Read 2198*8a978a17SVictor Perevertkin // 2199*8a978a17SVictor Perevertkin // 2200*8a978a17SVictor Perevertkin struct { 2201*8a978a17SVictor Perevertkin size_t Length; 2202*8a978a17SVictor Perevertkin 2203*8a978a17SVictor Perevertkin ULONG POINTER_ALIGNMENT Key; 2204*8a978a17SVictor Perevertkin 2205*8a978a17SVictor Perevertkin LONGLONG DeviceOffset; 2206*8a978a17SVictor Perevertkin 2207*8a978a17SVictor Perevertkin } Read; 2208*8a978a17SVictor Perevertkin 2209*8a978a17SVictor Perevertkin // 2210*8a978a17SVictor Perevertkin // System service parameters for: Write 2211*8a978a17SVictor Perevertkin // 2212*8a978a17SVictor Perevertkin // 2213*8a978a17SVictor Perevertkin struct { 2214*8a978a17SVictor Perevertkin size_t Length; 2215*8a978a17SVictor Perevertkin 2216*8a978a17SVictor Perevertkin ULONG POINTER_ALIGNMENT Key; 2217*8a978a17SVictor Perevertkin 2218*8a978a17SVictor Perevertkin LONGLONG DeviceOffset; 2219*8a978a17SVictor Perevertkin 2220*8a978a17SVictor Perevertkin } Write; 2221*8a978a17SVictor Perevertkin 2222*8a978a17SVictor Perevertkin // 2223*8a978a17SVictor Perevertkin // System service parameters for: Device Control 2224*8a978a17SVictor Perevertkin // 2225*8a978a17SVictor Perevertkin // Note that the user's output buffer is stored in the UserBuffer field 2226*8a978a17SVictor Perevertkin // and the user's input buffer is stored in the SystemBuffer field. 2227*8a978a17SVictor Perevertkin // 2228*8a978a17SVictor Perevertkin // 2229*8a978a17SVictor Perevertkin struct { 2230*8a978a17SVictor Perevertkin size_t OutputBufferLength; 2231*8a978a17SVictor Perevertkin 2232*8a978a17SVictor Perevertkin size_t POINTER_ALIGNMENT InputBufferLength; 2233*8a978a17SVictor Perevertkin 2234*8a978a17SVictor Perevertkin ULONG POINTER_ALIGNMENT IoControlCode; 2235*8a978a17SVictor Perevertkin 2236*8a978a17SVictor Perevertkin PVOID Type3InputBuffer; 2237*8a978a17SVictor Perevertkin 2238*8a978a17SVictor Perevertkin } DeviceIoControl; 2239*8a978a17SVictor Perevertkin 2240*8a978a17SVictor Perevertkin struct { 2241*8a978a17SVictor Perevertkin PVOID Arg1; 2242*8a978a17SVictor Perevertkin 2243*8a978a17SVictor Perevertkin PVOID Arg2; 2244*8a978a17SVictor Perevertkin 2245*8a978a17SVictor Perevertkin ULONG POINTER_ALIGNMENT IoControlCode; 2246*8a978a17SVictor Perevertkin 2247*8a978a17SVictor Perevertkin PVOID Arg4; 2248*8a978a17SVictor Perevertkin 2249*8a978a17SVictor Perevertkin } Others; 2250*8a978a17SVictor Perevertkin 2251*8a978a17SVictor Perevertkin } Parameters; 2252*8a978a17SVictor Perevertkin 2253*8a978a17SVictor Perevertkin } WDF_REQUEST_PARAMETERS_V1_13, *PWDF_REQUEST_PARAMETERS_V1_13; 2254*8a978a17SVictor Perevertkin 2255*8a978a17SVictor Perevertkin typedef struct _WDF_REQUEST_COMPLETION_PARAMS_V1_13 { 2256*8a978a17SVictor Perevertkin // 2257*8a978a17SVictor Perevertkin // Size of the structure in bytes 2258*8a978a17SVictor Perevertkin // 2259*8a978a17SVictor Perevertkin ULONG Size; 2260*8a978a17SVictor Perevertkin 2261*8a978a17SVictor Perevertkin WDF_REQUEST_TYPE Type; 2262*8a978a17SVictor Perevertkin 2263*8a978a17SVictor Perevertkin IO_STATUS_BLOCK IoStatus; 2264*8a978a17SVictor Perevertkin 2265*8a978a17SVictor Perevertkin union { 2266*8a978a17SVictor Perevertkin struct { 2267*8a978a17SVictor Perevertkin WDFMEMORY Buffer; 2268*8a978a17SVictor Perevertkin 2269*8a978a17SVictor Perevertkin size_t Length; 2270*8a978a17SVictor Perevertkin 2271*8a978a17SVictor Perevertkin size_t Offset; 2272*8a978a17SVictor Perevertkin 2273*8a978a17SVictor Perevertkin } Write; 2274*8a978a17SVictor Perevertkin 2275*8a978a17SVictor Perevertkin struct { 2276*8a978a17SVictor Perevertkin WDFMEMORY Buffer; 2277*8a978a17SVictor Perevertkin 2278*8a978a17SVictor Perevertkin size_t Length; 2279*8a978a17SVictor Perevertkin 2280*8a978a17SVictor Perevertkin size_t Offset; 2281*8a978a17SVictor Perevertkin 2282*8a978a17SVictor Perevertkin } Read; 2283*8a978a17SVictor Perevertkin 2284*8a978a17SVictor Perevertkin struct { 2285*8a978a17SVictor Perevertkin ULONG IoControlCode; 2286*8a978a17SVictor Perevertkin 2287*8a978a17SVictor Perevertkin struct { 2288*8a978a17SVictor Perevertkin WDFMEMORY Buffer; 2289*8a978a17SVictor Perevertkin 2290*8a978a17SVictor Perevertkin size_t Offset; 2291*8a978a17SVictor Perevertkin 2292*8a978a17SVictor Perevertkin } Input; 2293*8a978a17SVictor Perevertkin 2294*8a978a17SVictor Perevertkin struct { 2295*8a978a17SVictor Perevertkin WDFMEMORY Buffer; 2296*8a978a17SVictor Perevertkin 2297*8a978a17SVictor Perevertkin size_t Offset; 2298*8a978a17SVictor Perevertkin 2299*8a978a17SVictor Perevertkin size_t Length; 2300*8a978a17SVictor Perevertkin 2301*8a978a17SVictor Perevertkin } Output; 2302*8a978a17SVictor Perevertkin 2303*8a978a17SVictor Perevertkin } Ioctl; 2304*8a978a17SVictor Perevertkin 2305*8a978a17SVictor Perevertkin struct { 2306*8a978a17SVictor Perevertkin union { 2307*8a978a17SVictor Perevertkin PVOID Ptr; 2308*8a978a17SVictor Perevertkin 2309*8a978a17SVictor Perevertkin ULONG_PTR Value; 2310*8a978a17SVictor Perevertkin 2311*8a978a17SVictor Perevertkin } Argument1; 2312*8a978a17SVictor Perevertkin 2313*8a978a17SVictor Perevertkin union { 2314*8a978a17SVictor Perevertkin PVOID Ptr; 2315*8a978a17SVictor Perevertkin 2316*8a978a17SVictor Perevertkin ULONG_PTR Value; 2317*8a978a17SVictor Perevertkin 2318*8a978a17SVictor Perevertkin } Argument2; 2319*8a978a17SVictor Perevertkin 2320*8a978a17SVictor Perevertkin union { 2321*8a978a17SVictor Perevertkin PVOID Ptr; 2322*8a978a17SVictor Perevertkin 2323*8a978a17SVictor Perevertkin ULONG_PTR Value; 2324*8a978a17SVictor Perevertkin 2325*8a978a17SVictor Perevertkin } Argument3; 2326*8a978a17SVictor Perevertkin 2327*8a978a17SVictor Perevertkin union { 2328*8a978a17SVictor Perevertkin PVOID Ptr; 2329*8a978a17SVictor Perevertkin 2330*8a978a17SVictor Perevertkin ULONG_PTR Value; 2331*8a978a17SVictor Perevertkin 2332*8a978a17SVictor Perevertkin } Argument4; 2333*8a978a17SVictor Perevertkin 2334*8a978a17SVictor Perevertkin } Others; 2335*8a978a17SVictor Perevertkin 2336*8a978a17SVictor Perevertkin struct { 2337*8a978a17SVictor Perevertkin PWDF_USB_REQUEST_COMPLETION_PARAMS_V1_13 Completion; 2338*8a978a17SVictor Perevertkin 2339*8a978a17SVictor Perevertkin } Usb; 2340*8a978a17SVictor Perevertkin 2341*8a978a17SVictor Perevertkin } Parameters; 2342*8a978a17SVictor Perevertkin 2343*8a978a17SVictor Perevertkin } WDF_REQUEST_COMPLETION_PARAMS_V1_13, *PWDF_REQUEST_COMPLETION_PARAMS_V1_13; 2344*8a978a17SVictor Perevertkin 2345*8a978a17SVictor Perevertkin typedef struct _WDF_REQUEST_REUSE_PARAMS_V1_13 { 2346*8a978a17SVictor Perevertkin // 2347*8a978a17SVictor Perevertkin // Size of this structure in bytes 2348*8a978a17SVictor Perevertkin // 2349*8a978a17SVictor Perevertkin ULONG Size; 2350*8a978a17SVictor Perevertkin 2351*8a978a17SVictor Perevertkin // 2352*8a978a17SVictor Perevertkin // Bit field combination of WDF_REQUEST_REUSE_Xxx values 2353*8a978a17SVictor Perevertkin // 2354*8a978a17SVictor Perevertkin ULONG Flags; 2355*8a978a17SVictor Perevertkin 2356*8a978a17SVictor Perevertkin // 2357*8a978a17SVictor Perevertkin // The new status of the request. 2358*8a978a17SVictor Perevertkin // 2359*8a978a17SVictor Perevertkin NTSTATUS Status; 2360*8a978a17SVictor Perevertkin 2361*8a978a17SVictor Perevertkin // 2362*8a978a17SVictor Perevertkin // New PIRP to be contained in the WDFREQUEST. Setting a new PIRP value 2363*8a978a17SVictor Perevertkin // is only valid for WDFREQUESTs created by WdfRequestCreateFromIrp where 2364*8a978a17SVictor Perevertkin // RequestFreesIrp == FALSE. No other WDFREQUESTs (presented by the 2365*8a978a17SVictor Perevertkin // I/O queue for instance) may have their IRPs changed. 2366*8a978a17SVictor Perevertkin // 2367*8a978a17SVictor Perevertkin PIRP NewIrp; 2368*8a978a17SVictor Perevertkin 2369*8a978a17SVictor Perevertkin } WDF_REQUEST_REUSE_PARAMS_V1_13, *PWDF_REQUEST_REUSE_PARAMS_V1_13; 2370*8a978a17SVictor Perevertkin 2371*8a978a17SVictor Perevertkin typedef struct _WDF_REQUEST_SEND_OPTIONS_V1_13 { 2372*8a978a17SVictor Perevertkin // 2373*8a978a17SVictor Perevertkin // Size of the structure in bytes 2374*8a978a17SVictor Perevertkin // 2375*8a978a17SVictor Perevertkin ULONG Size; 2376*8a978a17SVictor Perevertkin 2377*8a978a17SVictor Perevertkin // 2378*8a978a17SVictor Perevertkin // Bit field combination of values from the WDF_REQUEST_SEND_OPTIONS_FLAGS 2379*8a978a17SVictor Perevertkin // enumeration 2380*8a978a17SVictor Perevertkin // 2381*8a978a17SVictor Perevertkin ULONG Flags; 2382*8a978a17SVictor Perevertkin 2383*8a978a17SVictor Perevertkin // 2384*8a978a17SVictor Perevertkin // Valid when WDF_REQUEST_SEND_OPTION_TIMEOUT is set 2385*8a978a17SVictor Perevertkin // 2386*8a978a17SVictor Perevertkin LONGLONG Timeout; 2387*8a978a17SVictor Perevertkin 2388*8a978a17SVictor Perevertkin } WDF_REQUEST_SEND_OPTIONS_V1_13, *PWDF_REQUEST_SEND_OPTIONS_V1_13; 2389*8a978a17SVictor Perevertkin 2390*8a978a17SVictor Perevertkin typedef struct _WDF_REQUEST_FORWARD_OPTIONS_V1_13 { 2391*8a978a17SVictor Perevertkin // 2392*8a978a17SVictor Perevertkin // Size of the structure in bytes 2393*8a978a17SVictor Perevertkin // 2394*8a978a17SVictor Perevertkin ULONG Size; 2395*8a978a17SVictor Perevertkin 2396*8a978a17SVictor Perevertkin // 2397*8a978a17SVictor Perevertkin // Bit field combination of values from the WDF_REQUEST_FORWARD_OPTIONS_FLAGS 2398*8a978a17SVictor Perevertkin // enumeration 2399*8a978a17SVictor Perevertkin // 2400*8a978a17SVictor Perevertkin ULONG Flags; 2401*8a978a17SVictor Perevertkin 2402*8a978a17SVictor Perevertkin } WDF_REQUEST_FORWARD_OPTIONS_V1_13, *PWDF_REQUEST_FORWARD_OPTIONS_V1_13; 2403*8a978a17SVictor Perevertkin 2404*8a978a17SVictor Perevertkin // End of versioning of structures for wdfrequest.h 2405*8a978a17SVictor Perevertkin 2406*8a978a17SVictor Perevertkin // 2407*8a978a17SVictor Perevertkin // Versioning of structures for wdfresource.h 2408*8a978a17SVictor Perevertkin // 2409*8a978a17SVictor Perevertkin // End of versioning of structures for wdfresource.h 2410*8a978a17SVictor Perevertkin 2411*8a978a17SVictor Perevertkin // 2412*8a978a17SVictor Perevertkin // Versioning of structures for wdfroletypes.h 2413*8a978a17SVictor Perevertkin // 2414*8a978a17SVictor Perevertkin // End of versioning of structures for wdfroletypes.h 2415*8a978a17SVictor Perevertkin 2416*8a978a17SVictor Perevertkin // 2417*8a978a17SVictor Perevertkin // Versioning of structures for wdfstring.h 2418*8a978a17SVictor Perevertkin // 2419*8a978a17SVictor Perevertkin // End of versioning of structures for wdfstring.h 2420*8a978a17SVictor Perevertkin 2421*8a978a17SVictor Perevertkin // 2422*8a978a17SVictor Perevertkin // Versioning of structures for wdfsync.h 2423*8a978a17SVictor Perevertkin // 2424*8a978a17SVictor Perevertkin // End of versioning of structures for wdfsync.h 2425*8a978a17SVictor Perevertkin 2426*8a978a17SVictor Perevertkin // 2427*8a978a17SVictor Perevertkin // Versioning of structures for wdftimer.h 2428*8a978a17SVictor Perevertkin // 2429*8a978a17SVictor Perevertkin typedef struct _WDF_TIMER_CONFIG_V1_13 { 2430*8a978a17SVictor Perevertkin ULONG Size; 2431*8a978a17SVictor Perevertkin 2432*8a978a17SVictor Perevertkin PFN_WDF_TIMER EvtTimerFunc; 2433*8a978a17SVictor Perevertkin 2434*8a978a17SVictor Perevertkin ULONG Period; 2435*8a978a17SVictor Perevertkin 2436*8a978a17SVictor Perevertkin // 2437*8a978a17SVictor Perevertkin // If this is TRUE, the Timer will automatically serialize 2438*8a978a17SVictor Perevertkin // with the event callback handlers of its Parent Object. 2439*8a978a17SVictor Perevertkin // 2440*8a978a17SVictor Perevertkin // Parent Object's callback constraints should be compatible 2441*8a978a17SVictor Perevertkin // with the Timer DPC (DISPATCH_LEVEL), or the request will fail. 2442*8a978a17SVictor Perevertkin // 2443*8a978a17SVictor Perevertkin BOOLEAN AutomaticSerialization; 2444*8a978a17SVictor Perevertkin 2445*8a978a17SVictor Perevertkin // 2446*8a978a17SVictor Perevertkin // Optional tolerance for the timer in milliseconds. 2447*8a978a17SVictor Perevertkin // 2448*8a978a17SVictor Perevertkin ULONG TolerableDelay; 2449*8a978a17SVictor Perevertkin 2450*8a978a17SVictor Perevertkin // 2451*8a978a17SVictor Perevertkin // If this is TRUE, high resolution timers will be used. The default 2452*8a978a17SVictor Perevertkin // value is FALSE 2453*8a978a17SVictor Perevertkin // 2454*8a978a17SVictor Perevertkin DECLSPEC_ALIGN(8) BOOLEAN UseHighResolutionTimer; 2455*8a978a17SVictor Perevertkin 2456*8a978a17SVictor Perevertkin } WDF_TIMER_CONFIG_V1_13, *PWDF_TIMER_CONFIG_V1_13; 2457*8a978a17SVictor Perevertkin 2458*8a978a17SVictor Perevertkin // End of versioning of structures for wdftimer.h 2459*8a978a17SVictor Perevertkin 2460*8a978a17SVictor Perevertkin // 2461*8a978a17SVictor Perevertkin // Versioning of structures for wdftriage.h 2462*8a978a17SVictor Perevertkin // 2463*8a978a17SVictor Perevertkin typedef struct _WDFOBJECT_TRIAGE_INFO_V1_13 { 2464*8a978a17SVictor Perevertkin // value 2465*8a978a17SVictor Perevertkin ULONG RawObjectSize; 2466*8a978a17SVictor Perevertkin 2467*8a978a17SVictor Perevertkin ULONG ObjectType; 2468*8a978a17SVictor Perevertkin 2469*8a978a17SVictor Perevertkin ULONG TotalObjectSize; 2470*8a978a17SVictor Perevertkin 2471*8a978a17SVictor Perevertkin ULONG ChildListHead; 2472*8a978a17SVictor Perevertkin 2473*8a978a17SVictor Perevertkin ULONG ChildEntry; 2474*8a978a17SVictor Perevertkin 2475*8a978a17SVictor Perevertkin ULONG Globals; 2476*8a978a17SVictor Perevertkin 2477*8a978a17SVictor Perevertkin ULONG ParentObject; 2478*8a978a17SVictor Perevertkin 2479*8a978a17SVictor Perevertkin } WDFOBJECT_TRIAGE_INFO_V1_13, *PWDFOBJECT_TRIAGE_INFO_V1_13; 2480*8a978a17SVictor Perevertkin 2481*8a978a17SVictor Perevertkin typedef struct _WDFCONTEXT_TRIAGE_INFO_V1_13 { 2482*8a978a17SVictor Perevertkin // value 2483*8a978a17SVictor Perevertkin ULONG HeaderSize; 2484*8a978a17SVictor Perevertkin 2485*8a978a17SVictor Perevertkin ULONG NextHeader; 2486*8a978a17SVictor Perevertkin 2487*8a978a17SVictor Perevertkin ULONG Object; 2488*8a978a17SVictor Perevertkin 2489*8a978a17SVictor Perevertkin ULONG TypeInfoPtr; 2490*8a978a17SVictor Perevertkin 2491*8a978a17SVictor Perevertkin ULONG Context; 2492*8a978a17SVictor Perevertkin 2493*8a978a17SVictor Perevertkin } WDFCONTEXT_TRIAGE_INFO_V1_13, *PWDFCONTEXT_TRIAGE_INFO_V1_13; 2494*8a978a17SVictor Perevertkin 2495*8a978a17SVictor Perevertkin typedef struct _WDFCONTEXTTYPE_TRIAGE_INFO_V1_13 { 2496*8a978a17SVictor Perevertkin // value 2497*8a978a17SVictor Perevertkin ULONG TypeInfoSize; 2498*8a978a17SVictor Perevertkin 2499*8a978a17SVictor Perevertkin ULONG ContextSize; 2500*8a978a17SVictor Perevertkin 2501*8a978a17SVictor Perevertkin ULONG ContextName; 2502*8a978a17SVictor Perevertkin 2503*8a978a17SVictor Perevertkin } WDFCONTEXTTYPE_TRIAGE_INFO_V1_13, *PWDFCONTEXTTYPE_TRIAGE_INFO_V1_13; 2504*8a978a17SVictor Perevertkin 2505*8a978a17SVictor Perevertkin typedef struct _WDFQUEUE_TRIAGE_INFO_V1_13 { 2506*8a978a17SVictor Perevertkin // value 2507*8a978a17SVictor Perevertkin ULONG QueueSize; 2508*8a978a17SVictor Perevertkin 2509*8a978a17SVictor Perevertkin ULONG IrpQueue1; 2510*8a978a17SVictor Perevertkin 2511*8a978a17SVictor Perevertkin ULONG IrpQueue2; 2512*8a978a17SVictor Perevertkin 2513*8a978a17SVictor Perevertkin ULONG RequestList1; 2514*8a978a17SVictor Perevertkin 2515*8a978a17SVictor Perevertkin ULONG RequestList2; 2516*8a978a17SVictor Perevertkin 2517*8a978a17SVictor Perevertkin ULONG FwdProgressContext; 2518*8a978a17SVictor Perevertkin 2519*8a978a17SVictor Perevertkin ULONG PkgIo; 2520*8a978a17SVictor Perevertkin 2521*8a978a17SVictor Perevertkin } WDFQUEUE_TRIAGE_INFO_V1_13, *PWDFQUEUE_TRIAGE_INFO_V1_13; 2522*8a978a17SVictor Perevertkin 2523*8a978a17SVictor Perevertkin typedef struct _WDFFWDPROGRESS_TRIAGE_INFO_V1_13 { 2524*8a978a17SVictor Perevertkin ULONG ReservedRequestList; 2525*8a978a17SVictor Perevertkin 2526*8a978a17SVictor Perevertkin ULONG ReservedRequestInUseList; 2527*8a978a17SVictor Perevertkin 2528*8a978a17SVictor Perevertkin ULONG PendedIrpList; 2529*8a978a17SVictor Perevertkin 2530*8a978a17SVictor Perevertkin } WDFFWDPROGRESS_TRIAGE_INFO_V1_13, *PWDFFWDPROGRESS_TRIAGE_INFO_V1_13; 2531*8a978a17SVictor Perevertkin 2532*8a978a17SVictor Perevertkin typedef struct _WDFIRPQUEUE_TRIAGE_INFO_V1_13 { 2533*8a978a17SVictor Perevertkin // value 2534*8a978a17SVictor Perevertkin ULONG IrpQueueSize; 2535*8a978a17SVictor Perevertkin 2536*8a978a17SVictor Perevertkin ULONG IrpListHeader; 2537*8a978a17SVictor Perevertkin 2538*8a978a17SVictor Perevertkin ULONG IrpListEntry; 2539*8a978a17SVictor Perevertkin 2540*8a978a17SVictor Perevertkin ULONG IrpContext; 2541*8a978a17SVictor Perevertkin 2542*8a978a17SVictor Perevertkin } WDFIRPQUEUE_TRIAGE_INFO_V1_13, *PWDFIRPQUEUE_TRIAGE_INFO_V1_13; 2543*8a978a17SVictor Perevertkin 2544*8a978a17SVictor Perevertkin typedef struct _WDFREQUEST_TRIAGE_INFO_V1_13 { 2545*8a978a17SVictor Perevertkin // value 2546*8a978a17SVictor Perevertkin ULONG RequestSize; 2547*8a978a17SVictor Perevertkin 2548*8a978a17SVictor Perevertkin ULONG CsqContext; 2549*8a978a17SVictor Perevertkin 2550*8a978a17SVictor Perevertkin // WDF irp wrapper, see below. 2551*8a978a17SVictor Perevertkin ULONG FxIrp; 2552*8a978a17SVictor Perevertkin 2553*8a978a17SVictor Perevertkin ULONG ListEntryQueueOwned; 2554*8a978a17SVictor Perevertkin 2555*8a978a17SVictor Perevertkin ULONG ListEntryQueueOwned2; 2556*8a978a17SVictor Perevertkin 2557*8a978a17SVictor Perevertkin ULONG RequestListEntry; 2558*8a978a17SVictor Perevertkin 2559*8a978a17SVictor Perevertkin ULONG FwdProgressList; 2560*8a978a17SVictor Perevertkin 2561*8a978a17SVictor Perevertkin } WDFREQUEST_TRIAGE_INFO_V1_13, *PWDFREQUEST_TRIAGE_INFO_V1_13; 2562*8a978a17SVictor Perevertkin 2563*8a978a17SVictor Perevertkin typedef struct _WDFDEVICE_TRIAGE_INFO_V1_13 { 2564*8a978a17SVictor Perevertkin // value 2565*8a978a17SVictor Perevertkin ULONG DeviceInitSize; 2566*8a978a17SVictor Perevertkin 2567*8a978a17SVictor Perevertkin ULONG DeviceDriver; 2568*8a978a17SVictor Perevertkin 2569*8a978a17SVictor Perevertkin } WDFDEVICE_TRIAGE_INFO_V1_13, *PWDFDEVICE_TRIAGE_INFO_V1_13; 2570*8a978a17SVictor Perevertkin 2571*8a978a17SVictor Perevertkin typedef struct _WDFIRP_TRIAGE_INFO_V1_13 { 2572*8a978a17SVictor Perevertkin // value 2573*8a978a17SVictor Perevertkin ULONG FxIrpSize; 2574*8a978a17SVictor Perevertkin 2575*8a978a17SVictor Perevertkin ULONG IrpPtr; 2576*8a978a17SVictor Perevertkin 2577*8a978a17SVictor Perevertkin } WDFIRP_TRIAGE_INFO_V1_13, *PWDFIRP_TRIAGE_INFO_V1_13; 2578*8a978a17SVictor Perevertkin 2579*8a978a17SVictor Perevertkin typedef struct _WDF_TRIAGE_INFO_V1_13 { 2580*8a978a17SVictor Perevertkin // 2581*8a978a17SVictor Perevertkin // Version. 2582*8a978a17SVictor Perevertkin // 2583*8a978a17SVictor Perevertkin ULONG WdfMajorVersion; 2584*8a978a17SVictor Perevertkin 2585*8a978a17SVictor Perevertkin ULONG WdfMinorVersion; 2586*8a978a17SVictor Perevertkin 2587*8a978a17SVictor Perevertkin ULONG TriageInfoMajorVersion; 2588*8a978a17SVictor Perevertkin 2589*8a978a17SVictor Perevertkin ULONG TriageInfoMinorVersion; 2590*8a978a17SVictor Perevertkin 2591*8a978a17SVictor Perevertkin // 2592*8a978a17SVictor Perevertkin // Reserved pointer. 2593*8a978a17SVictor Perevertkin // 2594*8a978a17SVictor Perevertkin PVOID Reserved; 2595*8a978a17SVictor Perevertkin 2596*8a978a17SVictor Perevertkin // 2597*8a978a17SVictor Perevertkin // WDF objects triage info. 2598*8a978a17SVictor Perevertkin // 2599*8a978a17SVictor Perevertkin PWDFOBJECT_TRIAGE_INFO_V1_13 WdfObjectTriageInfo; 2600*8a978a17SVictor Perevertkin 2601*8a978a17SVictor Perevertkin PWDFCONTEXT_TRIAGE_INFO_V1_13 WdfContextTriageInfo; 2602*8a978a17SVictor Perevertkin 2603*8a978a17SVictor Perevertkin PWDFCONTEXTTYPE_TRIAGE_INFO_V1_13 WdfContextTypeTriageInfo; 2604*8a978a17SVictor Perevertkin 2605*8a978a17SVictor Perevertkin PWDFQUEUE_TRIAGE_INFO_V1_13 WdfQueueTriageInfo; 2606*8a978a17SVictor Perevertkin 2607*8a978a17SVictor Perevertkin PWDFFWDPROGRESS_TRIAGE_INFO_V1_13 WdfFwdProgressTriageInfo; 2608*8a978a17SVictor Perevertkin 2609*8a978a17SVictor Perevertkin PWDFIRPQUEUE_TRIAGE_INFO_V1_13 WdfIrpQueueTriageInfo; 2610*8a978a17SVictor Perevertkin 2611*8a978a17SVictor Perevertkin PWDFREQUEST_TRIAGE_INFO_V1_13 WdfRequestTriageInfo; 2612*8a978a17SVictor Perevertkin 2613*8a978a17SVictor Perevertkin PWDFDEVICE_TRIAGE_INFO_V1_13 WdfDeviceTriageInfo; 2614*8a978a17SVictor Perevertkin 2615*8a978a17SVictor Perevertkin PWDFIRP_TRIAGE_INFO_V1_13 WdfIrpTriageInfo; 2616*8a978a17SVictor Perevertkin 2617*8a978a17SVictor Perevertkin } WDF_TRIAGE_INFO_V1_13, *PWDF_TRIAGE_INFO_V1_13; 2618*8a978a17SVictor Perevertkin 2619*8a978a17SVictor Perevertkin // End of versioning of structures for wdftriage.h 2620*8a978a17SVictor Perevertkin 2621*8a978a17SVictor Perevertkin // 2622*8a978a17SVictor Perevertkin // Versioning of structures for wdftypes.h 2623*8a978a17SVictor Perevertkin // 2624*8a978a17SVictor Perevertkin // End of versioning of structures for wdftypes.h 2625*8a978a17SVictor Perevertkin 2626*8a978a17SVictor Perevertkin // 2627*8a978a17SVictor Perevertkin // Versioning of structures for wdfUsb.h 2628*8a978a17SVictor Perevertkin // 2629*8a978a17SVictor Perevertkin typedef struct _WDF_USB_REQUEST_COMPLETION_PARAMS_V1_13 { 2630*8a978a17SVictor Perevertkin USBD_STATUS UsbdStatus; 2631*8a978a17SVictor Perevertkin 2632*8a978a17SVictor Perevertkin WDF_USB_REQUEST_TYPE Type; 2633*8a978a17SVictor Perevertkin 2634*8a978a17SVictor Perevertkin union { 2635*8a978a17SVictor Perevertkin struct { 2636*8a978a17SVictor Perevertkin WDFMEMORY Buffer; 2637*8a978a17SVictor Perevertkin 2638*8a978a17SVictor Perevertkin USHORT LangID; 2639*8a978a17SVictor Perevertkin 2640*8a978a17SVictor Perevertkin UCHAR StringIndex; 2641*8a978a17SVictor Perevertkin 2642*8a978a17SVictor Perevertkin // 2643*8a978a17SVictor Perevertkin // If STATUS_BUFFER_OVERFLOW is returned, this field will contain the 2644*8a978a17SVictor Perevertkin // number of bytes required to retrieve the entire string. 2645*8a978a17SVictor Perevertkin // 2646*8a978a17SVictor Perevertkin UCHAR RequiredSize; 2647*8a978a17SVictor Perevertkin 2648*8a978a17SVictor Perevertkin } DeviceString; 2649*8a978a17SVictor Perevertkin 2650*8a978a17SVictor Perevertkin struct { 2651*8a978a17SVictor Perevertkin WDFMEMORY Buffer; 2652*8a978a17SVictor Perevertkin 2653*8a978a17SVictor Perevertkin WDF_USB_CONTROL_SETUP_PACKET SetupPacket; 2654*8a978a17SVictor Perevertkin 2655*8a978a17SVictor Perevertkin ULONG Length; 2656*8a978a17SVictor Perevertkin 2657*8a978a17SVictor Perevertkin } DeviceControlTransfer; 2658*8a978a17SVictor Perevertkin 2659*8a978a17SVictor Perevertkin struct { 2660*8a978a17SVictor Perevertkin WDFMEMORY Buffer; 2661*8a978a17SVictor Perevertkin 2662*8a978a17SVictor Perevertkin } DeviceUrb; 2663*8a978a17SVictor Perevertkin 2664*8a978a17SVictor Perevertkin struct { 2665*8a978a17SVictor Perevertkin WDFMEMORY Buffer; 2666*8a978a17SVictor Perevertkin 2667*8a978a17SVictor Perevertkin size_t Length; 2668*8a978a17SVictor Perevertkin 2669*8a978a17SVictor Perevertkin size_t Offset; 2670*8a978a17SVictor Perevertkin 2671*8a978a17SVictor Perevertkin } PipeWrite; 2672*8a978a17SVictor Perevertkin 2673*8a978a17SVictor Perevertkin struct { 2674*8a978a17SVictor Perevertkin WDFMEMORY Buffer; 2675*8a978a17SVictor Perevertkin 2676*8a978a17SVictor Perevertkin size_t Length; 2677*8a978a17SVictor Perevertkin 2678*8a978a17SVictor Perevertkin size_t Offset; 2679*8a978a17SVictor Perevertkin 2680*8a978a17SVictor Perevertkin } PipeRead; 2681*8a978a17SVictor Perevertkin 2682*8a978a17SVictor Perevertkin struct { 2683*8a978a17SVictor Perevertkin WDFMEMORY Buffer; 2684*8a978a17SVictor Perevertkin 2685*8a978a17SVictor Perevertkin } PipeUrb; 2686*8a978a17SVictor Perevertkin 2687*8a978a17SVictor Perevertkin } Parameters; 2688*8a978a17SVictor Perevertkin 2689*8a978a17SVictor Perevertkin } WDF_USB_REQUEST_COMPLETION_PARAMS_V1_13, *PWDF_USB_REQUEST_COMPLETION_PARAMS_V1_13; 2690*8a978a17SVictor Perevertkin 2691*8a978a17SVictor Perevertkin typedef struct _WDF_USB_CONTINUOUS_READER_CONFIG_V1_13 { 2692*8a978a17SVictor Perevertkin // 2693*8a978a17SVictor Perevertkin // Size of the string in bytes 2694*8a978a17SVictor Perevertkin // 2695*8a978a17SVictor Perevertkin ULONG Size; 2696*8a978a17SVictor Perevertkin 2697*8a978a17SVictor Perevertkin // 2698*8a978a17SVictor Perevertkin // Number of bytes to send ask for from the usb device. 2699*8a978a17SVictor Perevertkin // 2700*8a978a17SVictor Perevertkin size_t TransferLength; 2701*8a978a17SVictor Perevertkin 2702*8a978a17SVictor Perevertkin // 2703*8a978a17SVictor Perevertkin // Number of bytes to allocate before the requested transfer length 2704*8a978a17SVictor Perevertkin // 2705*8a978a17SVictor Perevertkin size_t HeaderLength; 2706*8a978a17SVictor Perevertkin 2707*8a978a17SVictor Perevertkin // 2708*8a978a17SVictor Perevertkin // Number of bytes to allocate after the requested transfer length 2709*8a978a17SVictor Perevertkin // 2710*8a978a17SVictor Perevertkin size_t TrailerLength; 2711*8a978a17SVictor Perevertkin 2712*8a978a17SVictor Perevertkin // 2713*8a978a17SVictor Perevertkin // Number of reads to send to the device at once. If zero is specified, the 2714*8a978a17SVictor Perevertkin // default will be used. 2715*8a978a17SVictor Perevertkin // 2716*8a978a17SVictor Perevertkin UCHAR NumPendingReads; 2717*8a978a17SVictor Perevertkin 2718*8a978a17SVictor Perevertkin // 2719*8a978a17SVictor Perevertkin // Optional attributes to apply to each WDFMEMORY allocated for each read 2720*8a978a17SVictor Perevertkin // 2721*8a978a17SVictor Perevertkin PWDF_OBJECT_ATTRIBUTES_V1_13 BufferAttributes; 2722*8a978a17SVictor Perevertkin 2723*8a978a17SVictor Perevertkin // 2724*8a978a17SVictor Perevertkin // Event callback invoked when a read is completed 2725*8a978a17SVictor Perevertkin // 2726*8a978a17SVictor Perevertkin PFN_WDF_USB_READER_COMPLETION_ROUTINE EvtUsbTargetPipeReadComplete; 2727*8a978a17SVictor Perevertkin 2728*8a978a17SVictor Perevertkin // 2729*8a978a17SVictor Perevertkin // Context to be passed to EvtUsbTargetPipeReadComplete 2730*8a978a17SVictor Perevertkin // 2731*8a978a17SVictor Perevertkin WDFCONTEXT EvtUsbTargetPipeReadCompleteContext; 2732*8a978a17SVictor Perevertkin 2733*8a978a17SVictor Perevertkin // 2734*8a978a17SVictor Perevertkin // Event callback invoked when a reader fails. If TRUE is returned, the 2735*8a978a17SVictor Perevertkin // readers are restarted. 2736*8a978a17SVictor Perevertkin // 2737*8a978a17SVictor Perevertkin PFN_WDF_USB_READERS_FAILED EvtUsbTargetPipeReadersFailed; 2738*8a978a17SVictor Perevertkin 2739*8a978a17SVictor Perevertkin } WDF_USB_CONTINUOUS_READER_CONFIG_V1_13, *PWDF_USB_CONTINUOUS_READER_CONFIG_V1_13; 2740*8a978a17SVictor Perevertkin 2741*8a978a17SVictor Perevertkin typedef struct _WDF_USB_DEVICE_INFORMATION_V1_13 { 2742*8a978a17SVictor Perevertkin // 2743*8a978a17SVictor Perevertkin // Size of this structure in bytes 2744*8a978a17SVictor Perevertkin // 2745*8a978a17SVictor Perevertkin ULONG Size; 2746*8a978a17SVictor Perevertkin 2747*8a978a17SVictor Perevertkin // 2748*8a978a17SVictor Perevertkin // USBD version information 2749*8a978a17SVictor Perevertkin // 2750*8a978a17SVictor Perevertkin USBD_VERSION_INFORMATION UsbdVersionInformation; 2751*8a978a17SVictor Perevertkin 2752*8a978a17SVictor Perevertkin // 2753*8a978a17SVictor Perevertkin // Usb controller port capabilities 2754*8a978a17SVictor Perevertkin // 2755*8a978a17SVictor Perevertkin ULONG HcdPortCapabilities; 2756*8a978a17SVictor Perevertkin 2757*8a978a17SVictor Perevertkin // 2758*8a978a17SVictor Perevertkin // Bitfield of WDF_USB_DEVICE_TRAITS values 2759*8a978a17SVictor Perevertkin // 2760*8a978a17SVictor Perevertkin ULONG Traits; 2761*8a978a17SVictor Perevertkin 2762*8a978a17SVictor Perevertkin } WDF_USB_DEVICE_INFORMATION_V1_13, *PWDF_USB_DEVICE_INFORMATION_V1_13; 2763*8a978a17SVictor Perevertkin 2764*8a978a17SVictor Perevertkin typedef struct _WDF_USB_INTERFACE_SETTING_PAIR_V1_13 { 2765*8a978a17SVictor Perevertkin // 2766*8a978a17SVictor Perevertkin // Interface to select 2767*8a978a17SVictor Perevertkin // 2768*8a978a17SVictor Perevertkin WDFUSBINTERFACE UsbInterface; 2769*8a978a17SVictor Perevertkin 2770*8a978a17SVictor Perevertkin // 2771*8a978a17SVictor Perevertkin // Setting to select on UsbInterface 2772*8a978a17SVictor Perevertkin // 2773*8a978a17SVictor Perevertkin UCHAR SettingIndex; 2774*8a978a17SVictor Perevertkin 2775*8a978a17SVictor Perevertkin } WDF_USB_INTERFACE_SETTING_PAIR_V1_13, *PWDF_USB_INTERFACE_SETTING_PAIR_V1_13; 2776*8a978a17SVictor Perevertkin 2777*8a978a17SVictor Perevertkin typedef struct _WDF_USB_DEVICE_SELECT_CONFIG_PARAMS_V1_13 { 2778*8a978a17SVictor Perevertkin // 2779*8a978a17SVictor Perevertkin // Size of the structure in bytes 2780*8a978a17SVictor Perevertkin // 2781*8a978a17SVictor Perevertkin ULONG Size; 2782*8a978a17SVictor Perevertkin 2783*8a978a17SVictor Perevertkin // 2784*8a978a17SVictor Perevertkin // Type of select config, one of WdfUsbTargetDeviceSelectConfigType values 2785*8a978a17SVictor Perevertkin // 2786*8a978a17SVictor Perevertkin WdfUsbTargetDeviceSelectConfigType Type; 2787*8a978a17SVictor Perevertkin 2788*8a978a17SVictor Perevertkin union { 2789*8a978a17SVictor Perevertkin struct { 2790*8a978a17SVictor Perevertkin // 2791*8a978a17SVictor Perevertkin // Configuration descriptor to use 2792*8a978a17SVictor Perevertkin // 2793*8a978a17SVictor Perevertkin PUSB_CONFIGURATION_DESCRIPTOR ConfigurationDescriptor; 2794*8a978a17SVictor Perevertkin 2795*8a978a17SVictor Perevertkin // 2796*8a978a17SVictor Perevertkin // Array of interface descriptors pointers. 2797*8a978a17SVictor Perevertkin // 2798*8a978a17SVictor Perevertkin PUSB_INTERFACE_DESCRIPTOR * InterfaceDescriptors; 2799*8a978a17SVictor Perevertkin 2800*8a978a17SVictor Perevertkin // 2801*8a978a17SVictor Perevertkin // Number of elements in the InterfaceDescrtiptors pointer array. 2802*8a978a17SVictor Perevertkin // 2803*8a978a17SVictor Perevertkin ULONG NumInterfaceDescriptors; 2804*8a978a17SVictor Perevertkin 2805*8a978a17SVictor Perevertkin } Descriptor; 2806*8a978a17SVictor Perevertkin 2807*8a978a17SVictor Perevertkin struct { 2808*8a978a17SVictor Perevertkin // 2809*8a978a17SVictor Perevertkin // Preallocated select config URB formatted by the caller. 2810*8a978a17SVictor Perevertkin // Will be used, as supplied without modification, as the select 2811*8a978a17SVictor Perevertkin // config request. 2812*8a978a17SVictor Perevertkin // 2813*8a978a17SVictor Perevertkin PURB Urb; 2814*8a978a17SVictor Perevertkin 2815*8a978a17SVictor Perevertkin } Urb; 2816*8a978a17SVictor Perevertkin 2817*8a978a17SVictor Perevertkin struct { 2818*8a978a17SVictor Perevertkin // 2819*8a978a17SVictor Perevertkin // Number of pipes configured on the single after. This value is 2820*8a978a17SVictor Perevertkin // returned to the caller after a succssful call. 2821*8a978a17SVictor Perevertkin // 2822*8a978a17SVictor Perevertkin UCHAR NumberConfiguredPipes; 2823*8a978a17SVictor Perevertkin 2824*8a978a17SVictor Perevertkin // 2825*8a978a17SVictor Perevertkin // The interface which was configred. This value is returned to the 2826*8a978a17SVictor Perevertkin // caller after a successful call. 2827*8a978a17SVictor Perevertkin // 2828*8a978a17SVictor Perevertkin WDFUSBINTERFACE ConfiguredUsbInterface; 2829*8a978a17SVictor Perevertkin 2830*8a978a17SVictor Perevertkin } SingleInterface; 2831*8a978a17SVictor Perevertkin 2832*8a978a17SVictor Perevertkin struct { 2833*8a978a17SVictor Perevertkin // 2834*8a978a17SVictor Perevertkin // Number of interface pairs in the Pairs array 2835*8a978a17SVictor Perevertkin // 2836*8a978a17SVictor Perevertkin UCHAR NumberInterfaces; 2837*8a978a17SVictor Perevertkin 2838*8a978a17SVictor Perevertkin // 2839*8a978a17SVictor Perevertkin // Array of interface + settings 2840*8a978a17SVictor Perevertkin // 2841*8a978a17SVictor Perevertkin PWDF_USB_INTERFACE_SETTING_PAIR_V1_13 Pairs; 2842*8a978a17SVictor Perevertkin 2843*8a978a17SVictor Perevertkin // 2844*8a978a17SVictor Perevertkin // Number of interfaces which were configured after a successful call 2845*8a978a17SVictor Perevertkin // 2846*8a978a17SVictor Perevertkin UCHAR NumberOfConfiguredInterfaces; 2847*8a978a17SVictor Perevertkin 2848*8a978a17SVictor Perevertkin } MultiInterface; 2849*8a978a17SVictor Perevertkin 2850*8a978a17SVictor Perevertkin } Types; 2851*8a978a17SVictor Perevertkin 2852*8a978a17SVictor Perevertkin } WDF_USB_DEVICE_SELECT_CONFIG_PARAMS_V1_13, *PWDF_USB_DEVICE_SELECT_CONFIG_PARAMS_V1_13; 2853*8a978a17SVictor Perevertkin 2854*8a978a17SVictor Perevertkin typedef struct _WDF_USB_INTERFACE_SELECT_SETTING_PARAMS_V1_13 { 2855*8a978a17SVictor Perevertkin // 2856*8a978a17SVictor Perevertkin // Size of this data structure in bytes 2857*8a978a17SVictor Perevertkin // 2858*8a978a17SVictor Perevertkin ULONG Size; 2859*8a978a17SVictor Perevertkin 2860*8a978a17SVictor Perevertkin // 2861*8a978a17SVictor Perevertkin // Type of select interface as indicated by one of the 2862*8a978a17SVictor Perevertkin // WdfUsbTargetDeviceSelectSettingType values. 2863*8a978a17SVictor Perevertkin // 2864*8a978a17SVictor Perevertkin WdfUsbTargetDeviceSelectSettingType Type; 2865*8a978a17SVictor Perevertkin 2866*8a978a17SVictor Perevertkin union { 2867*8a978a17SVictor Perevertkin struct { 2868*8a978a17SVictor Perevertkin // 2869*8a978a17SVictor Perevertkin // Interface descriptor that will be used in the interface selection 2870*8a978a17SVictor Perevertkin // 2871*8a978a17SVictor Perevertkin PUSB_INTERFACE_DESCRIPTOR InterfaceDescriptor; 2872*8a978a17SVictor Perevertkin 2873*8a978a17SVictor Perevertkin } Descriptor; 2874*8a978a17SVictor Perevertkin 2875*8a978a17SVictor Perevertkin struct { 2876*8a978a17SVictor Perevertkin // 2877*8a978a17SVictor Perevertkin // The setting index of the WDFUSBINTERFACE to use 2878*8a978a17SVictor Perevertkin // 2879*8a978a17SVictor Perevertkin UCHAR SettingIndex; 2880*8a978a17SVictor Perevertkin 2881*8a978a17SVictor Perevertkin } Interface; 2882*8a978a17SVictor Perevertkin 2883*8a978a17SVictor Perevertkin struct { 2884*8a978a17SVictor Perevertkin // 2885*8a978a17SVictor Perevertkin // Preformatted select interface URB which will be used in the 2886*8a978a17SVictor Perevertkin // select interface request. 2887*8a978a17SVictor Perevertkin // 2888*8a978a17SVictor Perevertkin PURB Urb; 2889*8a978a17SVictor Perevertkin 2890*8a978a17SVictor Perevertkin } Urb; 2891*8a978a17SVictor Perevertkin 2892*8a978a17SVictor Perevertkin } Types; 2893*8a978a17SVictor Perevertkin 2894*8a978a17SVictor Perevertkin } WDF_USB_INTERFACE_SELECT_SETTING_PARAMS_V1_13, *PWDF_USB_INTERFACE_SELECT_SETTING_PARAMS_V1_13; 2895*8a978a17SVictor Perevertkin 2896*8a978a17SVictor Perevertkin typedef struct _WDF_USB_PIPE_INFORMATION_V1_13 { 2897*8a978a17SVictor Perevertkin // 2898*8a978a17SVictor Perevertkin // Size of the structure in bytes 2899*8a978a17SVictor Perevertkin // 2900*8a978a17SVictor Perevertkin ULONG Size; 2901*8a978a17SVictor Perevertkin 2902*8a978a17SVictor Perevertkin // 2903*8a978a17SVictor Perevertkin // Maximum packet size this device is capable of 2904*8a978a17SVictor Perevertkin // 2905*8a978a17SVictor Perevertkin ULONG MaximumPacketSize; 2906*8a978a17SVictor Perevertkin 2907*8a978a17SVictor Perevertkin // 2908*8a978a17SVictor Perevertkin // Raw endpoint address of the device as described by its descriptor 2909*8a978a17SVictor Perevertkin // 2910*8a978a17SVictor Perevertkin UCHAR EndpointAddress; 2911*8a978a17SVictor Perevertkin 2912*8a978a17SVictor Perevertkin // 2913*8a978a17SVictor Perevertkin // Polling interval 2914*8a978a17SVictor Perevertkin // 2915*8a978a17SVictor Perevertkin UCHAR Interval; 2916*8a978a17SVictor Perevertkin 2917*8a978a17SVictor Perevertkin // 2918*8a978a17SVictor Perevertkin // Which alternate setting this structure is relevant for 2919*8a978a17SVictor Perevertkin // 2920*8a978a17SVictor Perevertkin UCHAR SettingIndex; 2921*8a978a17SVictor Perevertkin 2922*8a978a17SVictor Perevertkin // 2923*8a978a17SVictor Perevertkin // The type of the pipe 2924*8a978a17SVictor Perevertkin WDF_USB_PIPE_TYPE PipeType; 2925*8a978a17SVictor Perevertkin 2926*8a978a17SVictor Perevertkin // 2927*8a978a17SVictor Perevertkin // Maximum size of one transfer which should be sent to the host controller 2928*8a978a17SVictor Perevertkin // 2929*8a978a17SVictor Perevertkin ULONG MaximumTransferSize; 2930*8a978a17SVictor Perevertkin 2931*8a978a17SVictor Perevertkin } WDF_USB_PIPE_INFORMATION_V1_13, *PWDF_USB_PIPE_INFORMATION_V1_13; 2932*8a978a17SVictor Perevertkin 2933*8a978a17SVictor Perevertkin typedef struct _WDF_USB_DEVICE_CREATE_CONFIG_V1_13 { 2934*8a978a17SVictor Perevertkin // 2935*8a978a17SVictor Perevertkin // Size of this structure in bytes 2936*8a978a17SVictor Perevertkin // 2937*8a978a17SVictor Perevertkin ULONG Size; 2938*8a978a17SVictor Perevertkin 2939*8a978a17SVictor Perevertkin // 2940*8a978a17SVictor Perevertkin // USBD Client Contraction of the Wdf Client 2941*8a978a17SVictor Perevertkin // 2942*8a978a17SVictor Perevertkin ULONG USBDClientContractVersion; 2943*8a978a17SVictor Perevertkin 2944*8a978a17SVictor Perevertkin } WDF_USB_DEVICE_CREATE_CONFIG_V1_13, *PWDF_USB_DEVICE_CREATE_CONFIG_V1_13; 2945*8a978a17SVictor Perevertkin 2946*8a978a17SVictor Perevertkin // End of versioning of structures for wdfUsb.h 2947*8a978a17SVictor Perevertkin 2948*8a978a17SVictor Perevertkin // 2949*8a978a17SVictor Perevertkin // Versioning of structures for wdfverifier.h 2950*8a978a17SVictor Perevertkin // 2951*8a978a17SVictor Perevertkin // End of versioning of structures for wdfverifier.h 2952*8a978a17SVictor Perevertkin 2953*8a978a17SVictor Perevertkin // 2954*8a978a17SVictor Perevertkin // Versioning of structures for wdfWMI.h 2955*8a978a17SVictor Perevertkin // 2956*8a978a17SVictor Perevertkin typedef struct _WDF_WMI_PROVIDER_CONFIG_V1_13 { 2957*8a978a17SVictor Perevertkin // 2958*8a978a17SVictor Perevertkin // Size of this structure in bytes 2959*8a978a17SVictor Perevertkin // 2960*8a978a17SVictor Perevertkin ULONG Size; 2961*8a978a17SVictor Perevertkin 2962*8a978a17SVictor Perevertkin // 2963*8a978a17SVictor Perevertkin // The GUID being registered 2964*8a978a17SVictor Perevertkin // 2965*8a978a17SVictor Perevertkin GUID Guid; 2966*8a978a17SVictor Perevertkin 2967*8a978a17SVictor Perevertkin // 2968*8a978a17SVictor Perevertkin // Combination of values from the enum WDF_WMI_PROVIDER_FLAGS 2969*8a978a17SVictor Perevertkin // 2970*8a978a17SVictor Perevertkin ULONG Flags; 2971*8a978a17SVictor Perevertkin 2972*8a978a17SVictor Perevertkin // 2973*8a978a17SVictor Perevertkin // Minimum expected buffer size for query and set instance requests. 2974*8a978a17SVictor Perevertkin // Ignored if WdfWmiProviderEventOnly is set in Flags. 2975*8a978a17SVictor Perevertkin // 2976*8a978a17SVictor Perevertkin ULONG MinInstanceBufferSize; 2977*8a978a17SVictor Perevertkin 2978*8a978a17SVictor Perevertkin // 2979*8a978a17SVictor Perevertkin // Callback when caller is opening a provider which ha been marked as 2980*8a978a17SVictor Perevertkin // expensive or when a caller is interested in events. 2981*8a978a17SVictor Perevertkin // 2982*8a978a17SVictor Perevertkin PFN_WDF_WMI_PROVIDER_FUNCTION_CONTROL EvtWmiProviderFunctionControl; 2983*8a978a17SVictor Perevertkin 2984*8a978a17SVictor Perevertkin } WDF_WMI_PROVIDER_CONFIG_V1_13, *PWDF_WMI_PROVIDER_CONFIG_V1_13; 2985*8a978a17SVictor Perevertkin 2986*8a978a17SVictor Perevertkin typedef struct _WDF_WMI_INSTANCE_CONFIG_V1_13 { 2987*8a978a17SVictor Perevertkin // 2988*8a978a17SVictor Perevertkin // Size of the structure in bytes 2989*8a978a17SVictor Perevertkin // 2990*8a978a17SVictor Perevertkin ULONG Size; 2991*8a978a17SVictor Perevertkin 2992*8a978a17SVictor Perevertkin // 2993*8a978a17SVictor Perevertkin // Optional parameter. If NULL, ProviderConfig must be set to a valid pointer 2994*8a978a17SVictor Perevertkin // value. If specified, indicates the provider to create an instance for. 2995*8a978a17SVictor Perevertkin // 2996*8a978a17SVictor Perevertkin WDFWMIPROVIDER Provider; 2997*8a978a17SVictor Perevertkin 2998*8a978a17SVictor Perevertkin // 2999*8a978a17SVictor Perevertkin // Optional parameter. If NULL, Provider must be set to a valid handle 3000*8a978a17SVictor Perevertkin // value. If specifeid, indicates the configuration for a provider to be 3001*8a978a17SVictor Perevertkin // created and for this instance to be associated with. 3002*8a978a17SVictor Perevertkin // 3003*8a978a17SVictor Perevertkin PWDF_WMI_PROVIDER_CONFIG_V1_13 ProviderConfig; 3004*8a978a17SVictor Perevertkin 3005*8a978a17SVictor Perevertkin // 3006*8a978a17SVictor Perevertkin // If the Provider is configured as read only and this field is set to TRUE, 3007*8a978a17SVictor Perevertkin // the EvtWmiInstanceQueryInstance is ignored and WDF will blindly copy the 3008*8a978a17SVictor Perevertkin // context associated with this instance (using RtlCopyMemory, with no locks 3009*8a978a17SVictor Perevertkin // held) into the query buffer. 3010*8a978a17SVictor Perevertkin // 3011*8a978a17SVictor Perevertkin BOOLEAN UseContextForQuery; 3012*8a978a17SVictor Perevertkin 3013*8a978a17SVictor Perevertkin // 3014*8a978a17SVictor Perevertkin // If TRUE, the instance will be registered as well as created. 3015*8a978a17SVictor Perevertkin // 3016*8a978a17SVictor Perevertkin BOOLEAN Register; 3017*8a978a17SVictor Perevertkin 3018*8a978a17SVictor Perevertkin // 3019*8a978a17SVictor Perevertkin // Callback when caller wants to query the entire data item's buffer. 3020*8a978a17SVictor Perevertkin // 3021*8a978a17SVictor Perevertkin PFN_WDF_WMI_INSTANCE_QUERY_INSTANCE EvtWmiInstanceQueryInstance; 3022*8a978a17SVictor Perevertkin 3023*8a978a17SVictor Perevertkin // 3024*8a978a17SVictor Perevertkin // Callback when caller wants to set the entire data item's buffer. 3025*8a978a17SVictor Perevertkin // 3026*8a978a17SVictor Perevertkin PFN_WDF_WMI_INSTANCE_SET_INSTANCE EvtWmiInstanceSetInstance; 3027*8a978a17SVictor Perevertkin 3028*8a978a17SVictor Perevertkin // 3029*8a978a17SVictor Perevertkin // Callback when caller wants to set a single field in the data item's buffer 3030*8a978a17SVictor Perevertkin // 3031*8a978a17SVictor Perevertkin PFN_WDF_WMI_INSTANCE_SET_ITEM EvtWmiInstanceSetItem; 3032*8a978a17SVictor Perevertkin 3033*8a978a17SVictor Perevertkin // 3034*8a978a17SVictor Perevertkin // Callback when caller wants to execute a method on the data item. 3035*8a978a17SVictor Perevertkin // 3036*8a978a17SVictor Perevertkin PFN_WDF_WMI_INSTANCE_EXECUTE_METHOD EvtWmiInstanceExecuteMethod; 3037*8a978a17SVictor Perevertkin 3038*8a978a17SVictor Perevertkin } WDF_WMI_INSTANCE_CONFIG_V1_13, *PWDF_WMI_INSTANCE_CONFIG_V1_13; 3039*8a978a17SVictor Perevertkin 3040*8a978a17SVictor Perevertkin // End of versioning of structures for wdfWMI.h 3041*8a978a17SVictor Perevertkin 3042*8a978a17SVictor Perevertkin // 3043*8a978a17SVictor Perevertkin // Versioning of structures for wdfworkitem.h 3044*8a978a17SVictor Perevertkin // 3045*8a978a17SVictor Perevertkin typedef struct _WDF_WORKITEM_CONFIG_V1_13 { 3046*8a978a17SVictor Perevertkin ULONG Size; 3047*8a978a17SVictor Perevertkin 3048*8a978a17SVictor Perevertkin PFN_WDF_WORKITEM EvtWorkItemFunc; 3049*8a978a17SVictor Perevertkin 3050*8a978a17SVictor Perevertkin // 3051*8a978a17SVictor Perevertkin // If this is TRUE, the workitem will automatically serialize 3052*8a978a17SVictor Perevertkin // with the event callback handlers of its Parent Object. 3053*8a978a17SVictor Perevertkin // 3054*8a978a17SVictor Perevertkin // Parent Object's callback constraints should be compatible 3055*8a978a17SVictor Perevertkin // with the work item (PASSIVE_LEVEL), or the request will fail. 3056*8a978a17SVictor Perevertkin // 3057*8a978a17SVictor Perevertkin BOOLEAN AutomaticSerialization; 3058*8a978a17SVictor Perevertkin 3059*8a978a17SVictor Perevertkin } WDF_WORKITEM_CONFIG_V1_13, *PWDF_WORKITEM_CONFIG_V1_13; 3060*8a978a17SVictor Perevertkin 3061*8a978a17SVictor Perevertkin // End of versioning of structures for wdfworkitem.h 3062*8a978a17SVictor Perevertkin 3063*8a978a17SVictor Perevertkin 3064*8a978a17SVictor Perevertkin #endif // _WDF_V1_13_TYPES_H_ 3065