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