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