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