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