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