ReactOS  0.4.15-dev-2703-g05fb0f1
coreprivshared.hpp
Go to the documentation of this file.
1 /*++
2 
3 Copyright (c) Microsoft Corporation
4 
5 Module Name:
6 
7  corepriv.hpp
8 
9 Abstract:
10 
11  This is the main driver framework.
12 
13 Author:
14 
15 
16 
17 Environment:
18 
19  Both kernel and user mode
20 
21 Revision History:
22 
23 --*/
24 
25 #pragma once
26 
27 #if ((FX_CORE_MODE)==(FX_CORE_USER_MODE))
28 #define FX_IS_USER_MODE (TRUE)
29 #define FX_IS_KERNEL_MODE (FALSE)
30 #elif ((FX_CORE_MODE)==(FX_CORE_KERNEL_MODE))
31 #define FX_IS_USER_MODE (FALSE)
32 #define FX_IS_KERNEL_MODE (TRUE)
33 #endif
34 
35 /*
36 extern "C" {
37 #include <ntddk.h>
38 #include "wdf.h"
39 }
40 
41 #define WDF_REGISTRY_BASE_PATH L"\\Registry\\Machine\\System\\CurrentControlSet\\Control\\Wdf"
42 
43 */
44 
45 extern "C" {
46 #include "mx.h"
47 }
48 
49 #include "fxmin.hpp"
50 
51 #include "wdfmemory.h"
52 #include "wdfrequest.h"
53 #include "wdfdevice.h"
54 // #include "wdfdevicepri.h"
55 // #include "wdfiotargetpri.h"
56 #include "wdfwmi.h"
57 #include "wdfchildlist.h"
58 #include "wdfpdo.h"
59 #include "wdffdo.h"
60 #include "wdfiotarget.h"
61 #include "wdfcontrol.h"
62 #include "wdfcx.h"
63 #include "wdfio.h"
64 #include "wdfqueryinterface.h"
65 // #include "wdftriage.h"
66 
67 #if (FX_CORE_MODE == FX_CORE_USER_MODE)
68 #include "fxirpum.hpp"
69 #else
70 #include "fxirpkm.hpp"
71 #endif
72 
73 // <FxSystemWorkItem.hpp>
74 typedef
75 VOID
78  );
79 
80 #include "fxirpqueue.hpp"
81 
82 
83 // </FxSystemWorkItem.hpp>
84 
85 
86 #include "fxprobeandlock.h"
87 #include "fxpackage.hpp"
88 #include "fxcollection.hpp"
89 #include "fxdeviceinitshared.hpp"
90 
91 #include "ifxmemory.hpp"
92 #include "fxcallback.hpp"
93 #include "fxrequestcontext.hpp"
94 #include "fxrequestcontexttypes.h"
95 #include "fxrequestbase.hpp"
96 #include "fxmemoryobject.hpp"
97 #include "fxmemorybuffer.hpp"
98 
100 
102 
103 #include "fxtransactionedlist.hpp"
104 
105 //
106 // MERGE temp: We may not need these include files here,
107 // temporarily including them to verify they compile in shared code
108 //
110 #include "fxrequestcallbacks.hpp"
111 
112 // support
113 #include "stringutil.hpp"
114 #include "fxautostring.hpp"
115 #include "fxstring.hpp"
116 #include "fxdevicetext.hpp"
117 #include "fxcallback.hpp"
118 #include "fxdisposelist.hpp"
119 #include "fxsystemthread.hpp"
120 
121 #include "fxirppreprocessinfo.hpp"
122 #include "fxpnpcallbacks.hpp"
123 
124 // device init
125 #include "fxcxdeviceinit.hpp"
126 #include "fxcxdeviceinfo.hpp"
127 #include "fxdeviceinit.hpp"
128 
129 #include "fxdevicetomxinterface.hpp"
130 
131 // request
132 #include "fxrequestmemory.hpp"
133 #include "fxrequest.hpp"
134 #include "fxrequestbuffer.hpp"
135 #include "fxsyncrequest.hpp"
136 
137 // io target
138 #include "fxiotarget.hpp"
139 #include "fxiotargetself.hpp"
140 
141 #include "fxsystemworkitem.hpp"
142 #include "fxcallbackmutexlock.hpp"
143 #include "fxdriver.hpp"
144 
145 #include "fxdeviceinterface.hpp"
146 #include "fxqueryinterface.hpp"
147 
148 #include "fxcallbackspinlock.hpp"
149 #include "fxdefaultirphandler.hpp"
150 #include "fxwmiirphandler.hpp"
151 
152 // packages
153 #include "fxpkgio.hpp"
154 #include "fxpkgpnp.hpp"
155 #include "fxpkgfdo.hpp"
156 #include "fxpkgpdo.hpp"
157 #include "fxpkggeneral.hpp"
158 #include "fxfileobject.hpp"
159 #include "fxioqueue.hpp"
160 #include "fxdevice.hpp"
161 #include "fxtelemetry.hpp"
162 
163 #include "fxchildlist.hpp"
164 
165 #include "fxlookasidelist.hpp"
166 
167 /*#if FX_IS_KERNEL_MODE
168 #include "wdfrequest.h"
169 #endif*/
170 
171 //
172 // Versioning of structures for wdfdriver.h
173 //
174 typedef struct _WDF_DRIVER_CONFIG_V1_0 {
175  //
176  // Size of this structure in bytes
177  //
178  ULONG Size;
179 
180  //
181  // Event callbacks
182  //
184 
186 
187  //
188  // Combination of WDF_DRIVER_INIT_FLAGS values
189  //
191 
193 
194 //
195 // Versioning of structures for wdfdriver.h
196 //
197 typedef struct _WDF_DRIVER_CONFIG_V1_1 {
198  //
199  // Size of this structure in bytes
200  //
201  ULONG Size;
202 
203  //
204  // Event callbacks
205  //
207 
209 
210  //
211  // Combination of WDF_DRIVER_INIT_FLAGS values
212  //
214 
216 
217 
219  //
220  // Size of this structure in bytes
221  //
222  ULONG Size;
223 
224  //
225  // Indicates whether the device can wake itself up while the machine is in
226  // S0.
227  //
229 
230  //
231  // The low power state in which the device will be placed when it is idled
232  // out while the machine is in S0.
233  //
235 
236  //
237  // Amount of time the device must be idle before idling out. Timeout is in
238  // milliseconds.
239  //
241 
242  //
243  // Inidcates whether a user can control the idle policy of the device.
244  // By default, a user is allowed to change the policy.
245  //
247 
248  //
249  // If WdfTrue, idling out while the machine is in S0 will be enabled.
250  //
251  // If WdfFalse, idling out will be disabled.
252  //
253  // If WdfUseDefault, the idling out will be enabled. If
254  // UserControlOfIdleSettings is set to IdleAllowUserControl, the user's
255  // settings will override the default.
256  //
258 
259  //
260  // This field is applicable only when IdleCaps == IdleCannotWakeFromS0
261  // If WdfTrue,device is powered up on System Wake even if device is idle
262  // If WdfFalse, device is not powered up on system wake if it is idle
263  // If WdfUseDefault, the behavior is same as WdfFalse
264  //
266 
268 
270  //
271  // Size of this structure in bytes
272  //
273  ULONG Size;
274 
275  //
276  // Indicates whether the device can wake itself up while the machine is in
277  // S0.
278  //
280 
281  //
282  // The low power state in which the device will be placed when it is idled
283  // out while the machine is in S0.
284  //
286 
287  //
288  // Amount of time the device must be idle before idling out. Timeout is in
289  // milliseconds.
290  //
292 
293  //
294  // Inidcates whether a user can control the idle policy of the device.
295  // By default, a user is allowed to change the policy.
296  //
298 
299  //
300  // If WdfTrue, idling out while the machine is in S0 will be enabled.
301  //
302  // If WdfFalse, idling out will be disabled.
303  //
304  // If WdfUseDefault, the idling out will be enabled. If
305  // UserControlOfIdleSettings is set to IdleAllowUserControl, the user's
306  // settings will override the default.
307  //
309 
311 
313  //
314  // Size of this structure in bytes
315  //
316  ULONG Size;
317 
318  //
319  // The low power state in which the device will be placed when it is armed
320  // for wake from Sx.
321  //
323 
324  //
325  // Inidcates whether a user can control the idle policy of the device.
326  // By default, a user is allowed to change the policy.
327  //
329 
330  //
331  // If WdfTrue, arming the device for wake while the machine is in Sx is
332  // enabled.
333  //
334  // If WdfFalse, arming the device for wake while the machine is in Sx is
335  // disabled.
336  //
337  // If WdfUseDefault, arming will be enabled. If UserControlOfWakeSettings
338  // is set to WakeAllowUserControl, the user's settings will override the
339  // default.
340  //
342 
344 
345 //
346 // Versioning of structures for wdftimer.h
347 //
348 typedef struct _WDF_TIMER_CONFIG_V1_7 {
349  ULONG Size;
350 
352 
353  LONG Period;
354 
355  //
356  // If this is TRUE, the Timer will automatically serialize
357  // with the event callback handlers of its Parent Object.
358  //
359  // Parent Object's callback constraints should be compatible
360  // with the Timer DPC (DISPATCH_LEVEL), or the request will fail.
361  //
363 
365 
366 typedef struct _WDF_TIMER_CONFIG_V1_11 {
367  ULONG Size;
368 
370 
371  ULONG Period;
372 
373  //
374  // If this is TRUE, the Timer will automatically serialize
375  // with the event callback handlers of its Parent Object.
376  //
377  // Parent Object's callback constraints should be compatible
378  // with the Timer DPC (DISPATCH_LEVEL), or the request will fail.
379  //
381 
382  //
383  // Optional tolerance for the timer in milliseconds.
384  //
386 
388 
PFN_WDF_DRIVER_DEVICE_ADD EvtDriverDeviceAdd
Definition: wdf10.h:919
#define IN
Definition: typedefs.h:39
WDF_POWER_POLICY_SX_WAKE_USER_CONTROL UserControlOfWakeSettings
Definition: wdf15.h:705
struct _WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS_V1_7 WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS_V1_7
WDF_POWER_POLICY_S0_IDLE_USER_CONTROL UserControlOfIdleSettings
Definition: wdf17.h:676
WDF_POWER_POLICY_S0_IDLE_USER_CONTROL UserControlOfIdleSettings
Definition: wdf19.h:787
PFN_WDF_TIMER EvtTimerFunc
Definition: wdf17.h:1778
enum _WDF_TRI_STATE WDF_TRI_STATE
EVT_WDF_DRIVER_DEVICE_ADD * PFN_WDF_DRIVER_DEVICE_ADD
Definition: wdfdriver.h:78
EVT_SYSTEMWORKITEM * PFN_WDF_SYSTEMWORKITEM
struct _WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS_V1_9 * PWDF_DEVICE_POWER_POLICY_IDLE_SETTINGS_V1_9
WDF_POWER_POLICY_S0_IDLE_CAPABILITIES IdleCaps
Definition: wdf19.h:769
_In_ PVOID Parameter
Definition: ldrtypes.h:241
BOOLEAN AutomaticSerialization
Definition: wdf111.h:2281
struct _WDF_TIMER_CONFIG_V1_7 * PWDF_TIMER_CONFIG_V1_7
struct _WDF_DRIVER_CONFIG_V1_0 WDF_DRIVER_CONFIG_V1_0
EVT_WDF_TIMER * PFN_WDF_TIMER
Definition: wdftimer.h:67
enum _WDF_POWER_POLICY_S0_IDLE_USER_CONTROL WDF_POWER_POLICY_S0_IDLE_USER_CONTROL
struct _WDF_DRIVER_CONFIG_V1_1 WDF_DRIVER_CONFIG_V1_1
WDF_POWER_POLICY_S0_IDLE_CAPABILITIES IdleCaps
Definition: wdf17.h:658
long LONG
Definition: pedump.c:60
struct _WDF_TIMER_CONFIG_V1_7 WDF_TIMER_CONFIG_V1_7
EVT_WDF_DRIVER_UNLOAD * PFN_WDF_DRIVER_UNLOAD
Definition: wdfdriver.h:91
struct _WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS_V1_7 * PWDF_DEVICE_POWER_POLICY_IDLE_SETTINGS_V1_7
struct _WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS_V1_9 WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS_V1_9
enum _WDF_POWER_POLICY_SX_WAKE_USER_CONTROL WDF_POWER_POLICY_SX_WAKE_USER_CONTROL
unsigned char BOOLEAN
PFN_WDF_DRIVER_DEVICE_ADD EvtDriverDeviceAdd
Definition: wdf11.h:934
enum _WDF_POWER_POLICY_S0_IDLE_CAPABILITIES WDF_POWER_POLICY_S0_IDLE_CAPABILITIES
struct _WDF_DEVICE_POWER_POLICY_WAKE_SETTINGS_V1_5 * PWDF_DEVICE_POWER_POLICY_WAKE_SETTINGS_V1_5
enum _DEVICE_POWER_STATE DEVICE_POWER_STATE
BOOLEAN AutomaticSerialization
Definition: wdf17.h:1789
struct _WDF_TIMER_CONFIG_V1_11 WDF_TIMER_CONFIG_V1_11
PFN_WDF_TIMER EvtTimerFunc
Definition: wdf111.h:2270
#define VOID
Definition: acefi.h:82
PFN_WDF_DRIVER_UNLOAD EvtDriverUnload
Definition: wdf10.h:921
PFN_WDF_DRIVER_UNLOAD EvtDriverUnload
Definition: wdf11.h:936
struct _WDF_TIMER_CONFIG_V1_11 * PWDF_TIMER_CONFIG_V1_11
unsigned int ULONG
Definition: retypes.h:1
struct _WDF_DEVICE_POWER_POLICY_WAKE_SETTINGS_V1_5 WDF_DEVICE_POWER_POLICY_WAKE_SETTINGS_V1_5
struct _WDF_DRIVER_CONFIG_V1_1 * PWDF_DRIVER_CONFIG_V1_1
struct _WDF_DRIVER_CONFIG_V1_0 * PWDF_DRIVER_CONFIG_V1_0