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