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