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