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