1*8a978a17SVictor Perevertkin #ifndef _WDF_V2_15_TYPES_H_ 2*8a978a17SVictor Perevertkin #define _WDF_V2_15_TYPES_H_ 3*8a978a17SVictor Perevertkin 4*8a978a17SVictor Perevertkin 5*8a978a17SVictor Perevertkin typedef enum _WDFFUNCENUM_V2_15 { 6*8a978a17SVictor Perevertkin WdfFunctionTableNumEntries_V2_15 = 257, 7*8a978a17SVictor Perevertkin } WDFFUNCENUM_V2_15; 8*8a978a17SVictor Perevertkin 9*8a978a17SVictor Perevertkin typedef struct _WDF_POWER_ROUTINE_TIMED_OUT_DATA_V2_15 *PWDF_POWER_ROUTINE_TIMED_OUT_DATA_V2_15; 10*8a978a17SVictor Perevertkin typedef const struct _WDF_POWER_ROUTINE_TIMED_OUT_DATA_V2_15 *PCWDF_POWER_ROUTINE_TIMED_OUT_DATA_V2_15; 11*8a978a17SVictor Perevertkin typedef struct _WDF_REQUEST_FATAL_ERROR_INFORMATION_LENGTH_MISMATCH_DATA_V2_15 *PWDF_REQUEST_FATAL_ERROR_INFORMATION_LENGTH_MISMATCH_DATA_V2_15; 12*8a978a17SVictor Perevertkin typedef const struct _WDF_REQUEST_FATAL_ERROR_INFORMATION_LENGTH_MISMATCH_DATA_V2_15 *PCWDF_REQUEST_FATAL_ERROR_INFORMATION_LENGTH_MISMATCH_DATA_V2_15; 13*8a978a17SVictor Perevertkin typedef struct _WDF_QUEUE_FATAL_ERROR_DATA_V2_15 *PWDF_QUEUE_FATAL_ERROR_DATA_V2_15; 14*8a978a17SVictor Perevertkin typedef const struct _WDF_QUEUE_FATAL_ERROR_DATA_V2_15 *PCWDF_QUEUE_FATAL_ERROR_DATA_V2_15; 15*8a978a17SVictor Perevertkin typedef struct _WDF_CHILD_IDENTIFICATION_DESCRIPTION_HEADER_V2_15 *PWDF_CHILD_IDENTIFICATION_DESCRIPTION_HEADER_V2_15; 16*8a978a17SVictor Perevertkin typedef const struct _WDF_CHILD_IDENTIFICATION_DESCRIPTION_HEADER_V2_15 *PCWDF_CHILD_IDENTIFICATION_DESCRIPTION_HEADER_V2_15; 17*8a978a17SVictor Perevertkin typedef struct _WDF_CHILD_ADDRESS_DESCRIPTION_HEADER_V2_15 *PWDF_CHILD_ADDRESS_DESCRIPTION_HEADER_V2_15; 18*8a978a17SVictor Perevertkin typedef const struct _WDF_CHILD_ADDRESS_DESCRIPTION_HEADER_V2_15 *PCWDF_CHILD_ADDRESS_DESCRIPTION_HEADER_V2_15; 19*8a978a17SVictor Perevertkin typedef struct _WDF_CHILD_RETRIEVE_INFO_V2_15 *PWDF_CHILD_RETRIEVE_INFO_V2_15; 20*8a978a17SVictor Perevertkin typedef const struct _WDF_CHILD_RETRIEVE_INFO_V2_15 *PCWDF_CHILD_RETRIEVE_INFO_V2_15; 21*8a978a17SVictor Perevertkin typedef struct _WDF_CHILD_LIST_CONFIG_V2_15 *PWDF_CHILD_LIST_CONFIG_V2_15; 22*8a978a17SVictor Perevertkin typedef const struct _WDF_CHILD_LIST_CONFIG_V2_15 *PCWDF_CHILD_LIST_CONFIG_V2_15; 23*8a978a17SVictor Perevertkin typedef struct _WDF_CHILD_LIST_ITERATOR_V2_15 *PWDF_CHILD_LIST_ITERATOR_V2_15; 24*8a978a17SVictor Perevertkin typedef const struct _WDF_CHILD_LIST_ITERATOR_V2_15 *PCWDF_CHILD_LIST_ITERATOR_V2_15; 25*8a978a17SVictor Perevertkin typedef struct _WDF_COMMON_BUFFER_CONFIG_V2_15 *PWDF_COMMON_BUFFER_CONFIG_V2_15; 26*8a978a17SVictor Perevertkin typedef const struct _WDF_COMMON_BUFFER_CONFIG_V2_15 *PCWDF_COMMON_BUFFER_CONFIG_V2_15; 27*8a978a17SVictor Perevertkin typedef struct _WDFCX_FILEOBJECT_CONFIG_V2_15 *PWDFCX_FILEOBJECT_CONFIG_V2_15; 28*8a978a17SVictor Perevertkin typedef const struct _WDFCX_FILEOBJECT_CONFIG_V2_15 *PCWDFCX_FILEOBJECT_CONFIG_V2_15; 29*8a978a17SVictor Perevertkin typedef struct _WDF_CLASS_EXTENSION_DESCRIPTOR_V2_15 *PWDF_CLASS_EXTENSION_DESCRIPTOR_V2_15; 30*8a978a17SVictor Perevertkin typedef const struct _WDF_CLASS_EXTENSION_DESCRIPTOR_V2_15 *PCWDF_CLASS_EXTENSION_DESCRIPTOR_V2_15; 31*8a978a17SVictor Perevertkin typedef struct _WDF_CLASS_VERSION_V2_15 *PWDF_CLASS_VERSION_V2_15; 32*8a978a17SVictor Perevertkin typedef const struct _WDF_CLASS_VERSION_V2_15 *PCWDF_CLASS_VERSION_V2_15; 33*8a978a17SVictor Perevertkin typedef struct _WDF_CLASS_BIND_INFO_V2_15 *PWDF_CLASS_BIND_INFO_V2_15; 34*8a978a17SVictor Perevertkin typedef const struct _WDF_CLASS_BIND_INFO_V2_15 *PCWDF_CLASS_BIND_INFO_V2_15; 35*8a978a17SVictor Perevertkin typedef struct _WDF_CLASS_LIBRARY_INFO_V2_15 *PWDF_CLASS_LIBRARY_INFO_V2_15; 36*8a978a17SVictor Perevertkin typedef const struct _WDF_CLASS_LIBRARY_INFO_V2_15 *PCWDF_CLASS_LIBRARY_INFO_V2_15; 37*8a978a17SVictor Perevertkin typedef struct _WDF_FILEOBJECT_CONFIG_V2_15 *PWDF_FILEOBJECT_CONFIG_V2_15; 38*8a978a17SVictor Perevertkin typedef const struct _WDF_FILEOBJECT_CONFIG_V2_15 *PCWDF_FILEOBJECT_CONFIG_V2_15; 39*8a978a17SVictor Perevertkin typedef struct _WDF_DEVICE_PNP_NOTIFICATION_DATA_V2_15 *PWDF_DEVICE_PNP_NOTIFICATION_DATA_V2_15; 40*8a978a17SVictor Perevertkin typedef const struct _WDF_DEVICE_PNP_NOTIFICATION_DATA_V2_15 *PCWDF_DEVICE_PNP_NOTIFICATION_DATA_V2_15; 41*8a978a17SVictor Perevertkin typedef struct _WDF_DEVICE_POWER_NOTIFICATION_DATA_V2_15 *PWDF_DEVICE_POWER_NOTIFICATION_DATA_V2_15; 42*8a978a17SVictor Perevertkin typedef const struct _WDF_DEVICE_POWER_NOTIFICATION_DATA_V2_15 *PCWDF_DEVICE_POWER_NOTIFICATION_DATA_V2_15; 43*8a978a17SVictor Perevertkin typedef struct _WDF_DEVICE_POWER_POLICY_NOTIFICATION_DATA_V2_15 *PWDF_DEVICE_POWER_POLICY_NOTIFICATION_DATA_V2_15; 44*8a978a17SVictor Perevertkin typedef const struct _WDF_DEVICE_POWER_POLICY_NOTIFICATION_DATA_V2_15 *PCWDF_DEVICE_POWER_POLICY_NOTIFICATION_DATA_V2_15; 45*8a978a17SVictor Perevertkin typedef struct _WDF_PNPPOWER_EVENT_CALLBACKS_V2_15 *PWDF_PNPPOWER_EVENT_CALLBACKS_V2_15; 46*8a978a17SVictor Perevertkin typedef const struct _WDF_PNPPOWER_EVENT_CALLBACKS_V2_15 *PCWDF_PNPPOWER_EVENT_CALLBACKS_V2_15; 47*8a978a17SVictor Perevertkin typedef struct _WDF_POWER_POLICY_EVENT_CALLBACKS_V2_15 *PWDF_POWER_POLICY_EVENT_CALLBACKS_V2_15; 48*8a978a17SVictor Perevertkin typedef const struct _WDF_POWER_POLICY_EVENT_CALLBACKS_V2_15 *PCWDF_POWER_POLICY_EVENT_CALLBACKS_V2_15; 49*8a978a17SVictor Perevertkin typedef struct _WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS_V2_15 *PWDF_DEVICE_POWER_POLICY_IDLE_SETTINGS_V2_15; 50*8a978a17SVictor Perevertkin typedef const struct _WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS_V2_15 *PCWDF_DEVICE_POWER_POLICY_IDLE_SETTINGS_V2_15; 51*8a978a17SVictor Perevertkin typedef struct _WDF_DEVICE_POWER_POLICY_WAKE_SETTINGS_V2_15 *PWDF_DEVICE_POWER_POLICY_WAKE_SETTINGS_V2_15; 52*8a978a17SVictor Perevertkin typedef const struct _WDF_DEVICE_POWER_POLICY_WAKE_SETTINGS_V2_15 *PCWDF_DEVICE_POWER_POLICY_WAKE_SETTINGS_V2_15; 53*8a978a17SVictor Perevertkin typedef struct _WDF_DEVICE_STATE_V2_15 *PWDF_DEVICE_STATE_V2_15; 54*8a978a17SVictor Perevertkin typedef const struct _WDF_DEVICE_STATE_V2_15 *PCWDF_DEVICE_STATE_V2_15; 55*8a978a17SVictor Perevertkin typedef struct _WDF_DEVICE_PNP_CAPABILITIES_V2_15 *PWDF_DEVICE_PNP_CAPABILITIES_V2_15; 56*8a978a17SVictor Perevertkin typedef const struct _WDF_DEVICE_PNP_CAPABILITIES_V2_15 *PCWDF_DEVICE_PNP_CAPABILITIES_V2_15; 57*8a978a17SVictor Perevertkin typedef struct _WDF_DEVICE_POWER_CAPABILITIES_V2_15 *PWDF_DEVICE_POWER_CAPABILITIES_V2_15; 58*8a978a17SVictor Perevertkin typedef const struct _WDF_DEVICE_POWER_CAPABILITIES_V2_15 *PCWDF_DEVICE_POWER_CAPABILITIES_V2_15; 59*8a978a17SVictor Perevertkin typedef struct _WDF_REMOVE_LOCK_OPTIONS_V2_15 *PWDF_REMOVE_LOCK_OPTIONS_V2_15; 60*8a978a17SVictor Perevertkin typedef const struct _WDF_REMOVE_LOCK_OPTIONS_V2_15 *PCWDF_REMOVE_LOCK_OPTIONS_V2_15; 61*8a978a17SVictor Perevertkin typedef struct _WDF_POWER_FRAMEWORK_SETTINGS_V2_15 *PWDF_POWER_FRAMEWORK_SETTINGS_V2_15; 62*8a978a17SVictor Perevertkin typedef const struct _WDF_POWER_FRAMEWORK_SETTINGS_V2_15 *PCWDF_POWER_FRAMEWORK_SETTINGS_V2_15; 63*8a978a17SVictor Perevertkin typedef struct _WDF_IO_TYPE_CONFIG_V2_15 *PWDF_IO_TYPE_CONFIG_V2_15; 64*8a978a17SVictor Perevertkin typedef const struct _WDF_IO_TYPE_CONFIG_V2_15 *PCWDF_IO_TYPE_CONFIG_V2_15; 65*8a978a17SVictor Perevertkin typedef struct _WDF_DEVICE_INTERFACE_PROPERTY_DATA_V2_15 *PWDF_DEVICE_INTERFACE_PROPERTY_DATA_V2_15; 66*8a978a17SVictor Perevertkin typedef const struct _WDF_DEVICE_INTERFACE_PROPERTY_DATA_V2_15 *PCWDF_DEVICE_INTERFACE_PROPERTY_DATA_V2_15; 67*8a978a17SVictor Perevertkin typedef struct _WDF_DEVICE_PROPERTY_DATA_V2_15 *PWDF_DEVICE_PROPERTY_DATA_V2_15; 68*8a978a17SVictor Perevertkin typedef const struct _WDF_DEVICE_PROPERTY_DATA_V2_15 *PCWDF_DEVICE_PROPERTY_DATA_V2_15; 69*8a978a17SVictor Perevertkin typedef struct _WDF_DMA_ENABLER_CONFIG_V2_15 *PWDF_DMA_ENABLER_CONFIG_V2_15; 70*8a978a17SVictor Perevertkin typedef const struct _WDF_DMA_ENABLER_CONFIG_V2_15 *PCWDF_DMA_ENABLER_CONFIG_V2_15; 71*8a978a17SVictor Perevertkin typedef struct _WDF_DMA_SYSTEM_PROFILE_CONFIG_V2_15 *PWDF_DMA_SYSTEM_PROFILE_CONFIG_V2_15; 72*8a978a17SVictor Perevertkin typedef const struct _WDF_DMA_SYSTEM_PROFILE_CONFIG_V2_15 *PCWDF_DMA_SYSTEM_PROFILE_CONFIG_V2_15; 73*8a978a17SVictor Perevertkin typedef struct _WDF_DPC_CONFIG_V2_15 *PWDF_DPC_CONFIG_V2_15; 74*8a978a17SVictor Perevertkin typedef const struct _WDF_DPC_CONFIG_V2_15 *PCWDF_DPC_CONFIG_V2_15; 75*8a978a17SVictor Perevertkin typedef struct _WDF_DRIVER_CONFIG_V2_15 *PWDF_DRIVER_CONFIG_V2_15; 76*8a978a17SVictor Perevertkin typedef const struct _WDF_DRIVER_CONFIG_V2_15 *PCWDF_DRIVER_CONFIG_V2_15; 77*8a978a17SVictor Perevertkin typedef struct _WDF_DRIVER_VERSION_AVAILABLE_PARAMS_V2_15 *PWDF_DRIVER_VERSION_AVAILABLE_PARAMS_V2_15; 78*8a978a17SVictor Perevertkin typedef const struct _WDF_DRIVER_VERSION_AVAILABLE_PARAMS_V2_15 *PCWDF_DRIVER_VERSION_AVAILABLE_PARAMS_V2_15; 79*8a978a17SVictor Perevertkin typedef struct _WDF_FDO_EVENT_CALLBACKS_V2_15 *PWDF_FDO_EVENT_CALLBACKS_V2_15; 80*8a978a17SVictor Perevertkin typedef const struct _WDF_FDO_EVENT_CALLBACKS_V2_15 *PCWDF_FDO_EVENT_CALLBACKS_V2_15; 81*8a978a17SVictor Perevertkin typedef struct _WDF_DRIVER_GLOBALS_V2_15 *PWDF_DRIVER_GLOBALS_V2_15; 82*8a978a17SVictor Perevertkin typedef const struct _WDF_DRIVER_GLOBALS_V2_15 *PCWDF_DRIVER_GLOBALS_V2_15; 83*8a978a17SVictor Perevertkin typedef struct _WDF_INTERRUPT_CONFIG_V2_15 *PWDF_INTERRUPT_CONFIG_V2_15; 84*8a978a17SVictor Perevertkin typedef const struct _WDF_INTERRUPT_CONFIG_V2_15 *PCWDF_INTERRUPT_CONFIG_V2_15; 85*8a978a17SVictor Perevertkin typedef struct _WDF_INTERRUPT_INFO_V2_15 *PWDF_INTERRUPT_INFO_V2_15; 86*8a978a17SVictor Perevertkin typedef const struct _WDF_INTERRUPT_INFO_V2_15 *PCWDF_INTERRUPT_INFO_V2_15; 87*8a978a17SVictor Perevertkin typedef struct _WDF_INTERRUPT_EXTENDED_POLICY_V2_15 *PWDF_INTERRUPT_EXTENDED_POLICY_V2_15; 88*8a978a17SVictor Perevertkin typedef const struct _WDF_INTERRUPT_EXTENDED_POLICY_V2_15 *PCWDF_INTERRUPT_EXTENDED_POLICY_V2_15; 89*8a978a17SVictor Perevertkin typedef struct _WDF_IO_QUEUE_CONFIG_V2_15 *PWDF_IO_QUEUE_CONFIG_V2_15; 90*8a978a17SVictor Perevertkin typedef const struct _WDF_IO_QUEUE_CONFIG_V2_15 *PCWDF_IO_QUEUE_CONFIG_V2_15; 91*8a978a17SVictor Perevertkin typedef struct _WDF_IO_QUEUE_FORWARD_PROGRESS_POLICY_V2_15 *PWDF_IO_QUEUE_FORWARD_PROGRESS_POLICY_V2_15; 92*8a978a17SVictor Perevertkin typedef const struct _WDF_IO_QUEUE_FORWARD_PROGRESS_POLICY_V2_15 *PCWDF_IO_QUEUE_FORWARD_PROGRESS_POLICY_V2_15; 93*8a978a17SVictor Perevertkin typedef struct _WDF_IO_TARGET_OPEN_PARAMS_V2_15 *PWDF_IO_TARGET_OPEN_PARAMS_V2_15; 94*8a978a17SVictor Perevertkin typedef const struct _WDF_IO_TARGET_OPEN_PARAMS_V2_15 *PCWDF_IO_TARGET_OPEN_PARAMS_V2_15; 95*8a978a17SVictor Perevertkin typedef struct _WDFMEMORY_OFFSET_V2_15 *PWDFMEMORY_OFFSET_V2_15; 96*8a978a17SVictor Perevertkin typedef const struct _WDFMEMORY_OFFSET_V2_15 *PCWDFMEMORY_OFFSET_V2_15; 97*8a978a17SVictor Perevertkin typedef struct _WDF_MEMORY_DESCRIPTOR_V2_15 *PWDF_MEMORY_DESCRIPTOR_V2_15; 98*8a978a17SVictor Perevertkin typedef const struct _WDF_MEMORY_DESCRIPTOR_V2_15 *PCWDF_MEMORY_DESCRIPTOR_V2_15; 99*8a978a17SVictor Perevertkin typedef struct _WDF_OBJECT_ATTRIBUTES_V2_15 *PWDF_OBJECT_ATTRIBUTES_V2_15; 100*8a978a17SVictor Perevertkin typedef const struct _WDF_OBJECT_ATTRIBUTES_V2_15 *PCWDF_OBJECT_ATTRIBUTES_V2_15; 101*8a978a17SVictor Perevertkin typedef struct _WDF_OBJECT_CONTEXT_TYPE_INFO_V2_15 *PWDF_OBJECT_CONTEXT_TYPE_INFO_V2_15; 102*8a978a17SVictor Perevertkin typedef const struct _WDF_OBJECT_CONTEXT_TYPE_INFO_V2_15 *PCWDF_OBJECT_CONTEXT_TYPE_INFO_V2_15; 103*8a978a17SVictor Perevertkin typedef struct _WDF_CUSTOM_TYPE_CONTEXT_V2_15 *PWDF_CUSTOM_TYPE_CONTEXT_V2_15; 104*8a978a17SVictor Perevertkin typedef const struct _WDF_CUSTOM_TYPE_CONTEXT_V2_15 *PCWDF_CUSTOM_TYPE_CONTEXT_V2_15; 105*8a978a17SVictor Perevertkin typedef struct _WDF_PDO_EVENT_CALLBACKS_V2_15 *PWDF_PDO_EVENT_CALLBACKS_V2_15; 106*8a978a17SVictor Perevertkin typedef const struct _WDF_PDO_EVENT_CALLBACKS_V2_15 *PCWDF_PDO_EVENT_CALLBACKS_V2_15; 107*8a978a17SVictor Perevertkin typedef struct _WDF_QUERY_INTERFACE_CONFIG_V2_15 *PWDF_QUERY_INTERFACE_CONFIG_V2_15; 108*8a978a17SVictor Perevertkin typedef const struct _WDF_QUERY_INTERFACE_CONFIG_V2_15 *PCWDF_QUERY_INTERFACE_CONFIG_V2_15; 109*8a978a17SVictor Perevertkin typedef struct _WDF_REQUEST_PARAMETERS_V2_15 *PWDF_REQUEST_PARAMETERS_V2_15; 110*8a978a17SVictor Perevertkin typedef const struct _WDF_REQUEST_PARAMETERS_V2_15 *PCWDF_REQUEST_PARAMETERS_V2_15; 111*8a978a17SVictor Perevertkin typedef struct _WDF_REQUEST_COMPLETION_PARAMS_V2_15 *PWDF_REQUEST_COMPLETION_PARAMS_V2_15; 112*8a978a17SVictor Perevertkin typedef const struct _WDF_REQUEST_COMPLETION_PARAMS_V2_15 *PCWDF_REQUEST_COMPLETION_PARAMS_V2_15; 113*8a978a17SVictor Perevertkin typedef struct _WDF_REQUEST_REUSE_PARAMS_V2_15 *PWDF_REQUEST_REUSE_PARAMS_V2_15; 114*8a978a17SVictor Perevertkin typedef const struct _WDF_REQUEST_REUSE_PARAMS_V2_15 *PCWDF_REQUEST_REUSE_PARAMS_V2_15; 115*8a978a17SVictor Perevertkin typedef struct _WDF_REQUEST_SEND_OPTIONS_V2_15 *PWDF_REQUEST_SEND_OPTIONS_V2_15; 116*8a978a17SVictor Perevertkin typedef const struct _WDF_REQUEST_SEND_OPTIONS_V2_15 *PCWDF_REQUEST_SEND_OPTIONS_V2_15; 117*8a978a17SVictor Perevertkin typedef struct _WDF_REQUEST_FORWARD_OPTIONS_V2_15 *PWDF_REQUEST_FORWARD_OPTIONS_V2_15; 118*8a978a17SVictor Perevertkin typedef const struct _WDF_REQUEST_FORWARD_OPTIONS_V2_15 *PCWDF_REQUEST_FORWARD_OPTIONS_V2_15; 119*8a978a17SVictor Perevertkin typedef struct _WDF_TIMER_CONFIG_V2_15 *PWDF_TIMER_CONFIG_V2_15; 120*8a978a17SVictor Perevertkin typedef const struct _WDF_TIMER_CONFIG_V2_15 *PCWDF_TIMER_CONFIG_V2_15; 121*8a978a17SVictor Perevertkin typedef struct _WDFOBJECT_TRIAGE_INFO_V2_15 *PWDFOBJECT_TRIAGE_INFO_V2_15; 122*8a978a17SVictor Perevertkin typedef const struct _WDFOBJECT_TRIAGE_INFO_V2_15 *PCWDFOBJECT_TRIAGE_INFO_V2_15; 123*8a978a17SVictor Perevertkin typedef struct _WDFCONTEXT_TRIAGE_INFO_V2_15 *PWDFCONTEXT_TRIAGE_INFO_V2_15; 124*8a978a17SVictor Perevertkin typedef const struct _WDFCONTEXT_TRIAGE_INFO_V2_15 *PCWDFCONTEXT_TRIAGE_INFO_V2_15; 125*8a978a17SVictor Perevertkin typedef struct _WDFCONTEXTTYPE_TRIAGE_INFO_V2_15 *PWDFCONTEXTTYPE_TRIAGE_INFO_V2_15; 126*8a978a17SVictor Perevertkin typedef const struct _WDFCONTEXTTYPE_TRIAGE_INFO_V2_15 *PCWDFCONTEXTTYPE_TRIAGE_INFO_V2_15; 127*8a978a17SVictor Perevertkin typedef struct _WDFQUEUE_TRIAGE_INFO_V2_15 *PWDFQUEUE_TRIAGE_INFO_V2_15; 128*8a978a17SVictor Perevertkin typedef const struct _WDFQUEUE_TRIAGE_INFO_V2_15 *PCWDFQUEUE_TRIAGE_INFO_V2_15; 129*8a978a17SVictor Perevertkin typedef struct _WDFFWDPROGRESS_TRIAGE_INFO_V2_15 *PWDFFWDPROGRESS_TRIAGE_INFO_V2_15; 130*8a978a17SVictor Perevertkin typedef const struct _WDFFWDPROGRESS_TRIAGE_INFO_V2_15 *PCWDFFWDPROGRESS_TRIAGE_INFO_V2_15; 131*8a978a17SVictor Perevertkin typedef struct _WDFIRPQUEUE_TRIAGE_INFO_V2_15 *PWDFIRPQUEUE_TRIAGE_INFO_V2_15; 132*8a978a17SVictor Perevertkin typedef const struct _WDFIRPQUEUE_TRIAGE_INFO_V2_15 *PCWDFIRPQUEUE_TRIAGE_INFO_V2_15; 133*8a978a17SVictor Perevertkin typedef struct _WDFREQUEST_TRIAGE_INFO_V2_15 *PWDFREQUEST_TRIAGE_INFO_V2_15; 134*8a978a17SVictor Perevertkin typedef const struct _WDFREQUEST_TRIAGE_INFO_V2_15 *PCWDFREQUEST_TRIAGE_INFO_V2_15; 135*8a978a17SVictor Perevertkin typedef struct _WDFDEVICE_TRIAGE_INFO_V2_15 *PWDFDEVICE_TRIAGE_INFO_V2_15; 136*8a978a17SVictor Perevertkin typedef const struct _WDFDEVICE_TRIAGE_INFO_V2_15 *PCWDFDEVICE_TRIAGE_INFO_V2_15; 137*8a978a17SVictor Perevertkin typedef struct _WDFIRP_TRIAGE_INFO_V2_15 *PWDFIRP_TRIAGE_INFO_V2_15; 138*8a978a17SVictor Perevertkin typedef const struct _WDFIRP_TRIAGE_INFO_V2_15 *PCWDFIRP_TRIAGE_INFO_V2_15; 139*8a978a17SVictor Perevertkin typedef struct _WDF_TRIAGE_INFO_V2_15 *PWDF_TRIAGE_INFO_V2_15; 140*8a978a17SVictor Perevertkin typedef const struct _WDF_TRIAGE_INFO_V2_15 *PCWDF_TRIAGE_INFO_V2_15; 141*8a978a17SVictor Perevertkin typedef struct _WDF_USB_REQUEST_COMPLETION_PARAMS_V2_15 *PWDF_USB_REQUEST_COMPLETION_PARAMS_V2_15; 142*8a978a17SVictor Perevertkin typedef const struct _WDF_USB_REQUEST_COMPLETION_PARAMS_V2_15 *PCWDF_USB_REQUEST_COMPLETION_PARAMS_V2_15; 143*8a978a17SVictor Perevertkin typedef struct _WDF_USB_CONTINUOUS_READER_CONFIG_V2_15 *PWDF_USB_CONTINUOUS_READER_CONFIG_V2_15; 144*8a978a17SVictor Perevertkin typedef const struct _WDF_USB_CONTINUOUS_READER_CONFIG_V2_15 *PCWDF_USB_CONTINUOUS_READER_CONFIG_V2_15; 145*8a978a17SVictor Perevertkin typedef struct _WDF_USB_DEVICE_INFORMATION_V2_15 *PWDF_USB_DEVICE_INFORMATION_V2_15; 146*8a978a17SVictor Perevertkin typedef const struct _WDF_USB_DEVICE_INFORMATION_V2_15 *PCWDF_USB_DEVICE_INFORMATION_V2_15; 147*8a978a17SVictor Perevertkin typedef struct _WDF_USB_INTERFACE_SETTING_PAIR_V2_15 *PWDF_USB_INTERFACE_SETTING_PAIR_V2_15; 148*8a978a17SVictor Perevertkin typedef const struct _WDF_USB_INTERFACE_SETTING_PAIR_V2_15 *PCWDF_USB_INTERFACE_SETTING_PAIR_V2_15; 149*8a978a17SVictor Perevertkin typedef struct _WDF_USB_DEVICE_SELECT_CONFIG_PARAMS_V2_15 *PWDF_USB_DEVICE_SELECT_CONFIG_PARAMS_V2_15; 150*8a978a17SVictor Perevertkin typedef const struct _WDF_USB_DEVICE_SELECT_CONFIG_PARAMS_V2_15 *PCWDF_USB_DEVICE_SELECT_CONFIG_PARAMS_V2_15; 151*8a978a17SVictor Perevertkin typedef struct _WDF_USB_INTERFACE_SELECT_SETTING_PARAMS_V2_15 *PWDF_USB_INTERFACE_SELECT_SETTING_PARAMS_V2_15; 152*8a978a17SVictor Perevertkin typedef const struct _WDF_USB_INTERFACE_SELECT_SETTING_PARAMS_V2_15 *PCWDF_USB_INTERFACE_SELECT_SETTING_PARAMS_V2_15; 153*8a978a17SVictor Perevertkin typedef struct _WDF_USB_PIPE_INFORMATION_V2_15 *PWDF_USB_PIPE_INFORMATION_V2_15; 154*8a978a17SVictor Perevertkin typedef const struct _WDF_USB_PIPE_INFORMATION_V2_15 *PCWDF_USB_PIPE_INFORMATION_V2_15; 155*8a978a17SVictor Perevertkin typedef struct _WDF_USB_DEVICE_CREATE_CONFIG_V2_15 *PWDF_USB_DEVICE_CREATE_CONFIG_V2_15; 156*8a978a17SVictor Perevertkin typedef const struct _WDF_USB_DEVICE_CREATE_CONFIG_V2_15 *PCWDF_USB_DEVICE_CREATE_CONFIG_V2_15; 157*8a978a17SVictor Perevertkin typedef struct _WDF_WMI_PROVIDER_CONFIG_V2_15 *PWDF_WMI_PROVIDER_CONFIG_V2_15; 158*8a978a17SVictor Perevertkin typedef const struct _WDF_WMI_PROVIDER_CONFIG_V2_15 *PCWDF_WMI_PROVIDER_CONFIG_V2_15; 159*8a978a17SVictor Perevertkin typedef struct _WDF_WMI_INSTANCE_CONFIG_V2_15 *PWDF_WMI_INSTANCE_CONFIG_V2_15; 160*8a978a17SVictor Perevertkin typedef const struct _WDF_WMI_INSTANCE_CONFIG_V2_15 *PCWDF_WMI_INSTANCE_CONFIG_V2_15; 161*8a978a17SVictor Perevertkin typedef struct _WDF_WORKITEM_CONFIG_V2_15 *PWDF_WORKITEM_CONFIG_V2_15; 162*8a978a17SVictor Perevertkin typedef const struct _WDF_WORKITEM_CONFIG_V2_15 *PCWDF_WORKITEM_CONFIG_V2_15; 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_V2_15 { 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_V2_15; 204*8a978a17SVictor Perevertkin 205*8a978a17SVictor Perevertkin typedef struct _WDF_REQUEST_FATAL_ERROR_INFORMATION_LENGTH_MISMATCH_DATA_V2_15 { 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_V2_15, *PWDF_REQUEST_FATAL_ERROR_INFORMATION_LENGTH_MISMATCH_DATA_V2_15; 217*8a978a17SVictor Perevertkin 218*8a978a17SVictor Perevertkin typedef struct _WDF_QUEUE_FATAL_ERROR_DATA_V2_15 { 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_V2_15, *PWDF_QUEUE_FATAL_ERROR_DATA_V2_15; 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_V2_15 { 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_V2_15, *PWDF_CHILD_IDENTIFICATION_DESCRIPTION_HEADER_V2_15; 242*8a978a17SVictor Perevertkin 243*8a978a17SVictor Perevertkin typedef struct _WDF_CHILD_ADDRESS_DESCRIPTION_HEADER_V2_15 { 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_V2_15, *PWDF_CHILD_ADDRESS_DESCRIPTION_HEADER_V2_15; 253*8a978a17SVictor Perevertkin 254*8a978a17SVictor Perevertkin typedef struct _WDF_CHILD_RETRIEVE_INFO_V2_15 { 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_V2_15 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_V2_15 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_V2_15, *PWDF_CHILD_RETRIEVE_INFO_V2_15; 282*8a978a17SVictor Perevertkin 283*8a978a17SVictor Perevertkin typedef struct _WDF_CHILD_LIST_CONFIG_V2_15 { 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_V2_15, *PWDF_CHILD_LIST_CONFIG_V2_15; 375*8a978a17SVictor Perevertkin 376*8a978a17SVictor Perevertkin typedef struct _WDF_CHILD_LIST_ITERATOR_V2_15 { 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_V2_15, *PWDF_CHILD_LIST_ITERATOR_V2_15; 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 // End of versioning of structures for wdfCommonBuffer.h 407*8a978a17SVictor Perevertkin 408*8a978a17SVictor Perevertkin // 409*8a978a17SVictor Perevertkin // Versioning of structures for wdfcontrol.h 410*8a978a17SVictor Perevertkin // 411*8a978a17SVictor Perevertkin // End of versioning of structures for wdfcontrol.h 412*8a978a17SVictor Perevertkin 413*8a978a17SVictor Perevertkin // 414*8a978a17SVictor Perevertkin // Versioning of structures for wdfcore.h 415*8a978a17SVictor Perevertkin // 416*8a978a17SVictor Perevertkin // End of versioning of structures for wdfcore.h 417*8a978a17SVictor Perevertkin 418*8a978a17SVictor Perevertkin // 419*8a978a17SVictor Perevertkin // Versioning of structures for wdfcx.h 420*8a978a17SVictor Perevertkin // 421*8a978a17SVictor Perevertkin typedef struct _WDFCX_FILEOBJECT_CONFIG_V2_15 { 422*8a978a17SVictor Perevertkin // 423*8a978a17SVictor Perevertkin // Size of this structure in bytes 424*8a978a17SVictor Perevertkin // 425*8a978a17SVictor Perevertkin ULONG Size; 426*8a978a17SVictor Perevertkin 427*8a978a17SVictor Perevertkin // 428*8a978a17SVictor Perevertkin // Event callback for create requests 429*8a978a17SVictor Perevertkin // 430*8a978a17SVictor Perevertkin PFN_WDFCX_DEVICE_FILE_CREATE EvtCxDeviceFileCreate; 431*8a978a17SVictor Perevertkin 432*8a978a17SVictor Perevertkin // 433*8a978a17SVictor Perevertkin // Event callback for close requests 434*8a978a17SVictor Perevertkin // 435*8a978a17SVictor Perevertkin PFN_WDF_FILE_CLOSE EvtFileClose; 436*8a978a17SVictor Perevertkin 437*8a978a17SVictor Perevertkin // 438*8a978a17SVictor Perevertkin // Event callback for cleanup requests 439*8a978a17SVictor Perevertkin // 440*8a978a17SVictor Perevertkin PFN_WDF_FILE_CLEANUP EvtFileCleanup; 441*8a978a17SVictor Perevertkin 442*8a978a17SVictor Perevertkin // 443*8a978a17SVictor Perevertkin // If WdfTrue, create/cleanup/close file object related requests will be 444*8a978a17SVictor Perevertkin // sent down the stack. 445*8a978a17SVictor Perevertkin // 446*8a978a17SVictor Perevertkin // If WdfFalse, create/cleanup/close will be completed at this location in 447*8a978a17SVictor Perevertkin // the device stack. 448*8a978a17SVictor Perevertkin // 449*8a978a17SVictor Perevertkin // If WdfDefault, behavior depends on device type 450*8a978a17SVictor Perevertkin // FDO, PDO, Control: use the WdfFalse behavior 451*8a978a17SVictor Perevertkin // Filter: use the WdfTrue behavior 452*8a978a17SVictor Perevertkin // 453*8a978a17SVictor Perevertkin WDF_TRI_STATE AutoForwardCleanupClose; 454*8a978a17SVictor Perevertkin 455*8a978a17SVictor Perevertkin // 456*8a978a17SVictor Perevertkin // Specify whether framework should create WDFFILEOBJECT and also 457*8a978a17SVictor Perevertkin // whether it can FsContexts fields in the WDM fileobject to store 458*8a978a17SVictor Perevertkin // WDFFILEOBJECT so that it can avoid table look up and improve perf. 459*8a978a17SVictor Perevertkin // 460*8a978a17SVictor Perevertkin WDF_FILEOBJECT_CLASS FileObjectClass; 461*8a978a17SVictor Perevertkin 462*8a978a17SVictor Perevertkin } WDFCX_FILEOBJECT_CONFIG_V2_15, *PWDFCX_FILEOBJECT_CONFIG_V2_15; 463*8a978a17SVictor Perevertkin 464*8a978a17SVictor Perevertkin // End of versioning of structures for wdfcx.h 465*8a978a17SVictor Perevertkin 466*8a978a17SVictor Perevertkin // 467*8a978a17SVictor Perevertkin // Versioning of structures for wdfcxbase.h 468*8a978a17SVictor Perevertkin // 469*8a978a17SVictor Perevertkin typedef struct _WDF_CLASS_VERSION_V2_15 { 470*8a978a17SVictor Perevertkin WDF_MAJOR_VERSION Major; 471*8a978a17SVictor Perevertkin 472*8a978a17SVictor Perevertkin WDF_MINOR_VERSION Minor; 473*8a978a17SVictor Perevertkin 474*8a978a17SVictor Perevertkin WDF_BUILD_NUMBER Build; 475*8a978a17SVictor Perevertkin 476*8a978a17SVictor Perevertkin } WDF_CLASS_VERSION_V2_15; 477*8a978a17SVictor Perevertkin 478*8a978a17SVictor Perevertkin typedef struct _WDF_CLASS_BIND_INFO_V2_15 { 479*8a978a17SVictor Perevertkin // 480*8a978a17SVictor Perevertkin // Size of the structure in bytes 481*8a978a17SVictor Perevertkin // 482*8a978a17SVictor Perevertkin ULONG Size; 483*8a978a17SVictor Perevertkin 484*8a978a17SVictor Perevertkin // 485*8a978a17SVictor Perevertkin // Name of the class to bind to 486*8a978a17SVictor Perevertkin // 487*8a978a17SVictor Perevertkin PWSTR ClassName; 488*8a978a17SVictor Perevertkin 489*8a978a17SVictor Perevertkin // 490*8a978a17SVictor Perevertkin // Version information for the class 491*8a978a17SVictor Perevertkin // 492*8a978a17SVictor Perevertkin WDF_CLASS_VERSION_V2_15 Version; 493*8a978a17SVictor Perevertkin 494*8a978a17SVictor Perevertkin // 495*8a978a17SVictor Perevertkin // Function export table from the class driver to resolve on bind 496*8a978a17SVictor Perevertkin // 497*8a978a17SVictor Perevertkin PFN_WDF_CLASS_EXPORT * FunctionTable; 498*8a978a17SVictor Perevertkin 499*8a978a17SVictor Perevertkin // 500*8a978a17SVictor Perevertkin // Number of entries in FunctionTable 501*8a978a17SVictor Perevertkin // 502*8a978a17SVictor Perevertkin ULONG FunctionTableCount; 503*8a978a17SVictor Perevertkin 504*8a978a17SVictor Perevertkin // 505*8a978a17SVictor Perevertkin // Optional field where the client specify additional information 506*8a978a17SVictor Perevertkin // for the class driver to resolve 507*8a978a17SVictor Perevertkin // 508*8a978a17SVictor Perevertkin PVOID ClassBindInfo; 509*8a978a17SVictor Perevertkin 510*8a978a17SVictor Perevertkin // 511*8a978a17SVictor Perevertkin // Optional bind callback. If set, WdfVersionBindClass will not 512*8a978a17SVictor Perevertkin // be called and it will be up to ClientClassBind to call this function 513*8a978a17SVictor Perevertkin // if required. 514*8a978a17SVictor Perevertkin // 515*8a978a17SVictor Perevertkin PFN_WDF_CLIENT_BIND_CLASS ClientBindClass; 516*8a978a17SVictor Perevertkin 517*8a978a17SVictor Perevertkin // 518*8a978a17SVictor Perevertkin // Optional unbind callback. If set, WdfVersionUnbindClass will not be 519*8a978a17SVictor Perevertkin // called and it will be up to ClientClassUnbind to call this function 520*8a978a17SVictor Perevertkin // if required. 521*8a978a17SVictor Perevertkin // 522*8a978a17SVictor Perevertkin PFN_WDF_CLIENT_UNBIND_CLASS ClientUnbindClass; 523*8a978a17SVictor Perevertkin 524*8a978a17SVictor Perevertkin // 525*8a978a17SVictor Perevertkin // Diagnostic cookie to use during debugging 526*8a978a17SVictor Perevertkin // 527*8a978a17SVictor Perevertkin PVOID ClassModule; 528*8a978a17SVictor Perevertkin 529*8a978a17SVictor Perevertkin } WDF_CLASS_BIND_INFO_V2_15, * PWDF_CLASS_BIND_INFO_V2_15; 530*8a978a17SVictor Perevertkin 531*8a978a17SVictor Perevertkin typedef struct _WDF_CLASS_LIBRARY_INFO_V2_15 { 532*8a978a17SVictor Perevertkin // 533*8a978a17SVictor Perevertkin // Size of this structure in bytes 534*8a978a17SVictor Perevertkin // 535*8a978a17SVictor Perevertkin ULONG Size; 536*8a978a17SVictor Perevertkin 537*8a978a17SVictor Perevertkin // 538*8a978a17SVictor Perevertkin // Version of this class library 539*8a978a17SVictor Perevertkin // 540*8a978a17SVictor Perevertkin WDF_CLASS_VERSION_V2_15 Version; 541*8a978a17SVictor Perevertkin 542*8a978a17SVictor Perevertkin // 543*8a978a17SVictor Perevertkin // Callback to be called by the loader to initialize the class library 544*8a978a17SVictor Perevertkin // 545*8a978a17SVictor Perevertkin PFN_WDF_CLASS_LIBRARY_INITIALIZE ClassLibraryInitialize; 546*8a978a17SVictor Perevertkin 547*8a978a17SVictor Perevertkin // 548*8a978a17SVictor Perevertkin // Callback to be called by the loader to deinitialize the class library 549*8a978a17SVictor Perevertkin // after succesful initialization (immediately before the class library will 550*8a978a17SVictor Perevertkin // be unloaded). 551*8a978a17SVictor Perevertkin // 552*8a978a17SVictor Perevertkin PFN_WDF_CLASS_LIBRARY_DEINITIALIZE ClassLibraryDeinitialize; 553*8a978a17SVictor Perevertkin 554*8a978a17SVictor Perevertkin // 555*8a978a17SVictor Perevertkin // Callback to be called by the loader when a client driver has request to 556*8a978a17SVictor Perevertkin // be bound to this class library. 557*8a978a17SVictor Perevertkin // 558*8a978a17SVictor Perevertkin PFN_WDF_CLASS_LIBRARY_BIND_CLIENT ClassLibraryBindClient; 559*8a978a17SVictor Perevertkin 560*8a978a17SVictor Perevertkin // 561*8a978a17SVictor Perevertkin // Callback to be called by the loader when a previously bound client driver 562*8a978a17SVictor Perevertkin // is being unloaded. 563*8a978a17SVictor Perevertkin // 564*8a978a17SVictor Perevertkin PFN_WDF_CLASS_LIBRARY_UNBIND_CLIENT ClassLibraryUnbindClient; 565*8a978a17SVictor Perevertkin 566*8a978a17SVictor Perevertkin } WDF_CLASS_LIBRARY_INFO_V2_15, *PWDF_CLASS_LIBRARY_INFO_V2_15; 567*8a978a17SVictor Perevertkin 568*8a978a17SVictor Perevertkin // End of versioning of structures for wdfcxbase.h 569*8a978a17SVictor Perevertkin 570*8a978a17SVictor Perevertkin // 571*8a978a17SVictor Perevertkin // Versioning of structures for wdfDevice.h 572*8a978a17SVictor Perevertkin // 573*8a978a17SVictor Perevertkin typedef struct _WDF_FILEOBJECT_CONFIG_V2_15 { 574*8a978a17SVictor Perevertkin // 575*8a978a17SVictor Perevertkin // Size of this structure in bytes 576*8a978a17SVictor Perevertkin // 577*8a978a17SVictor Perevertkin ULONG Size; 578*8a978a17SVictor Perevertkin 579*8a978a17SVictor Perevertkin // 580*8a978a17SVictor Perevertkin // Event callback for create requests 581*8a978a17SVictor Perevertkin // 582*8a978a17SVictor Perevertkin PFN_WDF_DEVICE_FILE_CREATE EvtDeviceFileCreate; 583*8a978a17SVictor Perevertkin 584*8a978a17SVictor Perevertkin // 585*8a978a17SVictor Perevertkin // Event callback for close requests 586*8a978a17SVictor Perevertkin // 587*8a978a17SVictor Perevertkin PFN_WDF_FILE_CLOSE EvtFileClose; 588*8a978a17SVictor Perevertkin 589*8a978a17SVictor Perevertkin // 590*8a978a17SVictor Perevertkin // Event callback for cleanup requests 591*8a978a17SVictor Perevertkin // 592*8a978a17SVictor Perevertkin PFN_WDF_FILE_CLEANUP EvtFileCleanup; 593*8a978a17SVictor Perevertkin 594*8a978a17SVictor Perevertkin // 595*8a978a17SVictor Perevertkin // If WdfTrue, create/cleanup/close file object related requests will be 596*8a978a17SVictor Perevertkin // sent down the stack. 597*8a978a17SVictor Perevertkin // 598*8a978a17SVictor Perevertkin // If WdfFalse, create/cleanup/close will be completed at this location in 599*8a978a17SVictor Perevertkin // the device stack. 600*8a978a17SVictor Perevertkin // 601*8a978a17SVictor Perevertkin // If WdfDefault, behavior depends on device type 602*8a978a17SVictor Perevertkin // FDO, PDO, Control: use the WdfFalse behavior 603*8a978a17SVictor Perevertkin // Filter: use the WdfTrue behavior 604*8a978a17SVictor Perevertkin // 605*8a978a17SVictor Perevertkin WDF_TRI_STATE AutoForwardCleanupClose; 606*8a978a17SVictor Perevertkin 607*8a978a17SVictor Perevertkin // 608*8a978a17SVictor Perevertkin // Specify whether framework should create WDFFILEOBJECT and also 609*8a978a17SVictor Perevertkin // whether it can FsContexts fields in the WDM fileobject to store 610*8a978a17SVictor Perevertkin // WDFFILEOBJECT so that it can avoid table look up and improve perf. 611*8a978a17SVictor Perevertkin // 612*8a978a17SVictor Perevertkin WDF_FILEOBJECT_CLASS FileObjectClass; 613*8a978a17SVictor Perevertkin 614*8a978a17SVictor Perevertkin } WDF_FILEOBJECT_CONFIG_V2_15, *PWDF_FILEOBJECT_CONFIG_V2_15; 615*8a978a17SVictor Perevertkin 616*8a978a17SVictor Perevertkin typedef struct _WDF_DEVICE_PNP_NOTIFICATION_DATA_V2_15 { 617*8a978a17SVictor Perevertkin // 618*8a978a17SVictor Perevertkin // Type of data 619*8a978a17SVictor Perevertkin // 620*8a978a17SVictor Perevertkin WDF_STATE_NOTIFICATION_TYPE Type; 621*8a978a17SVictor Perevertkin 622*8a978a17SVictor Perevertkin union { 623*8a978a17SVictor Perevertkin struct { 624*8a978a17SVictor Perevertkin // 625*8a978a17SVictor Perevertkin // The current state that is about to be exited 626*8a978a17SVictor Perevertkin // 627*8a978a17SVictor Perevertkin WDF_DEVICE_PNP_STATE CurrentState; 628*8a978a17SVictor Perevertkin 629*8a978a17SVictor Perevertkin // 630*8a978a17SVictor Perevertkin // The new state that is about to be entered 631*8a978a17SVictor Perevertkin // 632*8a978a17SVictor Perevertkin WDF_DEVICE_PNP_STATE NewState; 633*8a978a17SVictor Perevertkin 634*8a978a17SVictor Perevertkin } EnterState; 635*8a978a17SVictor Perevertkin 636*8a978a17SVictor Perevertkin struct { 637*8a978a17SVictor Perevertkin // 638*8a978a17SVictor Perevertkin // The current state 639*8a978a17SVictor Perevertkin // 640*8a978a17SVictor Perevertkin WDF_DEVICE_PNP_STATE CurrentState; 641*8a978a17SVictor Perevertkin 642*8a978a17SVictor Perevertkin } PostProcessState; 643*8a978a17SVictor Perevertkin 644*8a978a17SVictor Perevertkin struct { 645*8a978a17SVictor Perevertkin // 646*8a978a17SVictor Perevertkin // The current state that is about to be exitted 647*8a978a17SVictor Perevertkin // 648*8a978a17SVictor Perevertkin WDF_DEVICE_PNP_STATE CurrentState; 649*8a978a17SVictor Perevertkin 650*8a978a17SVictor Perevertkin // 651*8a978a17SVictor Perevertkin // The state that is about to be entered 652*8a978a17SVictor Perevertkin // 653*8a978a17SVictor Perevertkin WDF_DEVICE_PNP_STATE NewState; 654*8a978a17SVictor Perevertkin 655*8a978a17SVictor Perevertkin } LeaveState; 656*8a978a17SVictor Perevertkin 657*8a978a17SVictor Perevertkin } Data; 658*8a978a17SVictor Perevertkin 659*8a978a17SVictor Perevertkin } WDF_DEVICE_PNP_NOTIFICATION_DATA_V2_15; 660*8a978a17SVictor Perevertkin 661*8a978a17SVictor Perevertkin typedef struct _WDF_DEVICE_POWER_NOTIFICATION_DATA_V2_15 { 662*8a978a17SVictor Perevertkin // 663*8a978a17SVictor Perevertkin // Type of data 664*8a978a17SVictor Perevertkin // 665*8a978a17SVictor Perevertkin WDF_STATE_NOTIFICATION_TYPE Type; 666*8a978a17SVictor Perevertkin 667*8a978a17SVictor Perevertkin union { 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_POWER_STATE CurrentState; 673*8a978a17SVictor Perevertkin 674*8a978a17SVictor Perevertkin // 675*8a978a17SVictor Perevertkin // The new state that is about to be entered 676*8a978a17SVictor Perevertkin // 677*8a978a17SVictor Perevertkin WDF_DEVICE_POWER_STATE NewState; 678*8a978a17SVictor Perevertkin 679*8a978a17SVictor Perevertkin } EnterState; 680*8a978a17SVictor Perevertkin 681*8a978a17SVictor Perevertkin struct { 682*8a978a17SVictor Perevertkin // 683*8a978a17SVictor Perevertkin // The current state 684*8a978a17SVictor Perevertkin // 685*8a978a17SVictor Perevertkin WDF_DEVICE_POWER_STATE CurrentState; 686*8a978a17SVictor Perevertkin 687*8a978a17SVictor Perevertkin } PostProcessState; 688*8a978a17SVictor Perevertkin 689*8a978a17SVictor Perevertkin struct { 690*8a978a17SVictor Perevertkin // 691*8a978a17SVictor Perevertkin // The current state that is about to be exitted 692*8a978a17SVictor Perevertkin // 693*8a978a17SVictor Perevertkin WDF_DEVICE_POWER_STATE CurrentState; 694*8a978a17SVictor Perevertkin 695*8a978a17SVictor Perevertkin // 696*8a978a17SVictor Perevertkin // The state that is about to be entered 697*8a978a17SVictor Perevertkin // 698*8a978a17SVictor Perevertkin WDF_DEVICE_POWER_STATE NewState; 699*8a978a17SVictor Perevertkin 700*8a978a17SVictor Perevertkin } LeaveState; 701*8a978a17SVictor Perevertkin 702*8a978a17SVictor Perevertkin } Data; 703*8a978a17SVictor Perevertkin 704*8a978a17SVictor Perevertkin } WDF_DEVICE_POWER_NOTIFICATION_DATA_V2_15; 705*8a978a17SVictor Perevertkin 706*8a978a17SVictor Perevertkin typedef struct _WDF_DEVICE_POWER_POLICY_NOTIFICATION_DATA_V2_15 { 707*8a978a17SVictor Perevertkin // 708*8a978a17SVictor Perevertkin // Type of data 709*8a978a17SVictor Perevertkin // 710*8a978a17SVictor Perevertkin WDF_STATE_NOTIFICATION_TYPE Type; 711*8a978a17SVictor Perevertkin 712*8a978a17SVictor Perevertkin union { 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_POLICY_STATE CurrentState; 718*8a978a17SVictor Perevertkin 719*8a978a17SVictor Perevertkin // 720*8a978a17SVictor Perevertkin // The new state that is about to be entered 721*8a978a17SVictor Perevertkin // 722*8a978a17SVictor Perevertkin WDF_DEVICE_POWER_POLICY_STATE NewState; 723*8a978a17SVictor Perevertkin 724*8a978a17SVictor Perevertkin } EnterState; 725*8a978a17SVictor Perevertkin 726*8a978a17SVictor Perevertkin struct { 727*8a978a17SVictor Perevertkin // 728*8a978a17SVictor Perevertkin // The current state 729*8a978a17SVictor Perevertkin // 730*8a978a17SVictor Perevertkin WDF_DEVICE_POWER_POLICY_STATE CurrentState; 731*8a978a17SVictor Perevertkin 732*8a978a17SVictor Perevertkin } PostProcessState; 733*8a978a17SVictor Perevertkin 734*8a978a17SVictor Perevertkin struct { 735*8a978a17SVictor Perevertkin // 736*8a978a17SVictor Perevertkin // The current state that is about to be exitted 737*8a978a17SVictor Perevertkin // 738*8a978a17SVictor Perevertkin WDF_DEVICE_POWER_POLICY_STATE CurrentState; 739*8a978a17SVictor Perevertkin 740*8a978a17SVictor Perevertkin // 741*8a978a17SVictor Perevertkin // The state that is about to be entered 742*8a978a17SVictor Perevertkin // 743*8a978a17SVictor Perevertkin WDF_DEVICE_POWER_POLICY_STATE NewState; 744*8a978a17SVictor Perevertkin 745*8a978a17SVictor Perevertkin } LeaveState; 746*8a978a17SVictor Perevertkin 747*8a978a17SVictor Perevertkin } Data; 748*8a978a17SVictor Perevertkin 749*8a978a17SVictor Perevertkin } WDF_DEVICE_POWER_POLICY_NOTIFICATION_DATA_V2_15; 750*8a978a17SVictor Perevertkin 751*8a978a17SVictor Perevertkin typedef struct _WDF_PNPPOWER_EVENT_CALLBACKS_V2_15 { 752*8a978a17SVictor Perevertkin // 753*8a978a17SVictor Perevertkin // Size of this structure in bytes 754*8a978a17SVictor Perevertkin // 755*8a978a17SVictor Perevertkin ULONG Size; 756*8a978a17SVictor Perevertkin 757*8a978a17SVictor Perevertkin PFN_WDF_DEVICE_D0_ENTRY EvtDeviceD0Entry; 758*8a978a17SVictor Perevertkin 759*8a978a17SVictor Perevertkin PFN_WDF_DEVICE_D0_ENTRY_POST_INTERRUPTS_ENABLED EvtDeviceD0EntryPostInterruptsEnabled; 760*8a978a17SVictor Perevertkin 761*8a978a17SVictor Perevertkin PFN_WDF_DEVICE_D0_EXIT EvtDeviceD0Exit; 762*8a978a17SVictor Perevertkin 763*8a978a17SVictor Perevertkin PFN_WDF_DEVICE_D0_EXIT_PRE_INTERRUPTS_DISABLED EvtDeviceD0ExitPreInterruptsDisabled; 764*8a978a17SVictor Perevertkin 765*8a978a17SVictor Perevertkin PFN_WDF_DEVICE_PREPARE_HARDWARE EvtDevicePrepareHardware; 766*8a978a17SVictor Perevertkin 767*8a978a17SVictor Perevertkin PFN_WDF_DEVICE_RELEASE_HARDWARE EvtDeviceReleaseHardware; 768*8a978a17SVictor Perevertkin 769*8a978a17SVictor Perevertkin PFN_WDF_DEVICE_SELF_MANAGED_IO_CLEANUP EvtDeviceSelfManagedIoCleanup; 770*8a978a17SVictor Perevertkin 771*8a978a17SVictor Perevertkin PFN_WDF_DEVICE_SELF_MANAGED_IO_FLUSH EvtDeviceSelfManagedIoFlush; 772*8a978a17SVictor Perevertkin 773*8a978a17SVictor Perevertkin PFN_WDF_DEVICE_SELF_MANAGED_IO_INIT EvtDeviceSelfManagedIoInit; 774*8a978a17SVictor Perevertkin 775*8a978a17SVictor Perevertkin PFN_WDF_DEVICE_SELF_MANAGED_IO_SUSPEND EvtDeviceSelfManagedIoSuspend; 776*8a978a17SVictor Perevertkin 777*8a978a17SVictor Perevertkin PFN_WDF_DEVICE_SELF_MANAGED_IO_RESTART EvtDeviceSelfManagedIoRestart; 778*8a978a17SVictor Perevertkin 779*8a978a17SVictor Perevertkin PFN_WDF_DEVICE_SURPRISE_REMOVAL EvtDeviceSurpriseRemoval; 780*8a978a17SVictor Perevertkin 781*8a978a17SVictor Perevertkin PFN_WDF_DEVICE_QUERY_REMOVE EvtDeviceQueryRemove; 782*8a978a17SVictor Perevertkin 783*8a978a17SVictor Perevertkin PFN_WDF_DEVICE_QUERY_STOP EvtDeviceQueryStop; 784*8a978a17SVictor Perevertkin 785*8a978a17SVictor Perevertkin PFN_WDF_DEVICE_USAGE_NOTIFICATION EvtDeviceUsageNotification; 786*8a978a17SVictor Perevertkin 787*8a978a17SVictor Perevertkin PFN_WDF_DEVICE_RELATIONS_QUERY EvtDeviceRelationsQuery; 788*8a978a17SVictor Perevertkin 789*8a978a17SVictor Perevertkin PFN_WDF_DEVICE_USAGE_NOTIFICATION_EX EvtDeviceUsageNotificationEx; 790*8a978a17SVictor Perevertkin 791*8a978a17SVictor Perevertkin } WDF_PNPPOWER_EVENT_CALLBACKS_V2_15, *PWDF_PNPPOWER_EVENT_CALLBACKS_V2_15; 792*8a978a17SVictor Perevertkin 793*8a978a17SVictor Perevertkin typedef struct _WDF_POWER_POLICY_EVENT_CALLBACKS_V2_15 { 794*8a978a17SVictor Perevertkin // 795*8a978a17SVictor Perevertkin // Size of this structure in bytes 796*8a978a17SVictor Perevertkin // 797*8a978a17SVictor Perevertkin ULONG Size; 798*8a978a17SVictor Perevertkin 799*8a978a17SVictor Perevertkin PFN_WDF_DEVICE_ARM_WAKE_FROM_S0 EvtDeviceArmWakeFromS0; 800*8a978a17SVictor Perevertkin 801*8a978a17SVictor Perevertkin PFN_WDF_DEVICE_DISARM_WAKE_FROM_S0 EvtDeviceDisarmWakeFromS0; 802*8a978a17SVictor Perevertkin 803*8a978a17SVictor Perevertkin PFN_WDF_DEVICE_WAKE_FROM_S0_TRIGGERED EvtDeviceWakeFromS0Triggered; 804*8a978a17SVictor Perevertkin 805*8a978a17SVictor Perevertkin PFN_WDF_DEVICE_ARM_WAKE_FROM_SX EvtDeviceArmWakeFromSx; 806*8a978a17SVictor Perevertkin 807*8a978a17SVictor Perevertkin PFN_WDF_DEVICE_DISARM_WAKE_FROM_SX EvtDeviceDisarmWakeFromSx; 808*8a978a17SVictor Perevertkin 809*8a978a17SVictor Perevertkin PFN_WDF_DEVICE_WAKE_FROM_SX_TRIGGERED EvtDeviceWakeFromSxTriggered; 810*8a978a17SVictor Perevertkin 811*8a978a17SVictor Perevertkin PFN_WDF_DEVICE_ARM_WAKE_FROM_SX_WITH_REASON EvtDeviceArmWakeFromSxWithReason; 812*8a978a17SVictor Perevertkin 813*8a978a17SVictor Perevertkin } WDF_POWER_POLICY_EVENT_CALLBACKS_V2_15, *PWDF_POWER_POLICY_EVENT_CALLBACKS_V2_15; 814*8a978a17SVictor Perevertkin 815*8a978a17SVictor Perevertkin typedef struct _WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS_V2_15 { 816*8a978a17SVictor Perevertkin // 817*8a978a17SVictor Perevertkin // Size of this structure in bytes 818*8a978a17SVictor Perevertkin // 819*8a978a17SVictor Perevertkin ULONG Size; 820*8a978a17SVictor Perevertkin 821*8a978a17SVictor Perevertkin // 822*8a978a17SVictor Perevertkin // Indicates whether the device can wake itself up while the machine is in 823*8a978a17SVictor Perevertkin // S0. 824*8a978a17SVictor Perevertkin // 825*8a978a17SVictor Perevertkin WDF_POWER_POLICY_S0_IDLE_CAPABILITIES IdleCaps; 826*8a978a17SVictor Perevertkin 827*8a978a17SVictor Perevertkin // 828*8a978a17SVictor Perevertkin // The low power state in which the device will be placed when it is idled 829*8a978a17SVictor Perevertkin // out while the machine is in S0. 830*8a978a17SVictor Perevertkin // 831*8a978a17SVictor Perevertkin DEVICE_POWER_STATE DxState; 832*8a978a17SVictor Perevertkin 833*8a978a17SVictor Perevertkin // 834*8a978a17SVictor Perevertkin // Amount of time the device must be idle before idling out. Timeout is in 835*8a978a17SVictor Perevertkin // milliseconds. 836*8a978a17SVictor Perevertkin // 837*8a978a17SVictor Perevertkin ULONG IdleTimeout; 838*8a978a17SVictor Perevertkin 839*8a978a17SVictor Perevertkin // 840*8a978a17SVictor Perevertkin // Inidcates whether a user can control the idle policy of the device. 841*8a978a17SVictor Perevertkin // By default, a user is allowed to change the policy. 842*8a978a17SVictor Perevertkin // 843*8a978a17SVictor Perevertkin WDF_POWER_POLICY_S0_IDLE_USER_CONTROL UserControlOfIdleSettings; 844*8a978a17SVictor Perevertkin 845*8a978a17SVictor Perevertkin // 846*8a978a17SVictor Perevertkin // If WdfTrue, idling out while the machine is in S0 will be enabled. 847*8a978a17SVictor Perevertkin // 848*8a978a17SVictor Perevertkin // If WdfFalse, idling out will be disabled. 849*8a978a17SVictor Perevertkin // 850*8a978a17SVictor Perevertkin // If WdfUseDefault, the idling out will be enabled. If 851*8a978a17SVictor Perevertkin // UserControlOfIdleSettings is set to IdleAllowUserControl, the user's 852*8a978a17SVictor Perevertkin // settings will override the default. 853*8a978a17SVictor Perevertkin // 854*8a978a17SVictor Perevertkin WDF_TRI_STATE Enabled; 855*8a978a17SVictor Perevertkin 856*8a978a17SVictor Perevertkin // 857*8a978a17SVictor Perevertkin // This field is applicable only when IdleCaps == IdleCannotWakeFromS0 858*8a978a17SVictor Perevertkin // If WdfTrue,device is powered up on System Wake even if device is idle 859*8a978a17SVictor Perevertkin // If WdfFalse, device is not powered up on system wake if it is idle 860*8a978a17SVictor Perevertkin // If WdfUseDefault, the behavior is same as WdfFalse 861*8a978a17SVictor Perevertkin // 862*8a978a17SVictor Perevertkin WDF_TRI_STATE PowerUpIdleDeviceOnSystemWake; 863*8a978a17SVictor Perevertkin 864*8a978a17SVictor Perevertkin // 865*8a978a17SVictor Perevertkin // This field determines how the IdleTimeout field is used. 866*8a978a17SVictor Perevertkin // 867*8a978a17SVictor Perevertkin // If the value is DriverManagedIdleTimeout, then the idle timeout value 868*8a978a17SVictor Perevertkin // is determined by the IdleTimeout field of this structure. 869*8a978a17SVictor Perevertkin // 870*8a978a17SVictor Perevertkin // If the value is SystemManagedIdleTimeout, then the timeout value is 871*8a978a17SVictor Perevertkin // determined by the power framework (PoFx) on operating systems where 872*8a978a17SVictor Perevertkin // the PoFx is available (i.e. Windows 8 and later). The IdleTimeout field 873*8a978a17SVictor Perevertkin // is ignored on these operating systems. On operating systems where the 874*8a978a17SVictor Perevertkin // PoFx is not available, the behavior is same as DriverManagedIdleTimeout. 875*8a978a17SVictor Perevertkin // 876*8a978a17SVictor Perevertkin // If the value is SystemManagedIdleTimeoutWithHint, then the timeout value 877*8a978a17SVictor Perevertkin // is determined by the power framework (PoFx) on operating systems where 878*8a978a17SVictor Perevertkin // the PoFx is available (i.e. Windows 8 and later). In addition, the value 879*8a978a17SVictor Perevertkin // specified in the IdleTimeout field is provided as a hint to the PoFx in 880*8a978a17SVictor Perevertkin // determining when the device should be allowed to enter a low-power state. 881*8a978a17SVictor Perevertkin // Since it is only a hint, the actual duration after which the PoFx allows 882*8a978a17SVictor Perevertkin // the device to enter a low-power state might be greater than or less than 883*8a978a17SVictor Perevertkin // the IdleTimeout value. On operating systems where the PoFx is not 884*8a978a17SVictor Perevertkin // available, the behavior is same as DriverManagedIdleTimeout. 885*8a978a17SVictor Perevertkin // 886*8a978a17SVictor Perevertkin WDF_POWER_POLICY_IDLE_TIMEOUT_TYPE IdleTimeoutType; 887*8a978a17SVictor Perevertkin 888*8a978a17SVictor Perevertkin // 889*8a978a17SVictor Perevertkin // This field forces the device to avoid idling in the D3cold power state. 890*8a978a17SVictor Perevertkin // WDF will ensure, with help from the bus drivers, that the device will 891*8a978a17SVictor Perevertkin // idle in a D-state that can successfully generate a wake signal, if 892*8a978a17SVictor Perevertkin // necessary. If the client specifies that DxState == PowerDeviceD3, this 893*8a978a17SVictor Perevertkin // setting allows the client to distinguish betwen D3hot and D3cold. If 894*8a978a17SVictor Perevertkin // the client sets DxState == PowerDeviceMaximum, then WDF will pick the 895*8a978a17SVictor Perevertkin // deepest idle state identified by the bus driver. If that deepest state 896*8a978a17SVictor Perevertkin // is D3cold, this field allows the client to override that and choose 897*8a978a17SVictor Perevertkin // D3hot. 898*8a978a17SVictor Perevertkin // 899*8a978a17SVictor Perevertkin // If WdfTrue, device will not use D3cold in S0. 900*8a978a17SVictor Perevertkin // If WdfFalse, device will use D3cold in S0 if the ACPI firmware indicates 901*8a978a17SVictor Perevertkin // that the device can enter that state, if DxState above does not 902*8a978a17SVictor Perevertkin // specify some other D-state and, if the device is armed for 903*8a978a17SVictor Perevertkin // wake, that it can generate its wake signal from D3cold. 904*8a978a17SVictor Perevertkin // If WdfUseDefault, this setting will be derived from the driver's INF, 905*8a978a17SVictor Perevertkin // specifically the presence or absence of the following two lines in 906*8a978a17SVictor Perevertkin // the DDInstall.HW section: 907*8a978a17SVictor Perevertkin // Include=machine.inf 908*8a978a17SVictor Perevertkin // Needs=PciD3ColdSupported 909*8a978a17SVictor Perevertkin // 910*8a978a17SVictor Perevertkin WDF_TRI_STATE ExcludeD3Cold; 911*8a978a17SVictor Perevertkin 912*8a978a17SVictor Perevertkin } WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS_V2_15, *PWDF_DEVICE_POWER_POLICY_IDLE_SETTINGS_V2_15; 913*8a978a17SVictor Perevertkin 914*8a978a17SVictor Perevertkin typedef struct _WDF_DEVICE_POWER_POLICY_WAKE_SETTINGS_V2_15 { 915*8a978a17SVictor Perevertkin // 916*8a978a17SVictor Perevertkin // Size of this structure in bytes 917*8a978a17SVictor Perevertkin // 918*8a978a17SVictor Perevertkin ULONG Size; 919*8a978a17SVictor Perevertkin 920*8a978a17SVictor Perevertkin // 921*8a978a17SVictor Perevertkin // The low power state in which the device will be placed when it is armed 922*8a978a17SVictor Perevertkin // for wake from Sx. 923*8a978a17SVictor Perevertkin // 924*8a978a17SVictor Perevertkin DEVICE_POWER_STATE DxState; 925*8a978a17SVictor Perevertkin 926*8a978a17SVictor Perevertkin // 927*8a978a17SVictor Perevertkin // Inidcates whether a user can control the idle policy of the device. 928*8a978a17SVictor Perevertkin // By default, a user is allowed to change the policy. 929*8a978a17SVictor Perevertkin // 930*8a978a17SVictor Perevertkin WDF_POWER_POLICY_SX_WAKE_USER_CONTROL UserControlOfWakeSettings; 931*8a978a17SVictor Perevertkin 932*8a978a17SVictor Perevertkin // 933*8a978a17SVictor Perevertkin // If WdfTrue, arming the device for wake while the machine is in Sx is 934*8a978a17SVictor Perevertkin // enabled. 935*8a978a17SVictor Perevertkin // 936*8a978a17SVictor Perevertkin // If WdfFalse, arming the device for wake while the machine is in Sx is 937*8a978a17SVictor Perevertkin // disabled. 938*8a978a17SVictor Perevertkin // 939*8a978a17SVictor Perevertkin // If WdfUseDefault, arming will be enabled. If UserControlOfWakeSettings 940*8a978a17SVictor Perevertkin // is set to WakeAllowUserControl, the user's settings will override the 941*8a978a17SVictor Perevertkin // default. 942*8a978a17SVictor Perevertkin // 943*8a978a17SVictor Perevertkin WDF_TRI_STATE Enabled; 944*8a978a17SVictor Perevertkin 945*8a978a17SVictor Perevertkin // 946*8a978a17SVictor Perevertkin // If set to TRUE, arming the parent device can depend on whether there 947*8a978a17SVictor Perevertkin // is atleast one child device armed for wake. 948*8a978a17SVictor Perevertkin // 949*8a978a17SVictor Perevertkin // If set to FALSE, arming of the parent device will be independent of 950*8a978a17SVictor Perevertkin // whether any of the child devices are armed for wake. 951*8a978a17SVictor Perevertkin // 952*8a978a17SVictor Perevertkin BOOLEAN ArmForWakeIfChildrenAreArmedForWake; 953*8a978a17SVictor Perevertkin 954*8a978a17SVictor Perevertkin // 955*8a978a17SVictor Perevertkin // Indicates that whenever the parent device completes the wake irp 956*8a978a17SVictor Perevertkin // successfully, the status needs to be also propagated to the child 957*8a978a17SVictor Perevertkin // devices. This helps in tracking which devices were responsible for 958*8a978a17SVictor Perevertkin // waking the system. 959*8a978a17SVictor Perevertkin // 960*8a978a17SVictor Perevertkin BOOLEAN IndicateChildWakeOnParentWake; 961*8a978a17SVictor Perevertkin 962*8a978a17SVictor Perevertkin } WDF_DEVICE_POWER_POLICY_WAKE_SETTINGS_V2_15, *PWDF_DEVICE_POWER_POLICY_WAKE_SETTINGS_V2_15; 963*8a978a17SVictor Perevertkin 964*8a978a17SVictor Perevertkin typedef struct _WDF_DEVICE_STATE_V2_15 { 965*8a978a17SVictor Perevertkin // 966*8a978a17SVictor Perevertkin // Size of this structure in bytes 967*8a978a17SVictor Perevertkin // 968*8a978a17SVictor Perevertkin ULONG Size; 969*8a978a17SVictor Perevertkin 970*8a978a17SVictor Perevertkin // 971*8a978a17SVictor Perevertkin // If set to WdfTrue, the device will be disabled 972*8a978a17SVictor Perevertkin // 973*8a978a17SVictor Perevertkin WDF_TRI_STATE Disabled; 974*8a978a17SVictor Perevertkin 975*8a978a17SVictor Perevertkin // 976*8a978a17SVictor Perevertkin // If set to WdfTrue, the device will not be displayed in device manager. 977*8a978a17SVictor Perevertkin // Once hidden, the device cannot be unhidden. 978*8a978a17SVictor Perevertkin // 979*8a978a17SVictor Perevertkin WDF_TRI_STATE DontDisplayInUI; 980*8a978a17SVictor Perevertkin 981*8a978a17SVictor Perevertkin // 982*8a978a17SVictor Perevertkin // If set to WdfTrue, the device is reporting itself as failed. If set 983*8a978a17SVictor Perevertkin // in conjuction with ResourcesChanged to WdfTrue, the device will receive 984*8a978a17SVictor Perevertkin // a PnP stop and then a new PnP start device. 985*8a978a17SVictor Perevertkin // 986*8a978a17SVictor Perevertkin WDF_TRI_STATE Failed; 987*8a978a17SVictor Perevertkin 988*8a978a17SVictor Perevertkin // 989*8a978a17SVictor Perevertkin // If set to WdfTrue, the device cannot be subsequently disabled. 990*8a978a17SVictor Perevertkin // 991*8a978a17SVictor Perevertkin WDF_TRI_STATE NotDisableable; 992*8a978a17SVictor Perevertkin 993*8a978a17SVictor Perevertkin 994*8a978a17SVictor Perevertkin 995*8a978a17SVictor Perevertkin 996*8a978a17SVictor Perevertkin // 997*8a978a17SVictor Perevertkin // 998*8a978a17SVictor Perevertkin // If set to WdfTrue, the device stack will be torn down. 999*8a978a17SVictor Perevertkin // 1000*8a978a17SVictor Perevertkin WDF_TRI_STATE Removed; 1001*8a978a17SVictor Perevertkin 1002*8a978a17SVictor Perevertkin // 1003*8a978a17SVictor Perevertkin // If set to WdfTrue, the device will be sent another PnP start. If the 1004*8a978a17SVictor Perevertkin // Failed field is set to WdfTrue as well, a PnP stop will be sent before 1005*8a978a17SVictor Perevertkin // the start. 1006*8a978a17SVictor Perevertkin // 1007*8a978a17SVictor Perevertkin WDF_TRI_STATE ResourcesChanged; 1008*8a978a17SVictor Perevertkin 1009*8a978a17SVictor Perevertkin } WDF_DEVICE_STATE_V2_15, *PWDF_DEVICE_STATE_V2_15; 1010*8a978a17SVictor Perevertkin 1011*8a978a17SVictor Perevertkin typedef struct _WDF_DEVICE_PNP_CAPABILITIES_V2_15 { 1012*8a978a17SVictor Perevertkin // 1013*8a978a17SVictor Perevertkin // Size of the structure in bytes 1014*8a978a17SVictor Perevertkin // 1015*8a978a17SVictor Perevertkin ULONG Size; 1016*8a978a17SVictor Perevertkin 1017*8a978a17SVictor Perevertkin // 1018*8a978a17SVictor Perevertkin // NOTE: To mark a PDO as raw, call WdfPdoInitAssignRawDevice 1019*8a978a17SVictor Perevertkin // 1020*8a978a17SVictor Perevertkin // 1021*8a978a17SVictor Perevertkin WDF_TRI_STATE LockSupported; 1022*8a978a17SVictor Perevertkin 1023*8a978a17SVictor Perevertkin WDF_TRI_STATE EjectSupported; 1024*8a978a17SVictor Perevertkin 1025*8a978a17SVictor Perevertkin WDF_TRI_STATE Removable; 1026*8a978a17SVictor Perevertkin 1027*8a978a17SVictor Perevertkin WDF_TRI_STATE DockDevice; 1028*8a978a17SVictor Perevertkin 1029*8a978a17SVictor Perevertkin WDF_TRI_STATE UniqueID; 1030*8a978a17SVictor Perevertkin 1031*8a978a17SVictor Perevertkin WDF_TRI_STATE SilentInstall; 1032*8a978a17SVictor Perevertkin 1033*8a978a17SVictor Perevertkin WDF_TRI_STATE SurpriseRemovalOK; 1034*8a978a17SVictor Perevertkin 1035*8a978a17SVictor Perevertkin WDF_TRI_STATE HardwareDisabled; 1036*8a978a17SVictor Perevertkin 1037*8a978a17SVictor Perevertkin WDF_TRI_STATE NoDisplayInUI; 1038*8a978a17SVictor Perevertkin 1039*8a978a17SVictor Perevertkin // 1040*8a978a17SVictor Perevertkin // Default values of -1 indicate not to set this value 1041*8a978a17SVictor Perevertkin // 1042*8a978a17SVictor Perevertkin ULONG Address; 1043*8a978a17SVictor Perevertkin 1044*8a978a17SVictor Perevertkin ULONG UINumber; 1045*8a978a17SVictor Perevertkin 1046*8a978a17SVictor Perevertkin } WDF_DEVICE_PNP_CAPABILITIES_V2_15, *PWDF_DEVICE_PNP_CAPABILITIES_V2_15; 1047*8a978a17SVictor Perevertkin 1048*8a978a17SVictor Perevertkin typedef struct _WDF_DEVICE_POWER_CAPABILITIES_V2_15 { 1049*8a978a17SVictor Perevertkin // 1050*8a978a17SVictor Perevertkin // Size of the structure in bytes 1051*8a978a17SVictor Perevertkin // 1052*8a978a17SVictor Perevertkin ULONG Size; 1053*8a978a17SVictor Perevertkin 1054*8a978a17SVictor Perevertkin WDF_TRI_STATE DeviceD1; 1055*8a978a17SVictor Perevertkin 1056*8a978a17SVictor Perevertkin WDF_TRI_STATE DeviceD2; 1057*8a978a17SVictor Perevertkin 1058*8a978a17SVictor Perevertkin WDF_TRI_STATE WakeFromD0; 1059*8a978a17SVictor Perevertkin 1060*8a978a17SVictor Perevertkin WDF_TRI_STATE WakeFromD1; 1061*8a978a17SVictor Perevertkin 1062*8a978a17SVictor Perevertkin WDF_TRI_STATE WakeFromD2; 1063*8a978a17SVictor Perevertkin 1064*8a978a17SVictor Perevertkin WDF_TRI_STATE WakeFromD3; 1065*8a978a17SVictor Perevertkin 1066*8a978a17SVictor Perevertkin // 1067*8a978a17SVictor Perevertkin // Default value PowerDeviceMaximum indicates not to set this value 1068*8a978a17SVictor Perevertkin // 1069*8a978a17SVictor Perevertkin DEVICE_POWER_STATE DeviceState[PowerSystemMaximum]; 1070*8a978a17SVictor Perevertkin 1071*8a978a17SVictor Perevertkin // 1072*8a978a17SVictor Perevertkin // Default value PowerDeviceMaximum, PowerSystemMaximum indicates not to 1073*8a978a17SVictor Perevertkin // set this value. 1074*8a978a17SVictor Perevertkin // 1075*8a978a17SVictor Perevertkin DEVICE_POWER_STATE DeviceWake; 1076*8a978a17SVictor Perevertkin 1077*8a978a17SVictor Perevertkin SYSTEM_POWER_STATE SystemWake; 1078*8a978a17SVictor Perevertkin 1079*8a978a17SVictor Perevertkin // 1080*8a978a17SVictor Perevertkin // Default values of -1 indicate not to set this value 1081*8a978a17SVictor Perevertkin // 1082*8a978a17SVictor Perevertkin ULONG D1Latency; 1083*8a978a17SVictor Perevertkin 1084*8a978a17SVictor Perevertkin ULONG D2Latency; 1085*8a978a17SVictor Perevertkin 1086*8a978a17SVictor Perevertkin ULONG D3Latency; 1087*8a978a17SVictor Perevertkin 1088*8a978a17SVictor Perevertkin // 1089*8a978a17SVictor Perevertkin // Ideal Dx state for the device to be put into when the machine moves into 1090*8a978a17SVictor Perevertkin // Sx and the device is not armed for wake. By default, the default will be 1091*8a978a17SVictor Perevertkin // placed into D3. If IdealDxStateForSx is lighter then 1092*8a978a17SVictor Perevertkin // DeviceState[Sx], then DeviceState[Sx] will be used as the Dx state. 1093*8a978a17SVictor Perevertkin // 1094*8a978a17SVictor Perevertkin DEVICE_POWER_STATE IdealDxStateForSx; 1095*8a978a17SVictor Perevertkin 1096*8a978a17SVictor Perevertkin } WDF_DEVICE_POWER_CAPABILITIES_V2_15, *PWDF_DEVICE_POWER_CAPABILITIES_V2_15; 1097*8a978a17SVictor Perevertkin 1098*8a978a17SVictor Perevertkin typedef struct _WDF_REMOVE_LOCK_OPTIONS_V2_15 { 1099*8a978a17SVictor Perevertkin // 1100*8a978a17SVictor Perevertkin // Size of the structure in bytes 1101*8a978a17SVictor Perevertkin // 1102*8a978a17SVictor Perevertkin ULONG Size; 1103*8a978a17SVictor Perevertkin 1104*8a978a17SVictor Perevertkin // 1105*8a978a17SVictor Perevertkin // Bit field combination of values from the WDF_REMOVE_LOCK_OPTIONS_FLAGS 1106*8a978a17SVictor Perevertkin // enumeration 1107*8a978a17SVictor Perevertkin // 1108*8a978a17SVictor Perevertkin ULONG Flags; 1109*8a978a17SVictor Perevertkin 1110*8a978a17SVictor Perevertkin } WDF_REMOVE_LOCK_OPTIONS_V2_15, *PWDF_REMOVE_LOCK_OPTIONS_V2_15; 1111*8a978a17SVictor Perevertkin 1112*8a978a17SVictor Perevertkin typedef struct _WDF_POWER_FRAMEWORK_SETTINGS_V2_15 { 1113*8a978a17SVictor Perevertkin // 1114*8a978a17SVictor Perevertkin // Size of the structure, in bytes. 1115*8a978a17SVictor Perevertkin // 1116*8a978a17SVictor Perevertkin ULONG Size; 1117*8a978a17SVictor Perevertkin 1118*8a978a17SVictor Perevertkin // 1119*8a978a17SVictor Perevertkin // Client driver's callback function that is invoked after KMDF has 1120*8a978a17SVictor Perevertkin // registered with the power framework. This field can be NULL if the 1121*8a978a17SVictor Perevertkin // client driver does not wish to specify this callback. 1122*8a978a17SVictor Perevertkin // 1123*8a978a17SVictor Perevertkin PFN_WDFDEVICE_WDM_POST_PO_FX_REGISTER_DEVICE EvtDeviceWdmPostPoFxRegisterDevice; 1124*8a978a17SVictor Perevertkin 1125*8a978a17SVictor Perevertkin // 1126*8a978a17SVictor Perevertkin // Client driver's callback function that is invoked before KMDF 1127*8a978a17SVictor Perevertkin // unregisters with the power framework. This field can be NULL if the 1128*8a978a17SVictor Perevertkin // client driver does not wish to specify this callback. 1129*8a978a17SVictor Perevertkin // 1130*8a978a17SVictor Perevertkin PFN_WDFDEVICE_WDM_PRE_PO_FX_UNREGISTER_DEVICE EvtDeviceWdmPrePoFxUnregisterDevice; 1131*8a978a17SVictor Perevertkin 1132*8a978a17SVictor Perevertkin // 1133*8a978a17SVictor Perevertkin // Pointer to a PO_FX_COMPONENT structure that describes the only component 1134*8a978a17SVictor Perevertkin // in the single-component device. This field can be NULL if the client 1135*8a978a17SVictor Perevertkin // driver wants KMDF to use the default specification for this component 1136*8a978a17SVictor Perevertkin // (i.e. support for F0 only). 1137*8a978a17SVictor Perevertkin // 1138*8a978a17SVictor Perevertkin PPO_FX_COMPONENT Component; 1139*8a978a17SVictor Perevertkin 1140*8a978a17SVictor Perevertkin // 1141*8a978a17SVictor Perevertkin // Client driver's PO_FX_COMPONENT_ACTIVE_CONDITION_CALLBACK callback 1142*8a978a17SVictor Perevertkin // function. This field can be NULL if the client driver does not wish to 1143*8a978a17SVictor Perevertkin // specify this callback. 1144*8a978a17SVictor Perevertkin // 1145*8a978a17SVictor Perevertkin PPO_FX_COMPONENT_ACTIVE_CONDITION_CALLBACK ComponentActiveConditionCallback; 1146*8a978a17SVictor Perevertkin 1147*8a978a17SVictor Perevertkin // 1148*8a978a17SVictor Perevertkin // Client driver's PO_FX_COMPONENT_IDLE_CONDITION_CALLBACK callback 1149*8a978a17SVictor Perevertkin // function. This field can be NULL if the client driver does not wish to 1150*8a978a17SVictor Perevertkin // specify this callback. 1151*8a978a17SVictor Perevertkin // 1152*8a978a17SVictor Perevertkin PPO_FX_COMPONENT_IDLE_CONDITION_CALLBACK ComponentIdleConditionCallback; 1153*8a978a17SVictor Perevertkin 1154*8a978a17SVictor Perevertkin // 1155*8a978a17SVictor Perevertkin // Client driver's PO_FX_COMPONENT_IDLE_STATE_CALLBACK callback function. 1156*8a978a17SVictor Perevertkin // This field can be NULL if the client driver does not wish to specify 1157*8a978a17SVictor Perevertkin // this callback. 1158*8a978a17SVictor Perevertkin // 1159*8a978a17SVictor Perevertkin PPO_FX_COMPONENT_IDLE_STATE_CALLBACK ComponentIdleStateCallback; 1160*8a978a17SVictor Perevertkin 1161*8a978a17SVictor Perevertkin // 1162*8a978a17SVictor Perevertkin // Client driver's PO_FX_POWER_CONTROL_CALLBACK callback function. This 1163*8a978a17SVictor Perevertkin // field can be NULL if the client driver does not wish to specify this 1164*8a978a17SVictor Perevertkin // callback. 1165*8a978a17SVictor Perevertkin // 1166*8a978a17SVictor Perevertkin PPO_FX_POWER_CONTROL_CALLBACK PowerControlCallback; 1167*8a978a17SVictor Perevertkin 1168*8a978a17SVictor Perevertkin // 1169*8a978a17SVictor Perevertkin // Context value that is passed in to the ComponentIdleStateCallback and 1170*8a978a17SVictor Perevertkin // PowerControlCallback callback functions. 1171*8a978a17SVictor Perevertkin // 1172*8a978a17SVictor Perevertkin PVOID PoFxDeviceContext; 1173*8a978a17SVictor Perevertkin 1174*8a978a17SVictor Perevertkin } WDF_POWER_FRAMEWORK_SETTINGS_V2_15, *PWDF_POWER_FRAMEWORK_SETTINGS_V2_15; 1175*8a978a17SVictor Perevertkin 1176*8a978a17SVictor Perevertkin typedef struct _WDF_IO_TYPE_CONFIG_V2_15 { 1177*8a978a17SVictor Perevertkin // 1178*8a978a17SVictor Perevertkin // Size of this structure in bytes 1179*8a978a17SVictor Perevertkin // 1180*8a978a17SVictor Perevertkin ULONG Size; 1181*8a978a17SVictor Perevertkin 1182*8a978a17SVictor Perevertkin // 1183*8a978a17SVictor Perevertkin // <KMDF_DOC/> 1184*8a978a17SVictor Perevertkin // Identifies the method that the driver will use to access data buffers 1185*8a978a17SVictor Perevertkin // that it receives for read and write requests. 1186*8a978a17SVictor Perevertkin // 1187*8a978a17SVictor Perevertkin // <UMDF_DOC/> 1188*8a978a17SVictor Perevertkin // Identifies the method that the driver will "prefer" to use to access data 1189*8a978a17SVictor Perevertkin // buffers that it receives for read and write requests. Note that UMDF 1190*8a978a17SVictor Perevertkin // driver provides just a preference, and not a guarantee.Therefore, 1191*8a978a17SVictor Perevertkin // even if a driver specified direct access method, UMDF might use the 1192*8a978a17SVictor Perevertkin // buffered access method for one or more of the device's requests to 1193*8a978a17SVictor Perevertkin // improve performance. For example, UMDF uses buffered access for small 1194*8a978a17SVictor Perevertkin // buffers, if it can copy the data to the driver's buffer faster than it 1195*8a978a17SVictor Perevertkin // can map the buffers for direct access. 1196*8a978a17SVictor Perevertkin // 1197*8a978a17SVictor Perevertkin WDF_DEVICE_IO_TYPE ReadWriteIoType; 1198*8a978a17SVictor Perevertkin 1199*8a978a17SVictor Perevertkin // 1200*8a978a17SVictor Perevertkin // <UMDF_ONLY/> 1201*8a978a17SVictor Perevertkin // Identifies the method that the driver will "prefer" to use to access data 1202*8a978a17SVictor Perevertkin // buffers that it receives for IOCTL requests. Note that UMDF 1203*8a978a17SVictor Perevertkin // driver provides just a preference, and not a guarantee. Therefore, 1204*8a978a17SVictor Perevertkin // even if a driver specified direct access method, UMDF might use the 1205*8a978a17SVictor Perevertkin // buffered access method for one or more of the device's requests to 1206*8a978a17SVictor Perevertkin // improve performance. For example, UMDF uses buffered access for small 1207*8a978a17SVictor Perevertkin // buffers, if it can copy the data to the driver's buffer faster than it 1208*8a978a17SVictor Perevertkin // can map the buffers for direct access. 1209*8a978a17SVictor Perevertkin // 1210*8a978a17SVictor Perevertkin WDF_DEVICE_IO_TYPE DeviceControlIoType; 1211*8a978a17SVictor Perevertkin 1212*8a978a17SVictor Perevertkin // 1213*8a978a17SVictor Perevertkin // <UMDF_ONLY/> 1214*8a978a17SVictor Perevertkin // Optional, Provides the smallest buffer size (in bytes) for which 1215*8a978a17SVictor Perevertkin // UMDF will use direct access for the buffers. For example, set 1216*8a978a17SVictor Perevertkin // DirectTransferThreshold to "12288" to indicate that UMDF should use buffered 1217*8a978a17SVictor Perevertkin // access for all buffers that are smaller than 12 kilobytes, and direct 1218*8a978a17SVictor Perevertkin // access for buffers equal to or greater than that. Typically, you 1219*8a978a17SVictor Perevertkin // do not need to provide this value because UMDF uses a value that provides 1220*8a978a17SVictor Perevertkin // the best performance. Note that there are other requirements that must be 1221*8a978a17SVictor Perevertkin // met in order to get direct access of buffers. See Docs for details. 1222*8a978a17SVictor Perevertkin // 1223*8a978a17SVictor Perevertkin ULONG DirectTransferThreshold; 1224*8a978a17SVictor Perevertkin 1225*8a978a17SVictor Perevertkin } WDF_IO_TYPE_CONFIG_V2_15, *PWDF_IO_TYPE_CONFIG_V2_15; 1226*8a978a17SVictor Perevertkin 1227*8a978a17SVictor Perevertkin typedef struct _WDF_DEVICE_INTERFACE_PROPERTY_DATA_V2_15 { 1228*8a978a17SVictor Perevertkin _In_ ULONG Size; 1229*8a978a17SVictor Perevertkin 1230*8a978a17SVictor Perevertkin // 1231*8a978a17SVictor Perevertkin // A pointer to a GUID that identifies the device interface class. 1232*8a978a17SVictor Perevertkin // 1233*8a978a17SVictor Perevertkin _In_ const GUID * InterfaceClassGUID; 1234*8a978a17SVictor Perevertkin 1235*8a978a17SVictor Perevertkin // 1236*8a978a17SVictor Perevertkin // A pointer to a UNICODE_STRING structure that describes a reference 1237*8a978a17SVictor Perevertkin // string for the device interface. This parameter is optional and can 1238*8a978a17SVictor Perevertkin // be NULL. 1239*8a978a17SVictor Perevertkin _In_opt_ PCUNICODE_STRING ReferenceString; 1240*8a978a17SVictor Perevertkin 1241*8a978a17SVictor Perevertkin // 1242*8a978a17SVictor Perevertkin // A pointer to a DEVPROPKEY structure that specifies the device 1243*8a978a17SVictor Perevertkin // property key. 1244*8a978a17SVictor Perevertkin // 1245*8a978a17SVictor Perevertkin _In_ const DEVPROPKEY * PropertyKey; 1246*8a978a17SVictor Perevertkin 1247*8a978a17SVictor Perevertkin // 1248*8a978a17SVictor Perevertkin // A locale identifier. Set this parameter either to a language-specific 1249*8a978a17SVictor Perevertkin // LCID value or to LOCALE_NEUTRAL. The LOCALE_NEUTRAL LCID specifies 1250*8a978a17SVictor Perevertkin // that the property is language-neutral (that is, not specific to any 1251*8a978a17SVictor Perevertkin // language). Do not set this parameter to LOCALE_SYSTEM_DEFAULT or 1252*8a978a17SVictor Perevertkin // LOCALE_USER_DEFAULT. For more information about language-specific 1253*8a978a17SVictor Perevertkin // LCID values, see LCID Structure. 1254*8a978a17SVictor Perevertkin // 1255*8a978a17SVictor Perevertkin _In_ LCID Lcid; 1256*8a978a17SVictor Perevertkin 1257*8a978a17SVictor Perevertkin // 1258*8a978a17SVictor Perevertkin // Set this parameter to PLUGPLAY_PROPERTY_PERSISTENT if the property 1259*8a978a17SVictor Perevertkin // value set by this routine should persist across computer restarts. 1260*8a978a17SVictor Perevertkin // Otherwise, set Flags to zero. Ignored for Query DDIs. 1261*8a978a17SVictor Perevertkin // 1262*8a978a17SVictor Perevertkin _In_ ULONG Flags; 1263*8a978a17SVictor Perevertkin 1264*8a978a17SVictor Perevertkin } WDF_DEVICE_INTERFACE_PROPERTY_DATA_V2_15, *PWDF_DEVICE_INTERFACE_PROPERTY_DATA_V2_15; 1265*8a978a17SVictor Perevertkin 1266*8a978a17SVictor Perevertkin typedef struct _WDF_DEVICE_PROPERTY_DATA_V2_15 { 1267*8a978a17SVictor Perevertkin // 1268*8a978a17SVictor Perevertkin // Size of this structure 1269*8a978a17SVictor Perevertkin // 1270*8a978a17SVictor Perevertkin _In_ ULONG Size; 1271*8a978a17SVictor Perevertkin 1272*8a978a17SVictor Perevertkin // 1273*8a978a17SVictor Perevertkin // A pointer to a DEVPROPKEY structure that specifies the device 1274*8a978a17SVictor Perevertkin // property key. 1275*8a978a17SVictor Perevertkin // 1276*8a978a17SVictor Perevertkin _In_ const DEVPROPKEY * PropertyKey; 1277*8a978a17SVictor Perevertkin 1278*8a978a17SVictor Perevertkin // 1279*8a978a17SVictor Perevertkin // A locale identifier. Set this parameter either to a language-specific 1280*8a978a17SVictor Perevertkin // LCID value or to LOCALE_NEUTRAL. The LOCALE_NEUTRAL LCID specifies 1281*8a978a17SVictor Perevertkin // that the property is language-neutral (that is, not specific to any 1282*8a978a17SVictor Perevertkin // language). Do not set this parameter to LOCALE_SYSTEM_DEFAULT or 1283*8a978a17SVictor Perevertkin // LOCALE_USER_DEFAULT. For more information about language-specific 1284*8a978a17SVictor Perevertkin // LCID values, see LCID Structure. 1285*8a978a17SVictor Perevertkin // 1286*8a978a17SVictor Perevertkin _In_ LCID Lcid; 1287*8a978a17SVictor Perevertkin 1288*8a978a17SVictor Perevertkin // 1289*8a978a17SVictor Perevertkin // Set this parameter to PLUGPLAY_PROPERTY_PERSISTENT if the property 1290*8a978a17SVictor Perevertkin // value set by this routine should persist across computer restarts. 1291*8a978a17SVictor Perevertkin // Otherwise, set Flags to zero. Ignored for Query DDIs. 1292*8a978a17SVictor Perevertkin // 1293*8a978a17SVictor Perevertkin _In_ ULONG Flags; 1294*8a978a17SVictor Perevertkin 1295*8a978a17SVictor Perevertkin } WDF_DEVICE_PROPERTY_DATA_V2_15, *PWDF_DEVICE_PROPERTY_DATA_V2_15; 1296*8a978a17SVictor Perevertkin 1297*8a978a17SVictor Perevertkin // End of versioning of structures for wdfDevice.h 1298*8a978a17SVictor Perevertkin 1299*8a978a17SVictor Perevertkin // 1300*8a978a17SVictor Perevertkin // Versioning of structures for wdfDevicePri.h 1301*8a978a17SVictor Perevertkin // 1302*8a978a17SVictor Perevertkin // End of versioning of structures for wdfDevicePri.h 1303*8a978a17SVictor Perevertkin 1304*8a978a17SVictor Perevertkin // 1305*8a978a17SVictor Perevertkin // Versioning of structures for wdfDmaEnabler.h 1306*8a978a17SVictor Perevertkin // 1307*8a978a17SVictor Perevertkin // End of versioning of structures for wdfDmaEnabler.h 1308*8a978a17SVictor Perevertkin 1309*8a978a17SVictor Perevertkin // 1310*8a978a17SVictor Perevertkin // Versioning of structures for wdfDmaTransaction.h 1311*8a978a17SVictor Perevertkin // 1312*8a978a17SVictor Perevertkin // End of versioning of structures for wdfDmaTransaction.h 1313*8a978a17SVictor Perevertkin 1314*8a978a17SVictor Perevertkin // 1315*8a978a17SVictor Perevertkin // Versioning of structures for wdfdpc.h 1316*8a978a17SVictor Perevertkin // 1317*8a978a17SVictor Perevertkin // End of versioning of structures for wdfdpc.h 1318*8a978a17SVictor Perevertkin 1319*8a978a17SVictor Perevertkin // 1320*8a978a17SVictor Perevertkin // Versioning of structures for wdfdriver.h 1321*8a978a17SVictor Perevertkin // 1322*8a978a17SVictor Perevertkin typedef struct _WDF_DRIVER_CONFIG_V2_15 { 1323*8a978a17SVictor Perevertkin // 1324*8a978a17SVictor Perevertkin // Size of this structure in bytes 1325*8a978a17SVictor Perevertkin // 1326*8a978a17SVictor Perevertkin ULONG Size; 1327*8a978a17SVictor Perevertkin 1328*8a978a17SVictor Perevertkin // 1329*8a978a17SVictor Perevertkin // Event callbacks 1330*8a978a17SVictor Perevertkin // 1331*8a978a17SVictor Perevertkin PFN_WDF_DRIVER_DEVICE_ADD EvtDriverDeviceAdd; 1332*8a978a17SVictor Perevertkin 1333*8a978a17SVictor Perevertkin PFN_WDF_DRIVER_UNLOAD EvtDriverUnload; 1334*8a978a17SVictor Perevertkin 1335*8a978a17SVictor Perevertkin // 1336*8a978a17SVictor Perevertkin // Combination of WDF_DRIVER_INIT_FLAGS values 1337*8a978a17SVictor Perevertkin // 1338*8a978a17SVictor Perevertkin ULONG DriverInitFlags; 1339*8a978a17SVictor Perevertkin 1340*8a978a17SVictor Perevertkin // 1341*8a978a17SVictor Perevertkin // Pool tag to use for all allocations made by the framework on behalf of 1342*8a978a17SVictor Perevertkin // the client driver. 1343*8a978a17SVictor Perevertkin // 1344*8a978a17SVictor Perevertkin ULONG DriverPoolTag; 1345*8a978a17SVictor Perevertkin 1346*8a978a17SVictor Perevertkin } WDF_DRIVER_CONFIG_V2_15, *PWDF_DRIVER_CONFIG_V2_15; 1347*8a978a17SVictor Perevertkin 1348*8a978a17SVictor Perevertkin typedef struct _WDF_DRIVER_VERSION_AVAILABLE_PARAMS_V2_15 { 1349*8a978a17SVictor Perevertkin // 1350*8a978a17SVictor Perevertkin // Size of the structure in bytes 1351*8a978a17SVictor Perevertkin // 1352*8a978a17SVictor Perevertkin ULONG Size; 1353*8a978a17SVictor Perevertkin 1354*8a978a17SVictor Perevertkin // 1355*8a978a17SVictor Perevertkin // Major Version requested 1356*8a978a17SVictor Perevertkin // 1357*8a978a17SVictor Perevertkin ULONG MajorVersion; 1358*8a978a17SVictor Perevertkin 1359*8a978a17SVictor Perevertkin // 1360*8a978a17SVictor Perevertkin // Minor Version requested 1361*8a978a17SVictor Perevertkin // 1362*8a978a17SVictor Perevertkin ULONG MinorVersion; 1363*8a978a17SVictor Perevertkin 1364*8a978a17SVictor Perevertkin } WDF_DRIVER_VERSION_AVAILABLE_PARAMS_V2_15, *PWDF_DRIVER_VERSION_AVAILABLE_PARAMS_V2_15; 1365*8a978a17SVictor Perevertkin 1366*8a978a17SVictor Perevertkin // End of versioning of structures for wdfdriver.h 1367*8a978a17SVictor Perevertkin 1368*8a978a17SVictor Perevertkin // 1369*8a978a17SVictor Perevertkin // Versioning of structures for wdffdo.h 1370*8a978a17SVictor Perevertkin // 1371*8a978a17SVictor Perevertkin typedef struct _WDF_FDO_EVENT_CALLBACKS_V2_15 { 1372*8a978a17SVictor Perevertkin // 1373*8a978a17SVictor Perevertkin // Size of this structure in bytes 1374*8a978a17SVictor Perevertkin // 1375*8a978a17SVictor Perevertkin ULONG Size; 1376*8a978a17SVictor Perevertkin 1377*8a978a17SVictor Perevertkin PFN_WDF_DEVICE_FILTER_RESOURCE_REQUIREMENTS EvtDeviceFilterAddResourceRequirements; 1378*8a978a17SVictor Perevertkin 1379*8a978a17SVictor Perevertkin PFN_WDF_DEVICE_FILTER_RESOURCE_REQUIREMENTS EvtDeviceFilterRemoveResourceRequirements; 1380*8a978a17SVictor Perevertkin 1381*8a978a17SVictor Perevertkin PFN_WDF_DEVICE_REMOVE_ADDED_RESOURCES EvtDeviceRemoveAddedResources; 1382*8a978a17SVictor Perevertkin 1383*8a978a17SVictor Perevertkin } WDF_FDO_EVENT_CALLBACKS_V2_15, *PWDF_FDO_EVENT_CALLBACKS_V2_15; 1384*8a978a17SVictor Perevertkin 1385*8a978a17SVictor Perevertkin // End of versioning of structures for wdffdo.h 1386*8a978a17SVictor Perevertkin 1387*8a978a17SVictor Perevertkin // 1388*8a978a17SVictor Perevertkin // Versioning of structures for wdffileobject.h 1389*8a978a17SVictor Perevertkin // 1390*8a978a17SVictor Perevertkin // End of versioning of structures for wdffileobject.h 1391*8a978a17SVictor Perevertkin 1392*8a978a17SVictor Perevertkin // 1393*8a978a17SVictor Perevertkin // Versioning of structures for wdfGlobals.h 1394*8a978a17SVictor Perevertkin // 1395*8a978a17SVictor Perevertkin typedef struct _WDF_DRIVER_GLOBALS_V2_15 { 1396*8a978a17SVictor Perevertkin // backpointer to the handle for this driver 1397*8a978a17SVictor Perevertkin WDFDRIVER Driver; 1398*8a978a17SVictor Perevertkin 1399*8a978a17SVictor Perevertkin // Flags indicated by the driver during create 1400*8a978a17SVictor Perevertkin ULONG DriverFlags; 1401*8a978a17SVictor Perevertkin 1402*8a978a17SVictor Perevertkin // Tag generated by WDF for the driver. Tag used by allocations made on 1403*8a978a17SVictor Perevertkin // behalf of the driver by WDF. 1404*8a978a17SVictor Perevertkin ULONG DriverTag; 1405*8a978a17SVictor Perevertkin 1406*8a978a17SVictor Perevertkin CHAR DriverName[WDF_DRIVER_GLOBALS_NAME_LEN]; 1407*8a978a17SVictor Perevertkin 1408*8a978a17SVictor Perevertkin // If TRUE, the stub code will capture DriverObject->DriverUnload and insert 1409*8a978a17SVictor Perevertkin // itself first in the unload chain. If FALSE, DriverUnload is left alone 1410*8a978a17SVictor Perevertkin // (but WDF will not be notified of unload and there will be no auto cleanup). 1411*8a978a17SVictor Perevertkin BOOLEAN DisplaceDriverUnload; 1412*8a978a17SVictor Perevertkin 1413*8a978a17SVictor Perevertkin } WDF_DRIVER_GLOBALS_V2_15, *PWDF_DRIVER_GLOBALS_V2_15; 1414*8a978a17SVictor Perevertkin 1415*8a978a17SVictor Perevertkin // End of versioning of structures for wdfGlobals.h 1416*8a978a17SVictor Perevertkin 1417*8a978a17SVictor Perevertkin // 1418*8a978a17SVictor Perevertkin // Versioning of structures for wdfhid.h 1419*8a978a17SVictor Perevertkin // 1420*8a978a17SVictor Perevertkin // End of versioning of structures for wdfhid.h 1421*8a978a17SVictor Perevertkin 1422*8a978a17SVictor Perevertkin // 1423*8a978a17SVictor Perevertkin // Versioning of structures for wdfhwaccess.h 1424*8a978a17SVictor Perevertkin // 1425*8a978a17SVictor Perevertkin // End of versioning of structures for wdfhwaccess.h 1426*8a978a17SVictor Perevertkin 1427*8a978a17SVictor Perevertkin // 1428*8a978a17SVictor Perevertkin // Versioning of structures for wdfinstaller.h 1429*8a978a17SVictor Perevertkin // 1430*8a978a17SVictor Perevertkin // End of versioning of structures for wdfinstaller.h 1431*8a978a17SVictor Perevertkin 1432*8a978a17SVictor Perevertkin // 1433*8a978a17SVictor Perevertkin // Versioning of structures for wdfinternal.h 1434*8a978a17SVictor Perevertkin // 1435*8a978a17SVictor Perevertkin // End of versioning of structures for wdfinternal.h 1436*8a978a17SVictor Perevertkin 1437*8a978a17SVictor Perevertkin // 1438*8a978a17SVictor Perevertkin // Versioning of structures for wdfinterrupt.h 1439*8a978a17SVictor Perevertkin // 1440*8a978a17SVictor Perevertkin // 1441*8a978a17SVictor Perevertkin // Interrupt Configuration Structure 1442*8a978a17SVictor Perevertkin // 1443*8a978a17SVictor Perevertkin typedef struct _WDF_INTERRUPT_CONFIG_V2_15 { 1444*8a978a17SVictor Perevertkin ULONG Size; 1445*8a978a17SVictor Perevertkin 1446*8a978a17SVictor Perevertkin // 1447*8a978a17SVictor Perevertkin // If this interrupt is to be synchronized with other interrupt(s) assigned 1448*8a978a17SVictor Perevertkin // to the same WDFDEVICE, create a WDFSPINLOCK and assign it to each of the 1449*8a978a17SVictor Perevertkin // WDFINTERRUPTs config. 1450*8a978a17SVictor Perevertkin // 1451*8a978a17SVictor Perevertkin WDFSPINLOCK SpinLock; 1452*8a978a17SVictor Perevertkin 1453*8a978a17SVictor Perevertkin WDF_TRI_STATE ShareVector; 1454*8a978a17SVictor Perevertkin 1455*8a978a17SVictor Perevertkin BOOLEAN FloatingSave; 1456*8a978a17SVictor Perevertkin 1457*8a978a17SVictor Perevertkin // 1458*8a978a17SVictor Perevertkin // DIRQL handling: automatic serialization of the DpcForIsr/WaitItemForIsr. 1459*8a978a17SVictor Perevertkin // Passive-level handling: automatic serialization of all callbacks. 1460*8a978a17SVictor Perevertkin // 1461*8a978a17SVictor Perevertkin BOOLEAN AutomaticSerialization; 1462*8a978a17SVictor Perevertkin 1463*8a978a17SVictor Perevertkin // 1464*8a978a17SVictor Perevertkin // Event Callbacks 1465*8a978a17SVictor Perevertkin // 1466*8a978a17SVictor Perevertkin PFN_WDF_INTERRUPT_ISR EvtInterruptIsr; 1467*8a978a17SVictor Perevertkin 1468*8a978a17SVictor Perevertkin PFN_WDF_INTERRUPT_DPC EvtInterruptDpc; 1469*8a978a17SVictor Perevertkin 1470*8a978a17SVictor Perevertkin PFN_WDF_INTERRUPT_ENABLE EvtInterruptEnable; 1471*8a978a17SVictor Perevertkin 1472*8a978a17SVictor Perevertkin PFN_WDF_INTERRUPT_DISABLE EvtInterruptDisable; 1473*8a978a17SVictor Perevertkin 1474*8a978a17SVictor Perevertkin PFN_WDF_INTERRUPT_WORKITEM EvtInterruptWorkItem; 1475*8a978a17SVictor Perevertkin 1476*8a978a17SVictor Perevertkin // 1477*8a978a17SVictor Perevertkin // These fields are only used when interrupt is created in 1478*8a978a17SVictor Perevertkin // EvtDevicePrepareHardware callback. 1479*8a978a17SVictor Perevertkin // 1480*8a978a17SVictor Perevertkin PCM_PARTIAL_RESOURCE_DESCRIPTOR InterruptRaw; 1481*8a978a17SVictor Perevertkin 1482*8a978a17SVictor Perevertkin PCM_PARTIAL_RESOURCE_DESCRIPTOR InterruptTranslated; 1483*8a978a17SVictor Perevertkin 1484*8a978a17SVictor Perevertkin // 1485*8a978a17SVictor Perevertkin // Optional passive lock for handling interrupts at passive-level. 1486*8a978a17SVictor Perevertkin // 1487*8a978a17SVictor Perevertkin WDFWAITLOCK WaitLock; 1488*8a978a17SVictor Perevertkin 1489*8a978a17SVictor Perevertkin // 1490*8a978a17SVictor Perevertkin // TRUE: handle interrupt at passive-level. 1491*8a978a17SVictor Perevertkin // FALSE: handle interrupt at DIRQL level. This is the default. 1492*8a978a17SVictor Perevertkin // 1493*8a978a17SVictor Perevertkin BOOLEAN PassiveHandling; 1494*8a978a17SVictor Perevertkin 1495*8a978a17SVictor Perevertkin // 1496*8a978a17SVictor Perevertkin // TRUE: Interrupt is reported inactive on explicit power down 1497*8a978a17SVictor Perevertkin // instead of disconnecting it. 1498*8a978a17SVictor Perevertkin // FALSE: Interrupt is disconnected instead of reporting inactive 1499*8a978a17SVictor Perevertkin // on explicit power down. 1500*8a978a17SVictor Perevertkin // DEFAULT: Framework decides the right value. 1501*8a978a17SVictor Perevertkin // 1502*8a978a17SVictor Perevertkin WDF_TRI_STATE ReportInactiveOnPowerDown; 1503*8a978a17SVictor Perevertkin 1504*8a978a17SVictor Perevertkin // 1505*8a978a17SVictor Perevertkin // TRUE: Interrupt is used to wake the device from low-power states 1506*8a978a17SVictor Perevertkin // and when the device is armed for wake this interrupt should 1507*8a978a17SVictor Perevertkin // remain connected. 1508*8a978a17SVictor Perevertkin // FALSE: Interrupt is not used to wake the device from low-power states. 1509*8a978a17SVictor Perevertkin // This is the default. 1510*8a978a17SVictor Perevertkin // 1511*8a978a17SVictor Perevertkin BOOLEAN CanWakeDevice; 1512*8a978a17SVictor Perevertkin 1513*8a978a17SVictor Perevertkin } WDF_INTERRUPT_CONFIG_V2_15, *PWDF_INTERRUPT_CONFIG_V2_15; 1514*8a978a17SVictor Perevertkin 1515*8a978a17SVictor Perevertkin typedef struct _WDF_INTERRUPT_INFO_V2_15 { 1516*8a978a17SVictor Perevertkin // 1517*8a978a17SVictor Perevertkin // Size of this structure in bytes 1518*8a978a17SVictor Perevertkin // 1519*8a978a17SVictor Perevertkin ULONG Size; 1520*8a978a17SVictor Perevertkin 1521*8a978a17SVictor Perevertkin ULONG64 Reserved1; 1522*8a978a17SVictor Perevertkin 1523*8a978a17SVictor Perevertkin KAFFINITY TargetProcessorSet; 1524*8a978a17SVictor Perevertkin 1525*8a978a17SVictor Perevertkin ULONG Reserved2; 1526*8a978a17SVictor Perevertkin 1527*8a978a17SVictor Perevertkin ULONG MessageNumber; 1528*8a978a17SVictor Perevertkin 1529*8a978a17SVictor Perevertkin ULONG Vector; 1530*8a978a17SVictor Perevertkin 1531*8a978a17SVictor Perevertkin KIRQL Irql; 1532*8a978a17SVictor Perevertkin 1533*8a978a17SVictor Perevertkin KINTERRUPT_MODE Mode; 1534*8a978a17SVictor Perevertkin 1535*8a978a17SVictor Perevertkin WDF_INTERRUPT_POLARITY Polarity; 1536*8a978a17SVictor Perevertkin 1537*8a978a17SVictor Perevertkin BOOLEAN MessageSignaled; 1538*8a978a17SVictor Perevertkin 1539*8a978a17SVictor Perevertkin // CM_SHARE_DISPOSITION 1540*8a978a17SVictor Perevertkin UCHAR ShareDisposition; 1541*8a978a17SVictor Perevertkin 1542*8a978a17SVictor Perevertkin DECLSPEC_ALIGN(8) USHORT Group; 1543*8a978a17SVictor Perevertkin 1544*8a978a17SVictor Perevertkin } WDF_INTERRUPT_INFO_V2_15, *PWDF_INTERRUPT_INFO_V2_15; 1545*8a978a17SVictor Perevertkin 1546*8a978a17SVictor Perevertkin // 1547*8a978a17SVictor Perevertkin // Interrupt Extended Policy Configuration Structure 1548*8a978a17SVictor Perevertkin // 1549*8a978a17SVictor Perevertkin typedef struct _WDF_INTERRUPT_EXTENDED_POLICY_V2_15 { 1550*8a978a17SVictor Perevertkin // 1551*8a978a17SVictor Perevertkin // Size of this structure in bytes 1552*8a978a17SVictor Perevertkin // 1553*8a978a17SVictor Perevertkin ULONG Size; 1554*8a978a17SVictor Perevertkin 1555*8a978a17SVictor Perevertkin WDF_INTERRUPT_POLICY Policy; 1556*8a978a17SVictor Perevertkin 1557*8a978a17SVictor Perevertkin WDF_INTERRUPT_PRIORITY Priority; 1558*8a978a17SVictor Perevertkin 1559*8a978a17SVictor Perevertkin GROUP_AFFINITY TargetProcessorSetAndGroup; 1560*8a978a17SVictor Perevertkin 1561*8a978a17SVictor Perevertkin } WDF_INTERRUPT_EXTENDED_POLICY_V2_15, *PWDF_INTERRUPT_EXTENDED_POLICY_V2_15; 1562*8a978a17SVictor Perevertkin 1563*8a978a17SVictor Perevertkin // End of versioning of structures for wdfinterrupt.h 1564*8a978a17SVictor Perevertkin 1565*8a978a17SVictor Perevertkin // 1566*8a978a17SVictor Perevertkin // Versioning of structures for wdfio.h 1567*8a978a17SVictor Perevertkin // 1568*8a978a17SVictor Perevertkin // 1569*8a978a17SVictor Perevertkin // This is the structure used to configure an IoQueue and 1570*8a978a17SVictor Perevertkin // register callback events to it. 1571*8a978a17SVictor Perevertkin // 1572*8a978a17SVictor Perevertkin // 1573*8a978a17SVictor Perevertkin typedef struct _WDF_IO_QUEUE_CONFIG_V2_15 { 1574*8a978a17SVictor Perevertkin ULONG Size; 1575*8a978a17SVictor Perevertkin 1576*8a978a17SVictor Perevertkin WDF_IO_QUEUE_DISPATCH_TYPE DispatchType; 1577*8a978a17SVictor Perevertkin 1578*8a978a17SVictor Perevertkin WDF_TRI_STATE PowerManaged; 1579*8a978a17SVictor Perevertkin 1580*8a978a17SVictor Perevertkin BOOLEAN AllowZeroLengthRequests; 1581*8a978a17SVictor Perevertkin 1582*8a978a17SVictor Perevertkin BOOLEAN DefaultQueue; 1583*8a978a17SVictor Perevertkin 1584*8a978a17SVictor Perevertkin PFN_WDF_IO_QUEUE_IO_DEFAULT EvtIoDefault; 1585*8a978a17SVictor Perevertkin 1586*8a978a17SVictor Perevertkin PFN_WDF_IO_QUEUE_IO_READ EvtIoRead; 1587*8a978a17SVictor Perevertkin 1588*8a978a17SVictor Perevertkin PFN_WDF_IO_QUEUE_IO_WRITE EvtIoWrite; 1589*8a978a17SVictor Perevertkin 1590*8a978a17SVictor Perevertkin PFN_WDF_IO_QUEUE_IO_DEVICE_CONTROL EvtIoDeviceControl; 1591*8a978a17SVictor Perevertkin 1592*8a978a17SVictor Perevertkin PFN_WDF_IO_QUEUE_IO_INTERNAL_DEVICE_CONTROL EvtIoInternalDeviceControl; 1593*8a978a17SVictor Perevertkin 1594*8a978a17SVictor Perevertkin PFN_WDF_IO_QUEUE_IO_STOP EvtIoStop; 1595*8a978a17SVictor Perevertkin 1596*8a978a17SVictor Perevertkin PFN_WDF_IO_QUEUE_IO_RESUME EvtIoResume; 1597*8a978a17SVictor Perevertkin 1598*8a978a17SVictor Perevertkin PFN_WDF_IO_QUEUE_IO_CANCELED_ON_QUEUE EvtIoCanceledOnQueue; 1599*8a978a17SVictor Perevertkin 1600*8a978a17SVictor Perevertkin union { 1601*8a978a17SVictor Perevertkin struct { 1602*8a978a17SVictor Perevertkin ULONG NumberOfPresentedRequests; 1603*8a978a17SVictor Perevertkin 1604*8a978a17SVictor Perevertkin } Parallel; 1605*8a978a17SVictor Perevertkin 1606*8a978a17SVictor Perevertkin } Settings; 1607*8a978a17SVictor Perevertkin 1608*8a978a17SVictor Perevertkin WDFDRIVER Driver; 1609*8a978a17SVictor Perevertkin 1610*8a978a17SVictor Perevertkin } WDF_IO_QUEUE_CONFIG_V2_15, *PWDF_IO_QUEUE_CONFIG_V2_15; 1611*8a978a17SVictor Perevertkin 1612*8a978a17SVictor Perevertkin typedef struct _WDF_IO_QUEUE_FORWARD_PROGRESS_POLICY_V2_15 { 1613*8a978a17SVictor Perevertkin ULONG Size; 1614*8a978a17SVictor Perevertkin 1615*8a978a17SVictor Perevertkin ULONG TotalForwardProgressRequests; 1616*8a978a17SVictor Perevertkin 1617*8a978a17SVictor Perevertkin // 1618*8a978a17SVictor Perevertkin // Specify the type of the policy here. 1619*8a978a17SVictor Perevertkin // 1620*8a978a17SVictor Perevertkin WDF_IO_FORWARD_PROGRESS_RESERVED_POLICY ForwardProgressReservedPolicy; 1621*8a978a17SVictor Perevertkin 1622*8a978a17SVictor Perevertkin // 1623*8a978a17SVictor Perevertkin // Structure which contains the policy specific fields 1624*8a978a17SVictor Perevertkin // 1625*8a978a17SVictor Perevertkin WDF_IO_FORWARD_PROGRESS_RESERVED_POLICY_SETTINGS ForwardProgressReservePolicySettings; 1626*8a978a17SVictor Perevertkin 1627*8a978a17SVictor Perevertkin // 1628*8a978a17SVictor Perevertkin // Callback for reserved request given at initialization time 1629*8a978a17SVictor Perevertkin // 1630*8a978a17SVictor Perevertkin PFN_WDF_IO_ALLOCATE_RESOURCES_FOR_RESERVED_REQUEST EvtIoAllocateResourcesForReservedRequest; 1631*8a978a17SVictor Perevertkin 1632*8a978a17SVictor Perevertkin // 1633*8a978a17SVictor Perevertkin // Callback for reserved request given at run time 1634*8a978a17SVictor Perevertkin // 1635*8a978a17SVictor Perevertkin PFN_WDF_IO_ALLOCATE_REQUEST_RESOURCES EvtIoAllocateRequestResources; 1636*8a978a17SVictor Perevertkin 1637*8a978a17SVictor Perevertkin } WDF_IO_QUEUE_FORWARD_PROGRESS_POLICY_V2_15, *PWDF_IO_QUEUE_FORWARD_PROGRESS_POLICY_V2_15; 1638*8a978a17SVictor Perevertkin 1639*8a978a17SVictor Perevertkin // End of versioning of structures for wdfio.h 1640*8a978a17SVictor Perevertkin 1641*8a978a17SVictor Perevertkin // 1642*8a978a17SVictor Perevertkin // Versioning of structures for wdfIoTarget.h 1643*8a978a17SVictor Perevertkin // 1644*8a978a17SVictor Perevertkin typedef struct _WDF_IO_TARGET_OPEN_PARAMS_V2_15 { 1645*8a978a17SVictor Perevertkin // 1646*8a978a17SVictor Perevertkin // Size of this structure in bytes 1647*8a978a17SVictor Perevertkin // 1648*8a978a17SVictor Perevertkin ULONG Size; 1649*8a978a17SVictor Perevertkin 1650*8a978a17SVictor Perevertkin // 1651*8a978a17SVictor Perevertkin // Indicates which fields of this structure are going to be used in 1652*8a978a17SVictor Perevertkin // creating the WDFIOTARGET. 1653*8a978a17SVictor Perevertkin // 1654*8a978a17SVictor Perevertkin WDF_IO_TARGET_OPEN_TYPE Type; 1655*8a978a17SVictor Perevertkin 1656*8a978a17SVictor Perevertkin // 1657*8a978a17SVictor Perevertkin // Notification when the target is being queried for removal. 1658*8a978a17SVictor Perevertkin // If !NT_SUCCESS is returned, the query will fail and the target will 1659*8a978a17SVictor Perevertkin // remain opened. 1660*8a978a17SVictor Perevertkin // 1661*8a978a17SVictor Perevertkin PFN_WDF_IO_TARGET_QUERY_REMOVE EvtIoTargetQueryRemove; 1662*8a978a17SVictor Perevertkin 1663*8a978a17SVictor Perevertkin // 1664*8a978a17SVictor Perevertkin // The previous query remove has been canceled and the target can now be 1665*8a978a17SVictor Perevertkin // reopened. 1666*8a978a17SVictor Perevertkin // 1667*8a978a17SVictor Perevertkin PFN_WDF_IO_TARGET_REMOVE_CANCELED EvtIoTargetRemoveCanceled; 1668*8a978a17SVictor Perevertkin 1669*8a978a17SVictor Perevertkin // 1670*8a978a17SVictor Perevertkin // The query remove has succeeded and the target is now removed from the 1671*8a978a17SVictor Perevertkin // system. 1672*8a978a17SVictor Perevertkin // 1673*8a978a17SVictor Perevertkin PFN_WDF_IO_TARGET_REMOVE_COMPLETE EvtIoTargetRemoveComplete; 1674*8a978a17SVictor Perevertkin 1675*8a978a17SVictor Perevertkin // <KMDF_ONLY/> 1676*8a978a17SVictor Perevertkin // ========== WdfIoTargetOpenUseExistingDevice begin ========== 1677*8a978a17SVictor Perevertkin // 1678*8a978a17SVictor Perevertkin // The device object to send requests to 1679*8a978a17SVictor Perevertkin // 1680*8a978a17SVictor Perevertkin PDEVICE_OBJECT TargetDeviceObject; 1681*8a978a17SVictor Perevertkin 1682*8a978a17SVictor Perevertkin // <KMDF_ONLY/> 1683*8a978a17SVictor Perevertkin // File object representing the TargetDeviceObject. The PFILE_OBJECT will 1684*8a978a17SVictor Perevertkin // be passed as a parameter in all requests sent to the resulting 1685*8a978a17SVictor Perevertkin // WDFIOTARGET. 1686*8a978a17SVictor Perevertkin // 1687*8a978a17SVictor Perevertkin PFILE_OBJECT TargetFileObject; 1688*8a978a17SVictor Perevertkin 1689*8a978a17SVictor Perevertkin // ========== WdfIoTargetOpenUseExistingDevice end ========== 1690*8a978a17SVictor Perevertkin // 1691*8a978a17SVictor Perevertkin // ========== WdfIoTargetOpenByName begin ========== 1692*8a978a17SVictor Perevertkin // 1693*8a978a17SVictor Perevertkin // Name of the device to open. 1694*8a978a17SVictor Perevertkin // 1695*8a978a17SVictor Perevertkin UNICODE_STRING TargetDeviceName; 1696*8a978a17SVictor Perevertkin 1697*8a978a17SVictor Perevertkin // <KMDF_DOC> 1698*8a978a17SVictor Perevertkin // The access desired on the device being opened up, ie WDM FILE_XXX_ACCESS 1699*8a978a17SVictor Perevertkin // such as FILE_ANY_ACCESS, FILE_SPECIAL_ACCESS, FILE_READ_ACCESS, or 1700*8a978a17SVictor Perevertkin // FILE_WRITE_ACCESS or you can use values such as GENERIC_READ, 1701*8a978a17SVictor Perevertkin // GENERIC_WRITE, or GENERIC_ALL. 1702*8a978a17SVictor Perevertkin // </KMDF_DOC> 1703*8a978a17SVictor Perevertkin // <UMDF_DOC> 1704*8a978a17SVictor Perevertkin // The requested access to the file or device, which can be summarized as 1705*8a978a17SVictor Perevertkin // read, write, both or neither zero). For more information about 1706*8a978a17SVictor Perevertkin // this member, see the dwDesiredAccess parameter of CreateFile in the 1707*8a978a17SVictor Perevertkin // Windows SDK. Note that ACCESS_MASK data type is a DWORD value. 1708*8a978a17SVictor Perevertkin // </UMDF_DOC> 1709*8a978a17SVictor Perevertkin // 1710*8a978a17SVictor Perevertkin ACCESS_MASK DesiredAccess; 1711*8a978a17SVictor Perevertkin 1712*8a978a17SVictor Perevertkin // 1713*8a978a17SVictor Perevertkin // <KMDF_DOC> 1714*8a978a17SVictor Perevertkin // Share access desired on the target being opened, ie WDM FILE_SHARE_XXX 1715*8a978a17SVictor Perevertkin // values such as FILE_SHARE_READ, FILE_SHARE_WRITE, FILE_SHARE_DELETE. 1716*8a978a17SVictor Perevertkin // A zero value means exclusive access to the target. 1717*8a978a17SVictor Perevertkin // 1718*8a978a17SVictor Perevertkin // </KMDF_DOC> 1719*8a978a17SVictor Perevertkin // <UMDF_DOC> 1720*8a978a17SVictor Perevertkin // The type of sharing to allow for the file. For more information about 1721*8a978a17SVictor Perevertkin // this member, see the dwShareMode parameter of CreateFile in the 1722*8a978a17SVictor Perevertkin // Windows SDK. A value of 0 means exclusive access. 1723*8a978a17SVictor Perevertkin // </UMDF_DOC> 1724*8a978a17SVictor Perevertkin // 1725*8a978a17SVictor Perevertkin ULONG ShareAccess; 1726*8a978a17SVictor Perevertkin 1727*8a978a17SVictor Perevertkin // 1728*8a978a17SVictor Perevertkin // <KMDF_DOC> 1729*8a978a17SVictor Perevertkin // File attributes, see ZwCreateFile in the DDK for a list of valid 1730*8a978a17SVictor Perevertkin // values and their meaning. 1731*8a978a17SVictor Perevertkin // </KMDF_DOC> 1732*8a978a17SVictor Perevertkin // <UMDF_DOC> 1733*8a978a17SVictor Perevertkin // Additional flags and attributes for the file. For more information about 1734*8a978a17SVictor Perevertkin // this member, see the dwFlagsAndAttributes parameter of CreateFile 1735*8a978a17SVictor Perevertkin // in the Windows SDK. 1736*8a978a17SVictor Perevertkin // </UMDF_DOC> 1737*8a978a17SVictor Perevertkin // 1738*8a978a17SVictor Perevertkin ULONG FileAttributes; 1739*8a978a17SVictor Perevertkin 1740*8a978a17SVictor Perevertkin // 1741*8a978a17SVictor Perevertkin // <KMDF_DOC> 1742*8a978a17SVictor Perevertkin // Create disposition, see ZwCreateFile in the DDK for a list of valid 1743*8a978a17SVictor Perevertkin // values and their meaning. 1744*8a978a17SVictor Perevertkin // </KMDF_DOC> 1745*8a978a17SVictor Perevertkin // <UMDF_DOC> 1746*8a978a17SVictor Perevertkin // The action to take if the file already exists. For more information 1747*8a978a17SVictor Perevertkin // about this member, see the dwCreationDisposition parameter of 1748*8a978a17SVictor Perevertkin // CreateFile in the Windows SDK. 1749*8a978a17SVictor Perevertkin // </UMDF_DOC> 1750*8a978a17SVictor Perevertkin // 1751*8a978a17SVictor Perevertkin ULONG CreateDisposition; 1752*8a978a17SVictor Perevertkin 1753*8a978a17SVictor Perevertkin // 1754*8a978a17SVictor Perevertkin // <KMDF_ONLY/> 1755*8a978a17SVictor Perevertkin // Options for opening the device, see CreateOptions for ZwCreateFile in the 1756*8a978a17SVictor Perevertkin // DDK for a list of valid values and their meaning. 1757*8a978a17SVictor Perevertkin // 1758*8a978a17SVictor Perevertkin ULONG CreateOptions; 1759*8a978a17SVictor Perevertkin 1760*8a978a17SVictor Perevertkin // 1761*8a978a17SVictor Perevertkin // <KMDF_ONLY/> 1762*8a978a17SVictor Perevertkin // 1763*8a978a17SVictor Perevertkin PVOID EaBuffer; 1764*8a978a17SVictor Perevertkin 1765*8a978a17SVictor Perevertkin // 1766*8a978a17SVictor Perevertkin // <KMDF_ONLY/> 1767*8a978a17SVictor Perevertkin // 1768*8a978a17SVictor Perevertkin ULONG EaBufferLength; 1769*8a978a17SVictor Perevertkin 1770*8a978a17SVictor Perevertkin // 1771*8a978a17SVictor Perevertkin // <KMDF_ONLY/> 1772*8a978a17SVictor Perevertkin // 1773*8a978a17SVictor Perevertkin PLONGLONG AllocationSize; 1774*8a978a17SVictor Perevertkin 1775*8a978a17SVictor Perevertkin // ========== WdfIoTargetOpenByName end ========== 1776*8a978a17SVictor Perevertkin // 1777*8a978a17SVictor Perevertkin // 1778*8a978a17SVictor Perevertkin // <KMDF_ONLY/> 1779*8a978a17SVictor Perevertkin // 1780*8a978a17SVictor Perevertkin // On return for a create by name, this will contain one of the following 1781*8a978a17SVictor Perevertkin // values: FILE_CREATED, FILE_OPENED, FILE_OVERWRITTEN, FILE_SUPERSEDED, 1782*8a978a17SVictor Perevertkin // FILE_EXISTS, FILE_DOES_NOT_EXIST 1783*8a978a17SVictor Perevertkin // 1784*8a978a17SVictor Perevertkin ULONG FileInformation; 1785*8a978a17SVictor Perevertkin 1786*8a978a17SVictor Perevertkin // ========== WdfIoTargetOpenLocalTargetByFile begin ========== 1787*8a978a17SVictor Perevertkin // 1788*8a978a17SVictor Perevertkin // 1789*8a978a17SVictor Perevertkin // <UMDF_ONLY/> A UNICODE_STRING-formatted string that contains the 1790*8a978a17SVictor Perevertkin // name of the file to create a file object from. This parameter is 1791*8a978a17SVictor Perevertkin // optional, and is applicable only when Type parameter is 1792*8a978a17SVictor Perevertkin // WdfIoTargetOpenLocalTargetByFile. The driver can leave this member 1793*8a978a17SVictor Perevertkin // unchanged if the driver does not have to create the file object 1794*8a978a17SVictor Perevertkin // from a file name. If the driver must supply a name, the string that 1795*8a978a17SVictor Perevertkin // the driver passes must not contain any path separator characters 1796*8a978a17SVictor Perevertkin // ("/" or "\"). 1797*8a978a17SVictor Perevertkin // 1798*8a978a17SVictor Perevertkin UNICODE_STRING FileName; 1799*8a978a17SVictor Perevertkin 1800*8a978a17SVictor Perevertkin } WDF_IO_TARGET_OPEN_PARAMS_V2_15, *PWDF_IO_TARGET_OPEN_PARAMS_V2_15; 1801*8a978a17SVictor Perevertkin 1802*8a978a17SVictor Perevertkin // End of versioning of structures for wdfIoTarget.h 1803*8a978a17SVictor Perevertkin 1804*8a978a17SVictor Perevertkin // 1805*8a978a17SVictor Perevertkin // Versioning of structures for wdfIoTargetPri.h 1806*8a978a17SVictor Perevertkin // 1807*8a978a17SVictor Perevertkin // End of versioning of structures for wdfIoTargetPri.h 1808*8a978a17SVictor Perevertkin 1809*8a978a17SVictor Perevertkin // 1810*8a978a17SVictor Perevertkin // Versioning of structures for wdfMemory.h 1811*8a978a17SVictor Perevertkin // 1812*8a978a17SVictor Perevertkin typedef struct _WDFMEMORY_OFFSET_V2_15 { 1813*8a978a17SVictor Perevertkin // 1814*8a978a17SVictor Perevertkin // Offset into the WDFMEMORY that the operation should start at. 1815*8a978a17SVictor Perevertkin // 1816*8a978a17SVictor Perevertkin size_t BufferOffset; 1817*8a978a17SVictor Perevertkin 1818*8a978a17SVictor Perevertkin // 1819*8a978a17SVictor Perevertkin // Number of bytes that the operation should access. If 0, the entire 1820*8a978a17SVictor Perevertkin // length of the WDFMEMORY buffer will be used in the operation or ignored 1821*8a978a17SVictor Perevertkin // depending on the API. 1822*8a978a17SVictor Perevertkin // 1823*8a978a17SVictor Perevertkin size_t BufferLength; 1824*8a978a17SVictor Perevertkin 1825*8a978a17SVictor Perevertkin } WDFMEMORY_OFFSET_V2_15, *PWDFMEMORY_OFFSET_V2_15; 1826*8a978a17SVictor Perevertkin 1827*8a978a17SVictor Perevertkin typedef struct _WDF_MEMORY_DESCRIPTOR_V2_15 { 1828*8a978a17SVictor Perevertkin WDF_MEMORY_DESCRIPTOR_TYPE Type; 1829*8a978a17SVictor Perevertkin 1830*8a978a17SVictor Perevertkin union { 1831*8a978a17SVictor Perevertkin struct { 1832*8a978a17SVictor Perevertkin PVOID Buffer; 1833*8a978a17SVictor Perevertkin 1834*8a978a17SVictor Perevertkin ULONG Length; 1835*8a978a17SVictor Perevertkin 1836*8a978a17SVictor Perevertkin } BufferType; 1837*8a978a17SVictor Perevertkin 1838*8a978a17SVictor Perevertkin struct { 1839*8a978a17SVictor Perevertkin PMDL Mdl; 1840*8a978a17SVictor Perevertkin 1841*8a978a17SVictor Perevertkin ULONG BufferLength; 1842*8a978a17SVictor Perevertkin 1843*8a978a17SVictor Perevertkin } MdlType; 1844*8a978a17SVictor Perevertkin 1845*8a978a17SVictor Perevertkin struct { 1846*8a978a17SVictor Perevertkin WDFMEMORY Memory; 1847*8a978a17SVictor Perevertkin 1848*8a978a17SVictor Perevertkin PWDFMEMORY_OFFSET_V2_15 Offsets; 1849*8a978a17SVictor Perevertkin 1850*8a978a17SVictor Perevertkin } HandleType; 1851*8a978a17SVictor Perevertkin 1852*8a978a17SVictor Perevertkin } u; 1853*8a978a17SVictor Perevertkin 1854*8a978a17SVictor Perevertkin } WDF_MEMORY_DESCRIPTOR_V2_15, *PWDF_MEMORY_DESCRIPTOR_V2_15; 1855*8a978a17SVictor Perevertkin 1856*8a978a17SVictor Perevertkin // End of versioning of structures for wdfMemory.h 1857*8a978a17SVictor Perevertkin 1858*8a978a17SVictor Perevertkin // 1859*8a978a17SVictor Perevertkin // Versioning of structures for wdfMiniport.h 1860*8a978a17SVictor Perevertkin // 1861*8a978a17SVictor Perevertkin // End of versioning of structures for wdfMiniport.h 1862*8a978a17SVictor Perevertkin 1863*8a978a17SVictor Perevertkin // 1864*8a978a17SVictor Perevertkin // Versioning of structures for wdfObject.h 1865*8a978a17SVictor Perevertkin // 1866*8a978a17SVictor Perevertkin typedef struct _WDF_OBJECT_ATTRIBUTES_V2_15 { 1867*8a978a17SVictor Perevertkin // 1868*8a978a17SVictor Perevertkin // Size in bytes of this structure 1869*8a978a17SVictor Perevertkin // 1870*8a978a17SVictor Perevertkin ULONG Size; 1871*8a978a17SVictor Perevertkin 1872*8a978a17SVictor Perevertkin // 1873*8a978a17SVictor Perevertkin // Function to call when the object is deleted 1874*8a978a17SVictor Perevertkin // 1875*8a978a17SVictor Perevertkin PFN_WDF_OBJECT_CONTEXT_CLEANUP EvtCleanupCallback; 1876*8a978a17SVictor Perevertkin 1877*8a978a17SVictor Perevertkin // 1878*8a978a17SVictor Perevertkin // Function to call when the objects memory is destroyed when the 1879*8a978a17SVictor Perevertkin // the last reference count goes to zero 1880*8a978a17SVictor Perevertkin // 1881*8a978a17SVictor Perevertkin PFN_WDF_OBJECT_CONTEXT_DESTROY EvtDestroyCallback; 1882*8a978a17SVictor Perevertkin 1883*8a978a17SVictor Perevertkin // 1884*8a978a17SVictor Perevertkin // Execution level constraints for Object 1885*8a978a17SVictor Perevertkin // 1886*8a978a17SVictor Perevertkin WDF_EXECUTION_LEVEL ExecutionLevel; 1887*8a978a17SVictor Perevertkin 1888*8a978a17SVictor Perevertkin // 1889*8a978a17SVictor Perevertkin // Synchronization level constraint for Object 1890*8a978a17SVictor Perevertkin // 1891*8a978a17SVictor Perevertkin WDF_SYNCHRONIZATION_SCOPE SynchronizationScope; 1892*8a978a17SVictor Perevertkin 1893*8a978a17SVictor Perevertkin // 1894*8a978a17SVictor Perevertkin // Optional Parent Object 1895*8a978a17SVictor Perevertkin // 1896*8a978a17SVictor Perevertkin WDFOBJECT ParentObject; 1897*8a978a17SVictor Perevertkin 1898*8a978a17SVictor Perevertkin // 1899*8a978a17SVictor Perevertkin // Overrides the size of the context allocated as specified by 1900*8a978a17SVictor Perevertkin // ContextTypeInfo->ContextSize 1901*8a978a17SVictor Perevertkin // 1902*8a978a17SVictor Perevertkin size_t ContextSizeOverride; 1903*8a978a17SVictor Perevertkin 1904*8a978a17SVictor Perevertkin // 1905*8a978a17SVictor Perevertkin // Pointer to the type information to be associated with the object 1906*8a978a17SVictor Perevertkin // 1907*8a978a17SVictor Perevertkin PCWDF_OBJECT_CONTEXT_TYPE_INFO_V2_15 ContextTypeInfo; 1908*8a978a17SVictor Perevertkin 1909*8a978a17SVictor Perevertkin } WDF_OBJECT_ATTRIBUTES_V2_15, *PWDF_OBJECT_ATTRIBUTES_V2_15; 1910*8a978a17SVictor Perevertkin 1911*8a978a17SVictor Perevertkin // 1912*8a978a17SVictor Perevertkin // Since C does not have strong type checking we must invent our own 1913*8a978a17SVictor Perevertkin // 1914*8a978a17SVictor Perevertkin typedef struct _WDF_OBJECT_CONTEXT_TYPE_INFO_V2_15 { 1915*8a978a17SVictor Perevertkin // 1916*8a978a17SVictor Perevertkin // The size of this structure in bytes 1917*8a978a17SVictor Perevertkin // 1918*8a978a17SVictor Perevertkin ULONG Size; 1919*8a978a17SVictor Perevertkin 1920*8a978a17SVictor Perevertkin // 1921*8a978a17SVictor Perevertkin // String representation of the context's type name, i.e. "DEVICE_CONTEXT" 1922*8a978a17SVictor Perevertkin // 1923*8a978a17SVictor Perevertkin PCHAR ContextName; 1924*8a978a17SVictor Perevertkin 1925*8a978a17SVictor Perevertkin // 1926*8a978a17SVictor Perevertkin // The size of the context in bytes. This will be the size of the context 1927*8a978a17SVictor Perevertkin // associated with the handle unless 1928*8a978a17SVictor Perevertkin // WDF_OBJECT_ATTRIBUTES::ContextSizeOverride is specified. 1929*8a978a17SVictor Perevertkin // 1930*8a978a17SVictor Perevertkin size_t ContextSize; 1931*8a978a17SVictor Perevertkin 1932*8a978a17SVictor Perevertkin // 1933*8a978a17SVictor Perevertkin // If NULL, this structure is the unique type identifier for the context 1934*8a978a17SVictor Perevertkin // type. If != NULL, the UniqueType pointer value is the unique type id 1935*8a978a17SVictor Perevertkin // for the context type. 1936*8a978a17SVictor Perevertkin // 1937*8a978a17SVictor Perevertkin PCWDF_OBJECT_CONTEXT_TYPE_INFO_V2_15 UniqueType; 1938*8a978a17SVictor Perevertkin 1939*8a978a17SVictor Perevertkin // 1940*8a978a17SVictor Perevertkin // Function pointer to retrieve the context type information structure 1941*8a978a17SVictor Perevertkin // pointer from the provider of the context type. This function is invoked 1942*8a978a17SVictor Perevertkin // by the client driver's entry point by the KMDF stub after all class 1943*8a978a17SVictor Perevertkin // drivers are loaded and before DriverEntry is invoked. 1944*8a978a17SVictor Perevertkin // 1945*8a978a17SVictor Perevertkin PFN_GET_UNIQUE_CONTEXT_TYPE EvtDriverGetUniqueContextType; 1946*8a978a17SVictor Perevertkin 1947*8a978a17SVictor Perevertkin } WDF_OBJECT_CONTEXT_TYPE_INFO_V2_15, *PWDF_OBJECT_CONTEXT_TYPE_INFO_V2_15; 1948*8a978a17SVictor Perevertkin 1949*8a978a17SVictor Perevertkin // 1950*8a978a17SVictor Perevertkin // Core structure for supporting custom types, see macros below. 1951*8a978a17SVictor Perevertkin // 1952*8a978a17SVictor Perevertkin typedef struct _WDF_CUSTOM_TYPE_CONTEXT_V2_15 { 1953*8a978a17SVictor Perevertkin ULONG Size; 1954*8a978a17SVictor Perevertkin 1955*8a978a17SVictor Perevertkin ULONG_PTR Data; 1956*8a978a17SVictor Perevertkin 1957*8a978a17SVictor Perevertkin } WDF_CUSTOM_TYPE_CONTEXT_V2_15, *PWDF_CUSTOM_TYPE_CONTEXT_V2_15; 1958*8a978a17SVictor Perevertkin 1959*8a978a17SVictor Perevertkin // End of versioning of structures for wdfObject.h 1960*8a978a17SVictor Perevertkin 1961*8a978a17SVictor Perevertkin // 1962*8a978a17SVictor Perevertkin // Versioning of structures for wdfpdo.h 1963*8a978a17SVictor Perevertkin // 1964*8a978a17SVictor Perevertkin typedef struct _WDF_PDO_EVENT_CALLBACKS_V2_15 { 1965*8a978a17SVictor Perevertkin // 1966*8a978a17SVictor Perevertkin // The size of this structure in bytes 1967*8a978a17SVictor Perevertkin // 1968*8a978a17SVictor Perevertkin ULONG Size; 1969*8a978a17SVictor Perevertkin 1970*8a978a17SVictor Perevertkin // 1971*8a978a17SVictor Perevertkin // Called in response to IRP_MN_QUERY_RESOURCES 1972*8a978a17SVictor Perevertkin // 1973*8a978a17SVictor Perevertkin PFN_WDF_DEVICE_RESOURCES_QUERY EvtDeviceResourcesQuery; 1974*8a978a17SVictor Perevertkin 1975*8a978a17SVictor Perevertkin // 1976*8a978a17SVictor Perevertkin // Called in response to IRP_MN_QUERY_RESOURCE_REQUIREMENTS 1977*8a978a17SVictor Perevertkin // 1978*8a978a17SVictor Perevertkin PFN_WDF_DEVICE_RESOURCE_REQUIREMENTS_QUERY EvtDeviceResourceRequirementsQuery; 1979*8a978a17SVictor Perevertkin 1980*8a978a17SVictor Perevertkin // 1981*8a978a17SVictor Perevertkin // Called in response to IRP_MN_EJECT 1982*8a978a17SVictor Perevertkin // 1983*8a978a17SVictor Perevertkin PFN_WDF_DEVICE_EJECT EvtDeviceEject; 1984*8a978a17SVictor Perevertkin 1985*8a978a17SVictor Perevertkin // 1986*8a978a17SVictor Perevertkin // Called in response to IRP_MN_SET_LOCK 1987*8a978a17SVictor Perevertkin // 1988*8a978a17SVictor Perevertkin PFN_WDF_DEVICE_SET_LOCK EvtDeviceSetLock; 1989*8a978a17SVictor Perevertkin 1990*8a978a17SVictor Perevertkin // 1991*8a978a17SVictor Perevertkin // Called in response to the power policy owner sending a wait wake to the 1992*8a978a17SVictor Perevertkin // PDO. Bus generic arming shoulding occur here. 1993*8a978a17SVictor Perevertkin // 1994*8a978a17SVictor Perevertkin PFN_WDF_DEVICE_ENABLE_WAKE_AT_BUS EvtDeviceEnableWakeAtBus; 1995*8a978a17SVictor Perevertkin 1996*8a978a17SVictor Perevertkin // 1997*8a978a17SVictor Perevertkin // Called in response to the power policy owner sending a wait wake to the 1998*8a978a17SVictor Perevertkin // PDO. Bus generic disarming shoulding occur here. 1999*8a978a17SVictor Perevertkin // 2000*8a978a17SVictor Perevertkin PFN_WDF_DEVICE_DISABLE_WAKE_AT_BUS EvtDeviceDisableWakeAtBus; 2001*8a978a17SVictor Perevertkin 2002*8a978a17SVictor Perevertkin // 2003*8a978a17SVictor Perevertkin // Called when reporting the PDO missing to PnP manager in response to 2004*8a978a17SVictor Perevertkin // IRP_MN_QUERY_DEVICE_RELATIONS for Bus Relations. 2005*8a978a17SVictor Perevertkin // 2006*8a978a17SVictor Perevertkin PFN_WDF_DEVICE_REPORTED_MISSING EvtDeviceReportedMissing; 2007*8a978a17SVictor Perevertkin 2008*8a978a17SVictor Perevertkin } WDF_PDO_EVENT_CALLBACKS_V2_15, *PWDF_PDO_EVENT_CALLBACKS_V2_15; 2009*8a978a17SVictor Perevertkin 2010*8a978a17SVictor Perevertkin // End of versioning of structures for wdfpdo.h 2011*8a978a17SVictor Perevertkin 2012*8a978a17SVictor Perevertkin // 2013*8a978a17SVictor Perevertkin // Versioning of structures for wdfpool.h 2014*8a978a17SVictor Perevertkin // 2015*8a978a17SVictor Perevertkin // End of versioning of structures for wdfpool.h 2016*8a978a17SVictor Perevertkin 2017*8a978a17SVictor Perevertkin // 2018*8a978a17SVictor Perevertkin // Versioning of structures for wdfqueryinterface.h 2019*8a978a17SVictor Perevertkin // 2020*8a978a17SVictor Perevertkin typedef struct _WDF_QUERY_INTERFACE_CONFIG_V2_15 { 2021*8a978a17SVictor Perevertkin // 2022*8a978a17SVictor Perevertkin // Size of this structure in bytes. 2023*8a978a17SVictor Perevertkin // 2024*8a978a17SVictor Perevertkin ULONG Size; 2025*8a978a17SVictor Perevertkin 2026*8a978a17SVictor Perevertkin // 2027*8a978a17SVictor Perevertkin // Interface to be returned to the caller. Optional if BehaviorType is set 2028*8a978a17SVictor Perevertkin // to WdfQueryInterfaceTypePassThrough or ImportInterface is set to TRUE. 2029*8a978a17SVictor Perevertkin // 2030*8a978a17SVictor Perevertkin PINTERFACE Interface; 2031*8a978a17SVictor Perevertkin 2032*8a978a17SVictor Perevertkin // 2033*8a978a17SVictor Perevertkin // The GUID identifying the interface 2034*8a978a17SVictor Perevertkin // 2035*8a978a17SVictor Perevertkin CONST GUID * InterfaceType; 2036*8a978a17SVictor Perevertkin 2037*8a978a17SVictor Perevertkin // 2038*8a978a17SVictor Perevertkin // Valid only for PDOs. The framework will allocate a new request and 2039*8a978a17SVictor Perevertkin // forward it down the parent's device stack. 2040*8a978a17SVictor Perevertkin // 2041*8a978a17SVictor Perevertkin BOOLEAN SendQueryToParentStack; 2042*8a978a17SVictor Perevertkin 2043*8a978a17SVictor Perevertkin // 2044*8a978a17SVictor Perevertkin // Driver supplied callback which is called after some basic interface 2045*8a978a17SVictor Perevertkin // validation has been performed (size, version, and guid checking). This 2046*8a978a17SVictor Perevertkin // is an optional parameter and may be NULL unless ImportInterface is 2047*8a978a17SVictor Perevertkin // specified. 2048*8a978a17SVictor Perevertkin // 2049*8a978a17SVictor Perevertkin // If the callback returns !NT_SUCCESS, this error will be returned to the 2050*8a978a17SVictor Perevertkin // caller and the query interface will fail. 2051*8a978a17SVictor Perevertkin // 2052*8a978a17SVictor Perevertkin // In this callback, the caller is free to modify the ExposedInterface in 2053*8a978a17SVictor Perevertkin // any manner of its choosing. For instance, the callback may change any 2054*8a978a17SVictor Perevertkin // field in the interface. The callback may also alloate a dynamic context 2055*8a978a17SVictor Perevertkin // to be associated with the interface; the InterfaceReference and 2056*8a978a17SVictor Perevertkin // InterfaceDereference functions may also be overridden. 2057*8a978a17SVictor Perevertkin // 2058*8a978a17SVictor Perevertkin // If ImportInterface is set to TRUE, then this is a required field and the 2059*8a978a17SVictor Perevertkin // callback must initialize the interface (the framework will leave the 2060*8a978a17SVictor Perevertkin // ExposedInterface buffer exactly as it received it) since the framework 2061*8a978a17SVictor Perevertkin // has no way of knowing which fields to fill in and which to leave alone. 2062*8a978a17SVictor Perevertkin // 2063*8a978a17SVictor Perevertkin PFN_WDF_DEVICE_PROCESS_QUERY_INTERFACE_REQUEST EvtDeviceProcessQueryInterfaceRequest; 2064*8a978a17SVictor Perevertkin 2065*8a978a17SVictor Perevertkin // 2066*8a978a17SVictor Perevertkin // If TRUE, the interface provided by the caller contains data that the 2067*8a978a17SVictor Perevertkin // driver is interested in. By setting to this field to TRUE, the 2068*8a978a17SVictor Perevertkin // EvtDeviceProcessQueryInterfaceRequest callback must initialize the 2069*8a978a17SVictor Perevertkin // ExposedInterface. 2070*8a978a17SVictor Perevertkin // 2071*8a978a17SVictor Perevertkin // If FALSE, the entire ExposedInterface is initialized through a memory 2072*8a978a17SVictor Perevertkin // copy before the EvtDeviceProcessQueryInterfaceRequest is called. 2073*8a978a17SVictor Perevertkin // 2074*8a978a17SVictor Perevertkin BOOLEAN ImportInterface; 2075*8a978a17SVictor Perevertkin 2076*8a978a17SVictor Perevertkin } WDF_QUERY_INTERFACE_CONFIG_V2_15, *PWDF_QUERY_INTERFACE_CONFIG_V2_15; 2077*8a978a17SVictor Perevertkin 2078*8a978a17SVictor Perevertkin // End of versioning of structures for wdfqueryinterface.h 2079*8a978a17SVictor Perevertkin 2080*8a978a17SVictor Perevertkin // 2081*8a978a17SVictor Perevertkin // Versioning of structures for wdfregistry.h 2082*8a978a17SVictor Perevertkin // 2083*8a978a17SVictor Perevertkin // End of versioning of structures for wdfregistry.h 2084*8a978a17SVictor Perevertkin 2085*8a978a17SVictor Perevertkin // 2086*8a978a17SVictor Perevertkin // Versioning of structures for wdfrequest.h 2087*8a978a17SVictor Perevertkin // 2088*8a978a17SVictor Perevertkin // 2089*8a978a17SVictor Perevertkin // This parameters structure allows general access to a requests parameters 2090*8a978a17SVictor Perevertkin // 2091*8a978a17SVictor Perevertkin typedef struct _WDF_REQUEST_PARAMETERS_V2_15 { 2092*8a978a17SVictor Perevertkin USHORT Size; 2093*8a978a17SVictor Perevertkin 2094*8a978a17SVictor Perevertkin UCHAR MinorFunction; 2095*8a978a17SVictor Perevertkin 2096*8a978a17SVictor Perevertkin WDF_REQUEST_TYPE Type; 2097*8a978a17SVictor Perevertkin 2098*8a978a17SVictor Perevertkin // 2099*8a978a17SVictor Perevertkin // The following user parameters are based on the service that is being 2100*8a978a17SVictor Perevertkin // invoked. Drivers and file systems can determine which set to use based 2101*8a978a17SVictor Perevertkin // on the above major and minor function codes. 2102*8a978a17SVictor Perevertkin // 2103*8a978a17SVictor Perevertkin union { 2104*8a978a17SVictor Perevertkin // 2105*8a978a17SVictor Perevertkin // System service parameters for: Create 2106*8a978a17SVictor Perevertkin // 2107*8a978a17SVictor Perevertkin // 2108*8a978a17SVictor Perevertkin struct { 2109*8a978a17SVictor Perevertkin PIO_SECURITY_CONTEXT SecurityContext; 2110*8a978a17SVictor Perevertkin 2111*8a978a17SVictor Perevertkin ULONG Options; 2112*8a978a17SVictor Perevertkin 2113*8a978a17SVictor Perevertkin USHORT POINTER_ALIGNMENT FileAttributes; 2114*8a978a17SVictor Perevertkin 2115*8a978a17SVictor Perevertkin USHORT ShareAccess; 2116*8a978a17SVictor Perevertkin 2117*8a978a17SVictor Perevertkin ULONG POINTER_ALIGNMENT EaLength; 2118*8a978a17SVictor Perevertkin 2119*8a978a17SVictor Perevertkin } Create; 2120*8a978a17SVictor Perevertkin 2121*8a978a17SVictor Perevertkin // 2122*8a978a17SVictor Perevertkin // System service parameters for: Read 2123*8a978a17SVictor Perevertkin // 2124*8a978a17SVictor Perevertkin // 2125*8a978a17SVictor Perevertkin struct { 2126*8a978a17SVictor Perevertkin size_t Length; 2127*8a978a17SVictor Perevertkin 2128*8a978a17SVictor Perevertkin ULONG POINTER_ALIGNMENT Key; 2129*8a978a17SVictor Perevertkin 2130*8a978a17SVictor Perevertkin LONGLONG DeviceOffset; 2131*8a978a17SVictor Perevertkin 2132*8a978a17SVictor Perevertkin } Read; 2133*8a978a17SVictor Perevertkin 2134*8a978a17SVictor Perevertkin // 2135*8a978a17SVictor Perevertkin // System service parameters for: Write 2136*8a978a17SVictor Perevertkin // 2137*8a978a17SVictor Perevertkin // 2138*8a978a17SVictor Perevertkin struct { 2139*8a978a17SVictor Perevertkin size_t Length; 2140*8a978a17SVictor Perevertkin 2141*8a978a17SVictor Perevertkin ULONG POINTER_ALIGNMENT Key; 2142*8a978a17SVictor Perevertkin 2143*8a978a17SVictor Perevertkin LONGLONG DeviceOffset; 2144*8a978a17SVictor Perevertkin 2145*8a978a17SVictor Perevertkin } Write; 2146*8a978a17SVictor Perevertkin 2147*8a978a17SVictor Perevertkin // 2148*8a978a17SVictor Perevertkin // System service parameters for: Device Control 2149*8a978a17SVictor Perevertkin // 2150*8a978a17SVictor Perevertkin // Note that the user's output buffer is stored in the UserBuffer field 2151*8a978a17SVictor Perevertkin // and the user's input buffer is stored in the SystemBuffer field. 2152*8a978a17SVictor Perevertkin // 2153*8a978a17SVictor Perevertkin // 2154*8a978a17SVictor Perevertkin struct { 2155*8a978a17SVictor Perevertkin size_t OutputBufferLength; 2156*8a978a17SVictor Perevertkin 2157*8a978a17SVictor Perevertkin size_t POINTER_ALIGNMENT InputBufferLength; 2158*8a978a17SVictor Perevertkin 2159*8a978a17SVictor Perevertkin ULONG POINTER_ALIGNMENT IoControlCode; 2160*8a978a17SVictor Perevertkin 2161*8a978a17SVictor Perevertkin PVOID Type3InputBuffer; 2162*8a978a17SVictor Perevertkin 2163*8a978a17SVictor Perevertkin } DeviceIoControl; 2164*8a978a17SVictor Perevertkin 2165*8a978a17SVictor Perevertkin struct { 2166*8a978a17SVictor Perevertkin PVOID Arg1; 2167*8a978a17SVictor Perevertkin 2168*8a978a17SVictor Perevertkin PVOID Arg2; 2169*8a978a17SVictor Perevertkin 2170*8a978a17SVictor Perevertkin ULONG POINTER_ALIGNMENT IoControlCode; 2171*8a978a17SVictor Perevertkin 2172*8a978a17SVictor Perevertkin PVOID Arg4; 2173*8a978a17SVictor Perevertkin 2174*8a978a17SVictor Perevertkin } Others; 2175*8a978a17SVictor Perevertkin 2176*8a978a17SVictor Perevertkin } Parameters; 2177*8a978a17SVictor Perevertkin 2178*8a978a17SVictor Perevertkin } WDF_REQUEST_PARAMETERS_V2_15, *PWDF_REQUEST_PARAMETERS_V2_15; 2179*8a978a17SVictor Perevertkin 2180*8a978a17SVictor Perevertkin typedef struct _WDF_REQUEST_COMPLETION_PARAMS_V2_15 { 2181*8a978a17SVictor Perevertkin // 2182*8a978a17SVictor Perevertkin // Size of the structure in bytes 2183*8a978a17SVictor Perevertkin // 2184*8a978a17SVictor Perevertkin ULONG Size; 2185*8a978a17SVictor Perevertkin 2186*8a978a17SVictor Perevertkin WDF_REQUEST_TYPE Type; 2187*8a978a17SVictor Perevertkin 2188*8a978a17SVictor Perevertkin IO_STATUS_BLOCK IoStatus; 2189*8a978a17SVictor Perevertkin 2190*8a978a17SVictor Perevertkin union { 2191*8a978a17SVictor Perevertkin struct { 2192*8a978a17SVictor Perevertkin WDFMEMORY Buffer; 2193*8a978a17SVictor Perevertkin 2194*8a978a17SVictor Perevertkin size_t Length; 2195*8a978a17SVictor Perevertkin 2196*8a978a17SVictor Perevertkin size_t Offset; 2197*8a978a17SVictor Perevertkin 2198*8a978a17SVictor Perevertkin } Write; 2199*8a978a17SVictor Perevertkin 2200*8a978a17SVictor Perevertkin struct { 2201*8a978a17SVictor Perevertkin WDFMEMORY Buffer; 2202*8a978a17SVictor Perevertkin 2203*8a978a17SVictor Perevertkin size_t Length; 2204*8a978a17SVictor Perevertkin 2205*8a978a17SVictor Perevertkin size_t Offset; 2206*8a978a17SVictor Perevertkin 2207*8a978a17SVictor Perevertkin } Read; 2208*8a978a17SVictor Perevertkin 2209*8a978a17SVictor Perevertkin struct { 2210*8a978a17SVictor Perevertkin ULONG IoControlCode; 2211*8a978a17SVictor Perevertkin 2212*8a978a17SVictor Perevertkin struct { 2213*8a978a17SVictor Perevertkin WDFMEMORY Buffer; 2214*8a978a17SVictor Perevertkin 2215*8a978a17SVictor Perevertkin size_t Offset; 2216*8a978a17SVictor Perevertkin 2217*8a978a17SVictor Perevertkin } Input; 2218*8a978a17SVictor Perevertkin 2219*8a978a17SVictor Perevertkin struct { 2220*8a978a17SVictor Perevertkin WDFMEMORY Buffer; 2221*8a978a17SVictor Perevertkin 2222*8a978a17SVictor Perevertkin size_t Offset; 2223*8a978a17SVictor Perevertkin 2224*8a978a17SVictor Perevertkin size_t Length; 2225*8a978a17SVictor Perevertkin 2226*8a978a17SVictor Perevertkin } Output; 2227*8a978a17SVictor Perevertkin 2228*8a978a17SVictor Perevertkin } Ioctl; 2229*8a978a17SVictor Perevertkin 2230*8a978a17SVictor Perevertkin struct { 2231*8a978a17SVictor Perevertkin union { 2232*8a978a17SVictor Perevertkin PVOID Ptr; 2233*8a978a17SVictor Perevertkin 2234*8a978a17SVictor Perevertkin ULONG_PTR Value; 2235*8a978a17SVictor Perevertkin 2236*8a978a17SVictor Perevertkin } Argument1; 2237*8a978a17SVictor Perevertkin 2238*8a978a17SVictor Perevertkin union { 2239*8a978a17SVictor Perevertkin PVOID Ptr; 2240*8a978a17SVictor Perevertkin 2241*8a978a17SVictor Perevertkin ULONG_PTR Value; 2242*8a978a17SVictor Perevertkin 2243*8a978a17SVictor Perevertkin } Argument2; 2244*8a978a17SVictor Perevertkin 2245*8a978a17SVictor Perevertkin union { 2246*8a978a17SVictor Perevertkin PVOID Ptr; 2247*8a978a17SVictor Perevertkin 2248*8a978a17SVictor Perevertkin ULONG_PTR Value; 2249*8a978a17SVictor Perevertkin 2250*8a978a17SVictor Perevertkin } Argument3; 2251*8a978a17SVictor Perevertkin 2252*8a978a17SVictor Perevertkin union { 2253*8a978a17SVictor Perevertkin PVOID Ptr; 2254*8a978a17SVictor Perevertkin 2255*8a978a17SVictor Perevertkin ULONG_PTR Value; 2256*8a978a17SVictor Perevertkin 2257*8a978a17SVictor Perevertkin } Argument4; 2258*8a978a17SVictor Perevertkin 2259*8a978a17SVictor Perevertkin } Others; 2260*8a978a17SVictor Perevertkin 2261*8a978a17SVictor Perevertkin struct { 2262*8a978a17SVictor Perevertkin PWDF_USB_REQUEST_COMPLETION_PARAMS_V2_15 Completion; 2263*8a978a17SVictor Perevertkin 2264*8a978a17SVictor Perevertkin } Usb; 2265*8a978a17SVictor Perevertkin 2266*8a978a17SVictor Perevertkin } Parameters; 2267*8a978a17SVictor Perevertkin 2268*8a978a17SVictor Perevertkin } WDF_REQUEST_COMPLETION_PARAMS_V2_15, *PWDF_REQUEST_COMPLETION_PARAMS_V2_15; 2269*8a978a17SVictor Perevertkin 2270*8a978a17SVictor Perevertkin typedef struct _WDF_REQUEST_REUSE_PARAMS_V2_15 { 2271*8a978a17SVictor Perevertkin // 2272*8a978a17SVictor Perevertkin // Size of this structure in bytes 2273*8a978a17SVictor Perevertkin // 2274*8a978a17SVictor Perevertkin ULONG Size; 2275*8a978a17SVictor Perevertkin 2276*8a978a17SVictor Perevertkin // 2277*8a978a17SVictor Perevertkin // Bit field combination of WDF_REQUEST_REUSE_Xxx values 2278*8a978a17SVictor Perevertkin // 2279*8a978a17SVictor Perevertkin ULONG Flags; 2280*8a978a17SVictor Perevertkin 2281*8a978a17SVictor Perevertkin // 2282*8a978a17SVictor Perevertkin // The new status of the request. 2283*8a978a17SVictor Perevertkin // 2284*8a978a17SVictor Perevertkin NTSTATUS Status; 2285*8a978a17SVictor Perevertkin 2286*8a978a17SVictor Perevertkin // 2287*8a978a17SVictor Perevertkin // New PIRP to be contained in the WDFREQUEST. Setting a new PIRP value 2288*8a978a17SVictor Perevertkin // is only valid for WDFREQUESTs created by WdfRequestCreateFromIrp where 2289*8a978a17SVictor Perevertkin // RequestFreesIrp == FALSE. No other WDFREQUESTs (presented by the 2290*8a978a17SVictor Perevertkin // I/O queue for instance) may have their IRPs changed. 2291*8a978a17SVictor Perevertkin // 2292*8a978a17SVictor Perevertkin PIRP NewIrp; 2293*8a978a17SVictor Perevertkin 2294*8a978a17SVictor Perevertkin } WDF_REQUEST_REUSE_PARAMS_V2_15, *PWDF_REQUEST_REUSE_PARAMS_V2_15; 2295*8a978a17SVictor Perevertkin 2296*8a978a17SVictor Perevertkin typedef struct _WDF_REQUEST_SEND_OPTIONS_V2_15 { 2297*8a978a17SVictor Perevertkin // 2298*8a978a17SVictor Perevertkin // Size of the structure in bytes 2299*8a978a17SVictor Perevertkin // 2300*8a978a17SVictor Perevertkin ULONG Size; 2301*8a978a17SVictor Perevertkin 2302*8a978a17SVictor Perevertkin // 2303*8a978a17SVictor Perevertkin // Bit field combination of values from the WDF_REQUEST_SEND_OPTIONS_FLAGS 2304*8a978a17SVictor Perevertkin // enumeration 2305*8a978a17SVictor Perevertkin // 2306*8a978a17SVictor Perevertkin ULONG Flags; 2307*8a978a17SVictor Perevertkin 2308*8a978a17SVictor Perevertkin // 2309*8a978a17SVictor Perevertkin // Valid when WDF_REQUEST_SEND_OPTION_TIMEOUT is set 2310*8a978a17SVictor Perevertkin // 2311*8a978a17SVictor Perevertkin LONGLONG Timeout; 2312*8a978a17SVictor Perevertkin 2313*8a978a17SVictor Perevertkin } WDF_REQUEST_SEND_OPTIONS_V2_15, *PWDF_REQUEST_SEND_OPTIONS_V2_15; 2314*8a978a17SVictor Perevertkin 2315*8a978a17SVictor Perevertkin typedef struct _WDF_REQUEST_FORWARD_OPTIONS_V2_15 { 2316*8a978a17SVictor Perevertkin // 2317*8a978a17SVictor Perevertkin // Size of the structure in bytes 2318*8a978a17SVictor Perevertkin // 2319*8a978a17SVictor Perevertkin ULONG Size; 2320*8a978a17SVictor Perevertkin 2321*8a978a17SVictor Perevertkin // 2322*8a978a17SVictor Perevertkin // Bit field combination of values from the WDF_REQUEST_FORWARD_OPTIONS_FLAGS 2323*8a978a17SVictor Perevertkin // enumeration 2324*8a978a17SVictor Perevertkin // 2325*8a978a17SVictor Perevertkin ULONG Flags; 2326*8a978a17SVictor Perevertkin 2327*8a978a17SVictor Perevertkin } WDF_REQUEST_FORWARD_OPTIONS_V2_15, *PWDF_REQUEST_FORWARD_OPTIONS_V2_15; 2328*8a978a17SVictor Perevertkin 2329*8a978a17SVictor Perevertkin // End of versioning of structures for wdfrequest.h 2330*8a978a17SVictor Perevertkin 2331*8a978a17SVictor Perevertkin // 2332*8a978a17SVictor Perevertkin // Versioning of structures for wdfresource.h 2333*8a978a17SVictor Perevertkin // 2334*8a978a17SVictor Perevertkin // End of versioning of structures for wdfresource.h 2335*8a978a17SVictor Perevertkin 2336*8a978a17SVictor Perevertkin // 2337*8a978a17SVictor Perevertkin // Versioning of structures for wdfroletypes.h 2338*8a978a17SVictor Perevertkin // 2339*8a978a17SVictor Perevertkin // End of versioning of structures for wdfroletypes.h 2340*8a978a17SVictor Perevertkin 2341*8a978a17SVictor Perevertkin // 2342*8a978a17SVictor Perevertkin // Versioning of structures for wdfstring.h 2343*8a978a17SVictor Perevertkin // 2344*8a978a17SVictor Perevertkin // End of versioning of structures for wdfstring.h 2345*8a978a17SVictor Perevertkin 2346*8a978a17SVictor Perevertkin // 2347*8a978a17SVictor Perevertkin // Versioning of structures for wdfsync.h 2348*8a978a17SVictor Perevertkin // 2349*8a978a17SVictor Perevertkin // End of versioning of structures for wdfsync.h 2350*8a978a17SVictor Perevertkin 2351*8a978a17SVictor Perevertkin // 2352*8a978a17SVictor Perevertkin // Versioning of structures for wdftimer.h 2353*8a978a17SVictor Perevertkin // 2354*8a978a17SVictor Perevertkin typedef struct _WDF_TIMER_CONFIG_V2_15 { 2355*8a978a17SVictor Perevertkin ULONG Size; 2356*8a978a17SVictor Perevertkin 2357*8a978a17SVictor Perevertkin PFN_WDF_TIMER EvtTimerFunc; 2358*8a978a17SVictor Perevertkin 2359*8a978a17SVictor Perevertkin ULONG Period; 2360*8a978a17SVictor Perevertkin 2361*8a978a17SVictor Perevertkin // 2362*8a978a17SVictor Perevertkin // If this is TRUE, the Timer will automatically serialize 2363*8a978a17SVictor Perevertkin // with the event callback handlers of its Parent Object. 2364*8a978a17SVictor Perevertkin // 2365*8a978a17SVictor Perevertkin // Parent Object's callback constraints should be compatible 2366*8a978a17SVictor Perevertkin // with the Timer DPC (DISPATCH_LEVEL), or the request will fail. 2367*8a978a17SVictor Perevertkin // 2368*8a978a17SVictor Perevertkin BOOLEAN AutomaticSerialization; 2369*8a978a17SVictor Perevertkin 2370*8a978a17SVictor Perevertkin // 2371*8a978a17SVictor Perevertkin // Optional tolerance for the timer in milliseconds. 2372*8a978a17SVictor Perevertkin // 2373*8a978a17SVictor Perevertkin ULONG TolerableDelay; 2374*8a978a17SVictor Perevertkin 2375*8a978a17SVictor Perevertkin // 2376*8a978a17SVictor Perevertkin // If this is TRUE, high resolution timers will be used. The default 2377*8a978a17SVictor Perevertkin // value is FALSE 2378*8a978a17SVictor Perevertkin // 2379*8a978a17SVictor Perevertkin DECLSPEC_ALIGN(8) BOOLEAN UseHighResolutionTimer; 2380*8a978a17SVictor Perevertkin 2381*8a978a17SVictor Perevertkin } WDF_TIMER_CONFIG_V2_15, *PWDF_TIMER_CONFIG_V2_15; 2382*8a978a17SVictor Perevertkin 2383*8a978a17SVictor Perevertkin // End of versioning of structures for wdftimer.h 2384*8a978a17SVictor Perevertkin 2385*8a978a17SVictor Perevertkin // 2386*8a978a17SVictor Perevertkin // Versioning of structures for wdftriage.h 2387*8a978a17SVictor Perevertkin // 2388*8a978a17SVictor Perevertkin typedef struct _WDFOBJECT_TRIAGE_INFO_V2_15 { 2389*8a978a17SVictor Perevertkin // value 2390*8a978a17SVictor Perevertkin ULONG RawObjectSize; 2391*8a978a17SVictor Perevertkin 2392*8a978a17SVictor Perevertkin ULONG ObjectType; 2393*8a978a17SVictor Perevertkin 2394*8a978a17SVictor Perevertkin ULONG TotalObjectSize; 2395*8a978a17SVictor Perevertkin 2396*8a978a17SVictor Perevertkin ULONG ChildListHead; 2397*8a978a17SVictor Perevertkin 2398*8a978a17SVictor Perevertkin ULONG ChildEntry; 2399*8a978a17SVictor Perevertkin 2400*8a978a17SVictor Perevertkin ULONG Globals; 2401*8a978a17SVictor Perevertkin 2402*8a978a17SVictor Perevertkin ULONG ParentObject; 2403*8a978a17SVictor Perevertkin 2404*8a978a17SVictor Perevertkin } WDFOBJECT_TRIAGE_INFO_V2_15, *PWDFOBJECT_TRIAGE_INFO_V2_15; 2405*8a978a17SVictor Perevertkin 2406*8a978a17SVictor Perevertkin typedef struct _WDFCONTEXT_TRIAGE_INFO_V2_15 { 2407*8a978a17SVictor Perevertkin // value 2408*8a978a17SVictor Perevertkin ULONG HeaderSize; 2409*8a978a17SVictor Perevertkin 2410*8a978a17SVictor Perevertkin ULONG NextHeader; 2411*8a978a17SVictor Perevertkin 2412*8a978a17SVictor Perevertkin ULONG Object; 2413*8a978a17SVictor Perevertkin 2414*8a978a17SVictor Perevertkin ULONG TypeInfoPtr; 2415*8a978a17SVictor Perevertkin 2416*8a978a17SVictor Perevertkin ULONG Context; 2417*8a978a17SVictor Perevertkin 2418*8a978a17SVictor Perevertkin } WDFCONTEXT_TRIAGE_INFO_V2_15, *PWDFCONTEXT_TRIAGE_INFO_V2_15; 2419*8a978a17SVictor Perevertkin 2420*8a978a17SVictor Perevertkin typedef struct _WDFCONTEXTTYPE_TRIAGE_INFO_V2_15 { 2421*8a978a17SVictor Perevertkin // value 2422*8a978a17SVictor Perevertkin ULONG TypeInfoSize; 2423*8a978a17SVictor Perevertkin 2424*8a978a17SVictor Perevertkin ULONG ContextSize; 2425*8a978a17SVictor Perevertkin 2426*8a978a17SVictor Perevertkin ULONG ContextName; 2427*8a978a17SVictor Perevertkin 2428*8a978a17SVictor Perevertkin } WDFCONTEXTTYPE_TRIAGE_INFO_V2_15, *PWDFCONTEXTTYPE_TRIAGE_INFO_V2_15; 2429*8a978a17SVictor Perevertkin 2430*8a978a17SVictor Perevertkin typedef struct _WDFQUEUE_TRIAGE_INFO_V2_15 { 2431*8a978a17SVictor Perevertkin // value 2432*8a978a17SVictor Perevertkin ULONG QueueSize; 2433*8a978a17SVictor Perevertkin 2434*8a978a17SVictor Perevertkin ULONG IrpQueue1; 2435*8a978a17SVictor Perevertkin 2436*8a978a17SVictor Perevertkin ULONG IrpQueue2; 2437*8a978a17SVictor Perevertkin 2438*8a978a17SVictor Perevertkin ULONG RequestList1; 2439*8a978a17SVictor Perevertkin 2440*8a978a17SVictor Perevertkin ULONG RequestList2; 2441*8a978a17SVictor Perevertkin 2442*8a978a17SVictor Perevertkin ULONG FwdProgressContext; 2443*8a978a17SVictor Perevertkin 2444*8a978a17SVictor Perevertkin ULONG PkgIo; 2445*8a978a17SVictor Perevertkin 2446*8a978a17SVictor Perevertkin } WDFQUEUE_TRIAGE_INFO_V2_15, *PWDFQUEUE_TRIAGE_INFO_V2_15; 2447*8a978a17SVictor Perevertkin 2448*8a978a17SVictor Perevertkin typedef struct _WDFFWDPROGRESS_TRIAGE_INFO_V2_15 { 2449*8a978a17SVictor Perevertkin ULONG ReservedRequestList; 2450*8a978a17SVictor Perevertkin 2451*8a978a17SVictor Perevertkin ULONG ReservedRequestInUseList; 2452*8a978a17SVictor Perevertkin 2453*8a978a17SVictor Perevertkin ULONG PendedIrpList; 2454*8a978a17SVictor Perevertkin 2455*8a978a17SVictor Perevertkin } WDFFWDPROGRESS_TRIAGE_INFO_V2_15, *PWDFFWDPROGRESS_TRIAGE_INFO_V2_15; 2456*8a978a17SVictor Perevertkin 2457*8a978a17SVictor Perevertkin typedef struct _WDFIRPQUEUE_TRIAGE_INFO_V2_15 { 2458*8a978a17SVictor Perevertkin // value 2459*8a978a17SVictor Perevertkin ULONG IrpQueueSize; 2460*8a978a17SVictor Perevertkin 2461*8a978a17SVictor Perevertkin ULONG IrpListHeader; 2462*8a978a17SVictor Perevertkin 2463*8a978a17SVictor Perevertkin ULONG IrpListEntry; 2464*8a978a17SVictor Perevertkin 2465*8a978a17SVictor Perevertkin ULONG IrpContext; 2466*8a978a17SVictor Perevertkin 2467*8a978a17SVictor Perevertkin } WDFIRPQUEUE_TRIAGE_INFO_V2_15, *PWDFIRPQUEUE_TRIAGE_INFO_V2_15; 2468*8a978a17SVictor Perevertkin 2469*8a978a17SVictor Perevertkin typedef struct _WDFREQUEST_TRIAGE_INFO_V2_15 { 2470*8a978a17SVictor Perevertkin // value 2471*8a978a17SVictor Perevertkin ULONG RequestSize; 2472*8a978a17SVictor Perevertkin 2473*8a978a17SVictor Perevertkin ULONG CsqContext; 2474*8a978a17SVictor Perevertkin 2475*8a978a17SVictor Perevertkin // WDF irp wrapper, see below. 2476*8a978a17SVictor Perevertkin ULONG FxIrp; 2477*8a978a17SVictor Perevertkin 2478*8a978a17SVictor Perevertkin ULONG ListEntryQueueOwned; 2479*8a978a17SVictor Perevertkin 2480*8a978a17SVictor Perevertkin ULONG ListEntryQueueOwned2; 2481*8a978a17SVictor Perevertkin 2482*8a978a17SVictor Perevertkin ULONG RequestListEntry; 2483*8a978a17SVictor Perevertkin 2484*8a978a17SVictor Perevertkin ULONG FwdProgressList; 2485*8a978a17SVictor Perevertkin 2486*8a978a17SVictor Perevertkin } WDFREQUEST_TRIAGE_INFO_V2_15, *PWDFREQUEST_TRIAGE_INFO_V2_15; 2487*8a978a17SVictor Perevertkin 2488*8a978a17SVictor Perevertkin typedef struct _WDFDEVICE_TRIAGE_INFO_V2_15 { 2489*8a978a17SVictor Perevertkin // value 2490*8a978a17SVictor Perevertkin ULONG DeviceInitSize; 2491*8a978a17SVictor Perevertkin 2492*8a978a17SVictor Perevertkin ULONG DeviceDriver; 2493*8a978a17SVictor Perevertkin 2494*8a978a17SVictor Perevertkin } WDFDEVICE_TRIAGE_INFO_V2_15, *PWDFDEVICE_TRIAGE_INFO_V2_15; 2495*8a978a17SVictor Perevertkin 2496*8a978a17SVictor Perevertkin typedef struct _WDFIRP_TRIAGE_INFO_V2_15 { 2497*8a978a17SVictor Perevertkin // value 2498*8a978a17SVictor Perevertkin ULONG FxIrpSize; 2499*8a978a17SVictor Perevertkin 2500*8a978a17SVictor Perevertkin ULONG IrpPtr; 2501*8a978a17SVictor Perevertkin 2502*8a978a17SVictor Perevertkin } WDFIRP_TRIAGE_INFO_V2_15, *PWDFIRP_TRIAGE_INFO_V2_15; 2503*8a978a17SVictor Perevertkin 2504*8a978a17SVictor Perevertkin typedef struct _WDF_TRIAGE_INFO_V2_15 { 2505*8a978a17SVictor Perevertkin // 2506*8a978a17SVictor Perevertkin // Version. 2507*8a978a17SVictor Perevertkin // 2508*8a978a17SVictor Perevertkin ULONG WdfMajorVersion; 2509*8a978a17SVictor Perevertkin 2510*8a978a17SVictor Perevertkin ULONG WdfMinorVersion; 2511*8a978a17SVictor Perevertkin 2512*8a978a17SVictor Perevertkin ULONG TriageInfoMajorVersion; 2513*8a978a17SVictor Perevertkin 2514*8a978a17SVictor Perevertkin ULONG TriageInfoMinorVersion; 2515*8a978a17SVictor Perevertkin 2516*8a978a17SVictor Perevertkin // 2517*8a978a17SVictor Perevertkin // Reserved pointer. 2518*8a978a17SVictor Perevertkin // 2519*8a978a17SVictor Perevertkin PVOID Reserved; 2520*8a978a17SVictor Perevertkin 2521*8a978a17SVictor Perevertkin // 2522*8a978a17SVictor Perevertkin // WDF objects triage info. 2523*8a978a17SVictor Perevertkin // 2524*8a978a17SVictor Perevertkin PWDFOBJECT_TRIAGE_INFO_V2_15 WdfObjectTriageInfo; 2525*8a978a17SVictor Perevertkin 2526*8a978a17SVictor Perevertkin PWDFCONTEXT_TRIAGE_INFO_V2_15 WdfContextTriageInfo; 2527*8a978a17SVictor Perevertkin 2528*8a978a17SVictor Perevertkin PWDFCONTEXTTYPE_TRIAGE_INFO_V2_15 WdfContextTypeTriageInfo; 2529*8a978a17SVictor Perevertkin 2530*8a978a17SVictor Perevertkin PWDFQUEUE_TRIAGE_INFO_V2_15 WdfQueueTriageInfo; 2531*8a978a17SVictor Perevertkin 2532*8a978a17SVictor Perevertkin PWDFFWDPROGRESS_TRIAGE_INFO_V2_15 WdfFwdProgressTriageInfo; 2533*8a978a17SVictor Perevertkin 2534*8a978a17SVictor Perevertkin PWDFIRPQUEUE_TRIAGE_INFO_V2_15 WdfIrpQueueTriageInfo; 2535*8a978a17SVictor Perevertkin 2536*8a978a17SVictor Perevertkin PWDFREQUEST_TRIAGE_INFO_V2_15 WdfRequestTriageInfo; 2537*8a978a17SVictor Perevertkin 2538*8a978a17SVictor Perevertkin PWDFDEVICE_TRIAGE_INFO_V2_15 WdfDeviceTriageInfo; 2539*8a978a17SVictor Perevertkin 2540*8a978a17SVictor Perevertkin PWDFIRP_TRIAGE_INFO_V2_15 WdfIrpTriageInfo; 2541*8a978a17SVictor Perevertkin 2542*8a978a17SVictor Perevertkin } WDF_TRIAGE_INFO_V2_15, *PWDF_TRIAGE_INFO_V2_15; 2543*8a978a17SVictor Perevertkin 2544*8a978a17SVictor Perevertkin // End of versioning of structures for wdftriage.h 2545*8a978a17SVictor Perevertkin 2546*8a978a17SVictor Perevertkin // 2547*8a978a17SVictor Perevertkin // Versioning of structures for wdftypes.h 2548*8a978a17SVictor Perevertkin // 2549*8a978a17SVictor Perevertkin // End of versioning of structures for wdftypes.h 2550*8a978a17SVictor Perevertkin 2551*8a978a17SVictor Perevertkin // 2552*8a978a17SVictor Perevertkin // Versioning of structures for wdfUsb.h 2553*8a978a17SVictor Perevertkin // 2554*8a978a17SVictor Perevertkin typedef struct _WDF_USB_REQUEST_COMPLETION_PARAMS_V2_15 { 2555*8a978a17SVictor Perevertkin USBD_STATUS UsbdStatus; 2556*8a978a17SVictor Perevertkin 2557*8a978a17SVictor Perevertkin WDF_USB_REQUEST_TYPE Type; 2558*8a978a17SVictor Perevertkin 2559*8a978a17SVictor Perevertkin union { 2560*8a978a17SVictor Perevertkin struct { 2561*8a978a17SVictor Perevertkin WDFMEMORY Buffer; 2562*8a978a17SVictor Perevertkin 2563*8a978a17SVictor Perevertkin USHORT LangID; 2564*8a978a17SVictor Perevertkin 2565*8a978a17SVictor Perevertkin UCHAR StringIndex; 2566*8a978a17SVictor Perevertkin 2567*8a978a17SVictor Perevertkin // 2568*8a978a17SVictor Perevertkin // If STATUS_BUFFER_OVERFLOW is returned, this field will contain the 2569*8a978a17SVictor Perevertkin // number of bytes required to retrieve the entire string. 2570*8a978a17SVictor Perevertkin // 2571*8a978a17SVictor Perevertkin UCHAR RequiredSize; 2572*8a978a17SVictor Perevertkin 2573*8a978a17SVictor Perevertkin } DeviceString; 2574*8a978a17SVictor Perevertkin 2575*8a978a17SVictor Perevertkin struct { 2576*8a978a17SVictor Perevertkin WDFMEMORY Buffer; 2577*8a978a17SVictor Perevertkin 2578*8a978a17SVictor Perevertkin WDF_USB_CONTROL_SETUP_PACKET SetupPacket; 2579*8a978a17SVictor Perevertkin 2580*8a978a17SVictor Perevertkin ULONG Length; 2581*8a978a17SVictor Perevertkin 2582*8a978a17SVictor Perevertkin } DeviceControlTransfer; 2583*8a978a17SVictor Perevertkin 2584*8a978a17SVictor Perevertkin struct { 2585*8a978a17SVictor Perevertkin WDFMEMORY Buffer; 2586*8a978a17SVictor Perevertkin 2587*8a978a17SVictor Perevertkin } DeviceUrb; 2588*8a978a17SVictor Perevertkin 2589*8a978a17SVictor Perevertkin struct { 2590*8a978a17SVictor Perevertkin WDFMEMORY Buffer; 2591*8a978a17SVictor Perevertkin 2592*8a978a17SVictor Perevertkin size_t Length; 2593*8a978a17SVictor Perevertkin 2594*8a978a17SVictor Perevertkin size_t Offset; 2595*8a978a17SVictor Perevertkin 2596*8a978a17SVictor Perevertkin } PipeWrite; 2597*8a978a17SVictor Perevertkin 2598*8a978a17SVictor Perevertkin struct { 2599*8a978a17SVictor Perevertkin WDFMEMORY Buffer; 2600*8a978a17SVictor Perevertkin 2601*8a978a17SVictor Perevertkin size_t Length; 2602*8a978a17SVictor Perevertkin 2603*8a978a17SVictor Perevertkin size_t Offset; 2604*8a978a17SVictor Perevertkin 2605*8a978a17SVictor Perevertkin } PipeRead; 2606*8a978a17SVictor Perevertkin 2607*8a978a17SVictor Perevertkin struct { 2608*8a978a17SVictor Perevertkin WDFMEMORY Buffer; 2609*8a978a17SVictor Perevertkin 2610*8a978a17SVictor Perevertkin } PipeUrb; 2611*8a978a17SVictor Perevertkin 2612*8a978a17SVictor Perevertkin } Parameters; 2613*8a978a17SVictor Perevertkin 2614*8a978a17SVictor Perevertkin } WDF_USB_REQUEST_COMPLETION_PARAMS_V2_15, *PWDF_USB_REQUEST_COMPLETION_PARAMS_V2_15; 2615*8a978a17SVictor Perevertkin 2616*8a978a17SVictor Perevertkin typedef struct _WDF_USB_CONTINUOUS_READER_CONFIG_V2_15 { 2617*8a978a17SVictor Perevertkin // 2618*8a978a17SVictor Perevertkin // Size of the string in bytes 2619*8a978a17SVictor Perevertkin // 2620*8a978a17SVictor Perevertkin ULONG Size; 2621*8a978a17SVictor Perevertkin 2622*8a978a17SVictor Perevertkin // 2623*8a978a17SVictor Perevertkin // Number of bytes to send ask for from the usb device. 2624*8a978a17SVictor Perevertkin // 2625*8a978a17SVictor Perevertkin size_t TransferLength; 2626*8a978a17SVictor Perevertkin 2627*8a978a17SVictor Perevertkin // 2628*8a978a17SVictor Perevertkin // Number of bytes to allocate before the requested transfer length 2629*8a978a17SVictor Perevertkin // 2630*8a978a17SVictor Perevertkin size_t HeaderLength; 2631*8a978a17SVictor Perevertkin 2632*8a978a17SVictor Perevertkin // 2633*8a978a17SVictor Perevertkin // Number of bytes to allocate after the requested transfer length 2634*8a978a17SVictor Perevertkin // 2635*8a978a17SVictor Perevertkin size_t TrailerLength; 2636*8a978a17SVictor Perevertkin 2637*8a978a17SVictor Perevertkin // 2638*8a978a17SVictor Perevertkin // Number of reads to send to the device at once. If zero is specified, the 2639*8a978a17SVictor Perevertkin // default will be used. 2640*8a978a17SVictor Perevertkin // 2641*8a978a17SVictor Perevertkin UCHAR NumPendingReads; 2642*8a978a17SVictor Perevertkin 2643*8a978a17SVictor Perevertkin // 2644*8a978a17SVictor Perevertkin // Optional attributes to apply to each WDFMEMORY allocated for each read 2645*8a978a17SVictor Perevertkin // 2646*8a978a17SVictor Perevertkin PWDF_OBJECT_ATTRIBUTES_V2_15 BufferAttributes; 2647*8a978a17SVictor Perevertkin 2648*8a978a17SVictor Perevertkin // 2649*8a978a17SVictor Perevertkin // Event callback invoked when a read is completed 2650*8a978a17SVictor Perevertkin // 2651*8a978a17SVictor Perevertkin PFN_WDF_USB_READER_COMPLETION_ROUTINE EvtUsbTargetPipeReadComplete; 2652*8a978a17SVictor Perevertkin 2653*8a978a17SVictor Perevertkin // 2654*8a978a17SVictor Perevertkin // Context to be passed to EvtUsbTargetPipeReadComplete 2655*8a978a17SVictor Perevertkin // 2656*8a978a17SVictor Perevertkin WDFCONTEXT EvtUsbTargetPipeReadCompleteContext; 2657*8a978a17SVictor Perevertkin 2658*8a978a17SVictor Perevertkin // 2659*8a978a17SVictor Perevertkin // Event callback invoked when a reader fails. If TRUE is returned, the 2660*8a978a17SVictor Perevertkin // readers are restarted. 2661*8a978a17SVictor Perevertkin // 2662*8a978a17SVictor Perevertkin PFN_WDF_USB_READERS_FAILED EvtUsbTargetPipeReadersFailed; 2663*8a978a17SVictor Perevertkin 2664*8a978a17SVictor Perevertkin } WDF_USB_CONTINUOUS_READER_CONFIG_V2_15, *PWDF_USB_CONTINUOUS_READER_CONFIG_V2_15; 2665*8a978a17SVictor Perevertkin 2666*8a978a17SVictor Perevertkin typedef struct _WDF_USB_DEVICE_INFORMATION_V2_15 { 2667*8a978a17SVictor Perevertkin // 2668*8a978a17SVictor Perevertkin // Size of this structure in bytes 2669*8a978a17SVictor Perevertkin // 2670*8a978a17SVictor Perevertkin ULONG Size; 2671*8a978a17SVictor Perevertkin 2672*8a978a17SVictor Perevertkin // 2673*8a978a17SVictor Perevertkin // USBD version information 2674*8a978a17SVictor Perevertkin // 2675*8a978a17SVictor Perevertkin USBD_VERSION_INFORMATION UsbdVersionInformation; 2676*8a978a17SVictor Perevertkin 2677*8a978a17SVictor Perevertkin // 2678*8a978a17SVictor Perevertkin // Usb controller port capabilities 2679*8a978a17SVictor Perevertkin // 2680*8a978a17SVictor Perevertkin ULONG HcdPortCapabilities; 2681*8a978a17SVictor Perevertkin 2682*8a978a17SVictor Perevertkin // 2683*8a978a17SVictor Perevertkin // Bitfield of WDF_USB_DEVICE_TRAITS values 2684*8a978a17SVictor Perevertkin // 2685*8a978a17SVictor Perevertkin ULONG Traits; 2686*8a978a17SVictor Perevertkin 2687*8a978a17SVictor Perevertkin } WDF_USB_DEVICE_INFORMATION_V2_15, *PWDF_USB_DEVICE_INFORMATION_V2_15; 2688*8a978a17SVictor Perevertkin 2689*8a978a17SVictor Perevertkin typedef struct _WDF_USB_INTERFACE_SETTING_PAIR_V2_15 { 2690*8a978a17SVictor Perevertkin // 2691*8a978a17SVictor Perevertkin // Interface to select 2692*8a978a17SVictor Perevertkin // 2693*8a978a17SVictor Perevertkin WDFUSBINTERFACE UsbInterface; 2694*8a978a17SVictor Perevertkin 2695*8a978a17SVictor Perevertkin // 2696*8a978a17SVictor Perevertkin // Setting to select on UsbInterface 2697*8a978a17SVictor Perevertkin // 2698*8a978a17SVictor Perevertkin UCHAR SettingIndex; 2699*8a978a17SVictor Perevertkin 2700*8a978a17SVictor Perevertkin } WDF_USB_INTERFACE_SETTING_PAIR_V2_15, *PWDF_USB_INTERFACE_SETTING_PAIR_V2_15; 2701*8a978a17SVictor Perevertkin 2702*8a978a17SVictor Perevertkin typedef struct _WDF_USB_DEVICE_SELECT_CONFIG_PARAMS_V2_15 { 2703*8a978a17SVictor Perevertkin // 2704*8a978a17SVictor Perevertkin // Size of the structure in bytes 2705*8a978a17SVictor Perevertkin // 2706*8a978a17SVictor Perevertkin ULONG Size; 2707*8a978a17SVictor Perevertkin 2708*8a978a17SVictor Perevertkin // 2709*8a978a17SVictor Perevertkin // Type of select config, one of WdfUsbTargetDeviceSelectConfigType values 2710*8a978a17SVictor Perevertkin // 2711*8a978a17SVictor Perevertkin WdfUsbTargetDeviceSelectConfigType Type; 2712*8a978a17SVictor Perevertkin 2713*8a978a17SVictor Perevertkin union { 2714*8a978a17SVictor Perevertkin struct { 2715*8a978a17SVictor Perevertkin // 2716*8a978a17SVictor Perevertkin // Configuration descriptor to use 2717*8a978a17SVictor Perevertkin // 2718*8a978a17SVictor Perevertkin PUSB_CONFIGURATION_DESCRIPTOR ConfigurationDescriptor; 2719*8a978a17SVictor Perevertkin 2720*8a978a17SVictor Perevertkin // 2721*8a978a17SVictor Perevertkin // Array of interface descriptors pointers. 2722*8a978a17SVictor Perevertkin // 2723*8a978a17SVictor Perevertkin PUSB_INTERFACE_DESCRIPTOR * InterfaceDescriptors; 2724*8a978a17SVictor Perevertkin 2725*8a978a17SVictor Perevertkin // 2726*8a978a17SVictor Perevertkin // Number of elements in the InterfaceDescrtiptors pointer array. 2727*8a978a17SVictor Perevertkin // 2728*8a978a17SVictor Perevertkin ULONG NumInterfaceDescriptors; 2729*8a978a17SVictor Perevertkin 2730*8a978a17SVictor Perevertkin } Descriptor; 2731*8a978a17SVictor Perevertkin 2732*8a978a17SVictor Perevertkin struct { 2733*8a978a17SVictor Perevertkin // 2734*8a978a17SVictor Perevertkin // Preallocated select config URB formatted by the caller. 2735*8a978a17SVictor Perevertkin // Will be used, as supplied without modification, as the select 2736*8a978a17SVictor Perevertkin // config request. 2737*8a978a17SVictor Perevertkin // 2738*8a978a17SVictor Perevertkin PURB Urb; 2739*8a978a17SVictor Perevertkin 2740*8a978a17SVictor Perevertkin } Urb; 2741*8a978a17SVictor Perevertkin 2742*8a978a17SVictor Perevertkin struct { 2743*8a978a17SVictor Perevertkin // 2744*8a978a17SVictor Perevertkin // Number of pipes configured on the single after. This value is 2745*8a978a17SVictor Perevertkin // returned to the caller after a succssful call. 2746*8a978a17SVictor Perevertkin // 2747*8a978a17SVictor Perevertkin UCHAR NumberConfiguredPipes; 2748*8a978a17SVictor Perevertkin 2749*8a978a17SVictor Perevertkin // 2750*8a978a17SVictor Perevertkin // The interface which was configred. This value is returned to the 2751*8a978a17SVictor Perevertkin // caller after a successful call. 2752*8a978a17SVictor Perevertkin // 2753*8a978a17SVictor Perevertkin WDFUSBINTERFACE ConfiguredUsbInterface; 2754*8a978a17SVictor Perevertkin 2755*8a978a17SVictor Perevertkin } SingleInterface; 2756*8a978a17SVictor Perevertkin 2757*8a978a17SVictor Perevertkin struct { 2758*8a978a17SVictor Perevertkin // 2759*8a978a17SVictor Perevertkin // Number of interface pairs in the Pairs array 2760*8a978a17SVictor Perevertkin // 2761*8a978a17SVictor Perevertkin UCHAR NumberInterfaces; 2762*8a978a17SVictor Perevertkin 2763*8a978a17SVictor Perevertkin // 2764*8a978a17SVictor Perevertkin // Array of interface + settings 2765*8a978a17SVictor Perevertkin // 2766*8a978a17SVictor Perevertkin PWDF_USB_INTERFACE_SETTING_PAIR_V2_15 Pairs; 2767*8a978a17SVictor Perevertkin 2768*8a978a17SVictor Perevertkin // 2769*8a978a17SVictor Perevertkin // Number of interfaces which were configured after a successful call 2770*8a978a17SVictor Perevertkin // 2771*8a978a17SVictor Perevertkin UCHAR NumberOfConfiguredInterfaces; 2772*8a978a17SVictor Perevertkin 2773*8a978a17SVictor Perevertkin } MultiInterface; 2774*8a978a17SVictor Perevertkin 2775*8a978a17SVictor Perevertkin } Types; 2776*8a978a17SVictor Perevertkin 2777*8a978a17SVictor Perevertkin } WDF_USB_DEVICE_SELECT_CONFIG_PARAMS_V2_15, *PWDF_USB_DEVICE_SELECT_CONFIG_PARAMS_V2_15; 2778*8a978a17SVictor Perevertkin 2779*8a978a17SVictor Perevertkin typedef struct _WDF_USB_INTERFACE_SELECT_SETTING_PARAMS_V2_15 { 2780*8a978a17SVictor Perevertkin // 2781*8a978a17SVictor Perevertkin // Size of this data structure in bytes 2782*8a978a17SVictor Perevertkin // 2783*8a978a17SVictor Perevertkin ULONG Size; 2784*8a978a17SVictor Perevertkin 2785*8a978a17SVictor Perevertkin // 2786*8a978a17SVictor Perevertkin // Type of select interface as indicated by one of the 2787*8a978a17SVictor Perevertkin // WdfUsbTargetDeviceSelectSettingType values. 2788*8a978a17SVictor Perevertkin // 2789*8a978a17SVictor Perevertkin WdfUsbTargetDeviceSelectSettingType Type; 2790*8a978a17SVictor Perevertkin 2791*8a978a17SVictor Perevertkin union { 2792*8a978a17SVictor Perevertkin struct { 2793*8a978a17SVictor Perevertkin // 2794*8a978a17SVictor Perevertkin // Interface descriptor that will be used in the interface selection 2795*8a978a17SVictor Perevertkin // 2796*8a978a17SVictor Perevertkin PUSB_INTERFACE_DESCRIPTOR InterfaceDescriptor; 2797*8a978a17SVictor Perevertkin 2798*8a978a17SVictor Perevertkin } Descriptor; 2799*8a978a17SVictor Perevertkin 2800*8a978a17SVictor Perevertkin struct { 2801*8a978a17SVictor Perevertkin // 2802*8a978a17SVictor Perevertkin // The setting index of the WDFUSBINTERFACE to use 2803*8a978a17SVictor Perevertkin // 2804*8a978a17SVictor Perevertkin UCHAR SettingIndex; 2805*8a978a17SVictor Perevertkin 2806*8a978a17SVictor Perevertkin } Interface; 2807*8a978a17SVictor Perevertkin 2808*8a978a17SVictor Perevertkin struct { 2809*8a978a17SVictor Perevertkin // 2810*8a978a17SVictor Perevertkin // Preformatted select interface URB which will be used in the 2811*8a978a17SVictor Perevertkin // select interface request. 2812*8a978a17SVictor Perevertkin // 2813*8a978a17SVictor Perevertkin PURB Urb; 2814*8a978a17SVictor Perevertkin 2815*8a978a17SVictor Perevertkin } Urb; 2816*8a978a17SVictor Perevertkin 2817*8a978a17SVictor Perevertkin } Types; 2818*8a978a17SVictor Perevertkin 2819*8a978a17SVictor Perevertkin } WDF_USB_INTERFACE_SELECT_SETTING_PARAMS_V2_15, *PWDF_USB_INTERFACE_SELECT_SETTING_PARAMS_V2_15; 2820*8a978a17SVictor Perevertkin 2821*8a978a17SVictor Perevertkin typedef struct _WDF_USB_PIPE_INFORMATION_V2_15 { 2822*8a978a17SVictor Perevertkin // 2823*8a978a17SVictor Perevertkin // Size of the structure in bytes 2824*8a978a17SVictor Perevertkin // 2825*8a978a17SVictor Perevertkin ULONG Size; 2826*8a978a17SVictor Perevertkin 2827*8a978a17SVictor Perevertkin // 2828*8a978a17SVictor Perevertkin // Maximum packet size this device is capable of 2829*8a978a17SVictor Perevertkin // 2830*8a978a17SVictor Perevertkin ULONG MaximumPacketSize; 2831*8a978a17SVictor Perevertkin 2832*8a978a17SVictor Perevertkin // 2833*8a978a17SVictor Perevertkin // Raw endpoint address of the device as described by its descriptor 2834*8a978a17SVictor Perevertkin // 2835*8a978a17SVictor Perevertkin UCHAR EndpointAddress; 2836*8a978a17SVictor Perevertkin 2837*8a978a17SVictor Perevertkin // 2838*8a978a17SVictor Perevertkin // Polling interval 2839*8a978a17SVictor Perevertkin // 2840*8a978a17SVictor Perevertkin UCHAR Interval; 2841*8a978a17SVictor Perevertkin 2842*8a978a17SVictor Perevertkin // 2843*8a978a17SVictor Perevertkin // Which alternate setting this structure is relevant for 2844*8a978a17SVictor Perevertkin // 2845*8a978a17SVictor Perevertkin UCHAR SettingIndex; 2846*8a978a17SVictor Perevertkin 2847*8a978a17SVictor Perevertkin // 2848*8a978a17SVictor Perevertkin // The type of the pipe 2849*8a978a17SVictor Perevertkin WDF_USB_PIPE_TYPE PipeType; 2850*8a978a17SVictor Perevertkin 2851*8a978a17SVictor Perevertkin // 2852*8a978a17SVictor Perevertkin // Maximum size of one transfer which should be sent to the host controller 2853*8a978a17SVictor Perevertkin // 2854*8a978a17SVictor Perevertkin ULONG MaximumTransferSize; 2855*8a978a17SVictor Perevertkin 2856*8a978a17SVictor Perevertkin } WDF_USB_PIPE_INFORMATION_V2_15, *PWDF_USB_PIPE_INFORMATION_V2_15; 2857*8a978a17SVictor Perevertkin 2858*8a978a17SVictor Perevertkin typedef struct _WDF_USB_DEVICE_CREATE_CONFIG_V2_15 { 2859*8a978a17SVictor Perevertkin // 2860*8a978a17SVictor Perevertkin // Size of this structure in bytes 2861*8a978a17SVictor Perevertkin // 2862*8a978a17SVictor Perevertkin ULONG Size; 2863*8a978a17SVictor Perevertkin 2864*8a978a17SVictor Perevertkin // 2865*8a978a17SVictor Perevertkin // USBD Client Contraction of the Wdf Client 2866*8a978a17SVictor Perevertkin // 2867*8a978a17SVictor Perevertkin ULONG USBDClientContractVersion; 2868*8a978a17SVictor Perevertkin 2869*8a978a17SVictor Perevertkin } WDF_USB_DEVICE_CREATE_CONFIG_V2_15, *PWDF_USB_DEVICE_CREATE_CONFIG_V2_15; 2870*8a978a17SVictor Perevertkin 2871*8a978a17SVictor Perevertkin // End of versioning of structures for wdfUsb.h 2872*8a978a17SVictor Perevertkin 2873*8a978a17SVictor Perevertkin // 2874*8a978a17SVictor Perevertkin // Versioning of structures for wdfverifier.h 2875*8a978a17SVictor Perevertkin // 2876*8a978a17SVictor Perevertkin // End of versioning of structures for wdfverifier.h 2877*8a978a17SVictor Perevertkin 2878*8a978a17SVictor Perevertkin // 2879*8a978a17SVictor Perevertkin // Versioning of structures for wdfWMI.h 2880*8a978a17SVictor Perevertkin // 2881*8a978a17SVictor Perevertkin typedef struct _WDF_WMI_PROVIDER_CONFIG_V2_15 { 2882*8a978a17SVictor Perevertkin // 2883*8a978a17SVictor Perevertkin // Size of this structure in bytes 2884*8a978a17SVictor Perevertkin // 2885*8a978a17SVictor Perevertkin ULONG Size; 2886*8a978a17SVictor Perevertkin 2887*8a978a17SVictor Perevertkin // 2888*8a978a17SVictor Perevertkin // The GUID being registered 2889*8a978a17SVictor Perevertkin // 2890*8a978a17SVictor Perevertkin GUID Guid; 2891*8a978a17SVictor Perevertkin 2892*8a978a17SVictor Perevertkin // 2893*8a978a17SVictor Perevertkin // Combination of values from the enum WDF_WMI_PROVIDER_FLAGS 2894*8a978a17SVictor Perevertkin // 2895*8a978a17SVictor Perevertkin ULONG Flags; 2896*8a978a17SVictor Perevertkin 2897*8a978a17SVictor Perevertkin // 2898*8a978a17SVictor Perevertkin // Minimum expected buffer size for query and set instance requests. 2899*8a978a17SVictor Perevertkin // Ignored if WdfWmiProviderEventOnly is set in Flags. 2900*8a978a17SVictor Perevertkin // 2901*8a978a17SVictor Perevertkin ULONG MinInstanceBufferSize; 2902*8a978a17SVictor Perevertkin 2903*8a978a17SVictor Perevertkin // 2904*8a978a17SVictor Perevertkin // Callback when caller is opening a provider which ha been marked as 2905*8a978a17SVictor Perevertkin // expensive or when a caller is interested in events. 2906*8a978a17SVictor Perevertkin // 2907*8a978a17SVictor Perevertkin PFN_WDF_WMI_PROVIDER_FUNCTION_CONTROL EvtWmiProviderFunctionControl; 2908*8a978a17SVictor Perevertkin 2909*8a978a17SVictor Perevertkin } WDF_WMI_PROVIDER_CONFIG_V2_15, *PWDF_WMI_PROVIDER_CONFIG_V2_15; 2910*8a978a17SVictor Perevertkin 2911*8a978a17SVictor Perevertkin typedef struct _WDF_WMI_INSTANCE_CONFIG_V2_15 { 2912*8a978a17SVictor Perevertkin // 2913*8a978a17SVictor Perevertkin // Size of the structure in bytes 2914*8a978a17SVictor Perevertkin // 2915*8a978a17SVictor Perevertkin ULONG Size; 2916*8a978a17SVictor Perevertkin 2917*8a978a17SVictor Perevertkin // 2918*8a978a17SVictor Perevertkin // Optional parameter. If NULL, ProviderConfig must be set to a valid pointer 2919*8a978a17SVictor Perevertkin // value. If specified, indicates the provider to create an instance for. 2920*8a978a17SVictor Perevertkin // 2921*8a978a17SVictor Perevertkin WDFWMIPROVIDER Provider; 2922*8a978a17SVictor Perevertkin 2923*8a978a17SVictor Perevertkin // 2924*8a978a17SVictor Perevertkin // Optional parameter. If NULL, Provider must be set to a valid handle 2925*8a978a17SVictor Perevertkin // value. If specifeid, indicates the configuration for a provider to be 2926*8a978a17SVictor Perevertkin // created and for this instance to be associated with. 2927*8a978a17SVictor Perevertkin // 2928*8a978a17SVictor Perevertkin PWDF_WMI_PROVIDER_CONFIG_V2_15 ProviderConfig; 2929*8a978a17SVictor Perevertkin 2930*8a978a17SVictor Perevertkin // 2931*8a978a17SVictor Perevertkin // If the Provider is configured as read only and this field is set to TRUE, 2932*8a978a17SVictor Perevertkin // the EvtWmiInstanceQueryInstance is ignored and WDF will blindly copy the 2933*8a978a17SVictor Perevertkin // context associated with this instance (using RtlCopyMemory, with no locks 2934*8a978a17SVictor Perevertkin // held) into the query buffer. 2935*8a978a17SVictor Perevertkin // 2936*8a978a17SVictor Perevertkin BOOLEAN UseContextForQuery; 2937*8a978a17SVictor Perevertkin 2938*8a978a17SVictor Perevertkin // 2939*8a978a17SVictor Perevertkin // If TRUE, the instance will be registered as well as created. 2940*8a978a17SVictor Perevertkin // 2941*8a978a17SVictor Perevertkin BOOLEAN Register; 2942*8a978a17SVictor Perevertkin 2943*8a978a17SVictor Perevertkin // 2944*8a978a17SVictor Perevertkin // Callback when caller wants to query the entire data item's buffer. 2945*8a978a17SVictor Perevertkin // 2946*8a978a17SVictor Perevertkin PFN_WDF_WMI_INSTANCE_QUERY_INSTANCE EvtWmiInstanceQueryInstance; 2947*8a978a17SVictor Perevertkin 2948*8a978a17SVictor Perevertkin // 2949*8a978a17SVictor Perevertkin // Callback when caller wants to set the entire data item's buffer. 2950*8a978a17SVictor Perevertkin // 2951*8a978a17SVictor Perevertkin PFN_WDF_WMI_INSTANCE_SET_INSTANCE EvtWmiInstanceSetInstance; 2952*8a978a17SVictor Perevertkin 2953*8a978a17SVictor Perevertkin // 2954*8a978a17SVictor Perevertkin // Callback when caller wants to set a single field in the data item's buffer 2955*8a978a17SVictor Perevertkin // 2956*8a978a17SVictor Perevertkin PFN_WDF_WMI_INSTANCE_SET_ITEM EvtWmiInstanceSetItem; 2957*8a978a17SVictor Perevertkin 2958*8a978a17SVictor Perevertkin // 2959*8a978a17SVictor Perevertkin // Callback when caller wants to execute a method on the data item. 2960*8a978a17SVictor Perevertkin // 2961*8a978a17SVictor Perevertkin PFN_WDF_WMI_INSTANCE_EXECUTE_METHOD EvtWmiInstanceExecuteMethod; 2962*8a978a17SVictor Perevertkin 2963*8a978a17SVictor Perevertkin } WDF_WMI_INSTANCE_CONFIG_V2_15, *PWDF_WMI_INSTANCE_CONFIG_V2_15; 2964*8a978a17SVictor Perevertkin 2965*8a978a17SVictor Perevertkin // End of versioning of structures for wdfWMI.h 2966*8a978a17SVictor Perevertkin 2967*8a978a17SVictor Perevertkin // 2968*8a978a17SVictor Perevertkin // Versioning of structures for wdfworkitem.h 2969*8a978a17SVictor Perevertkin // 2970*8a978a17SVictor Perevertkin typedef struct _WDF_WORKITEM_CONFIG_V2_15 { 2971*8a978a17SVictor Perevertkin ULONG Size; 2972*8a978a17SVictor Perevertkin 2973*8a978a17SVictor Perevertkin PFN_WDF_WORKITEM EvtWorkItemFunc; 2974*8a978a17SVictor Perevertkin 2975*8a978a17SVictor Perevertkin // 2976*8a978a17SVictor Perevertkin // If this is TRUE, the workitem will automatically serialize 2977*8a978a17SVictor Perevertkin // with the event callback handlers of its Parent Object. 2978*8a978a17SVictor Perevertkin // 2979*8a978a17SVictor Perevertkin // Parent Object's callback constraints should be compatible 2980*8a978a17SVictor Perevertkin // with the work item (PASSIVE_LEVEL), or the request will fail. 2981*8a978a17SVictor Perevertkin // 2982*8a978a17SVictor Perevertkin BOOLEAN AutomaticSerialization; 2983*8a978a17SVictor Perevertkin 2984*8a978a17SVictor Perevertkin } WDF_WORKITEM_CONFIG_V2_15, *PWDF_WORKITEM_CONFIG_V2_15; 2985*8a978a17SVictor Perevertkin 2986*8a978a17SVictor Perevertkin // End of versioning of structures for wdfworkitem.h 2987*8a978a17SVictor Perevertkin 2988*8a978a17SVictor Perevertkin 2989*8a978a17SVictor Perevertkin #endif // _WDF_V2_15_TYPES_H_ 2990