xref: /reactos/sdk/include/wdf/kmdf/1.17/wdfsync.h (revision c8d07514)
1 /*++
2 
3 Copyright (c) Microsoft Corporation.  All rights reserved.
4 
5 _WdfVersionBuild_
6 
7 Module Name:
8 
9     wdfsync.h
10 
11 Abstract:
12 
13     This module contains contains the Windows Driver Framework synchronization
14     DDIs.
15 
16 Environment:
17 
18     kernel mode only
19 
20 Revision History:
21 
22 
23 --*/
24 
25 //
26 // NOTE: This header is generated by stubwork.  Please make any
27 //       modifications to the corresponding template files
28 //       (.x or .y) and use stubwork to regenerate the header
29 //
30 
31 #ifndef _WDFSYNC_H_
32 #define _WDFSYNC_H_
33 
34 #ifndef WDF_EXTERN_C
35   #ifdef __cplusplus
36     #define WDF_EXTERN_C       extern "C"
37     #define WDF_EXTERN_C_START extern "C" {
38     #define WDF_EXTERN_C_END   }
39   #else
40     #define WDF_EXTERN_C
41     #define WDF_EXTERN_C_START
42     #define WDF_EXTERN_C_END
43   #endif
44 #endif
45 
46 WDF_EXTERN_C_START
47 
48 
49 
50 #if (NTDDI_VERSION >= NTDDI_WIN2K)
51 
52 
53 
54 //
55 // WDF Function: WdfObjectAcquireLock
56 //
57 typedef
58 _IRQL_requires_max_(DISPATCH_LEVEL)
59 WDFAPI
60 VOID
61 (STDCALL *PFN_WDFOBJECTACQUIRELOCK)(
62     _In_
63     PWDF_DRIVER_GLOBALS DriverGlobals,
64     _In_
65     _Requires_lock_not_held_(_Curr_)
66     _Acquires_lock_(_Curr_)
67     WDFOBJECT Object
68     );
69 
70 _IRQL_requires_max_(DISPATCH_LEVEL)
71 FORCEINLINE
72 VOID
73 WdfObjectAcquireLock(
74     _In_
75     _Requires_lock_not_held_(_Curr_)
76     _Acquires_lock_(_Curr_)
77     WDFOBJECT Object
78     )
79 {
80     ((PFN_WDFOBJECTACQUIRELOCK) WdfFunctions[WdfObjectAcquireLockTableIndex])(WdfDriverGlobals, Object);
81 }
82 
83 //
84 // WDF Function: WdfObjectReleaseLock
85 //
86 typedef
87 _IRQL_requires_max_(DISPATCH_LEVEL)
88 WDFAPI
89 VOID
90 (STDCALL *PFN_WDFOBJECTRELEASELOCK)(
91     _In_
92     PWDF_DRIVER_GLOBALS DriverGlobals,
93     _In_
94     _Requires_lock_held_(_Curr_)
95     _Releases_lock_(_Curr_)
96     WDFOBJECT Object
97     );
98 
99 _IRQL_requires_max_(DISPATCH_LEVEL)
100 FORCEINLINE
101 VOID
102 WdfObjectReleaseLock(
103     _In_
104     _Requires_lock_held_(_Curr_)
105     _Releases_lock_(_Curr_)
106     WDFOBJECT Object
107     )
108 {
109     ((PFN_WDFOBJECTRELEASELOCK) WdfFunctions[WdfObjectReleaseLockTableIndex])(WdfDriverGlobals, Object);
110 }
111 
112 //
113 // WDF Function: WdfWaitLockCreate
114 //
115 typedef
116 _Must_inspect_result_
117 _IRQL_requires_max_(DISPATCH_LEVEL)
118 WDFAPI
119 NTSTATUS
120 (STDCALL *PFN_WDFWAITLOCKCREATE)(
121     _In_
122     PWDF_DRIVER_GLOBALS DriverGlobals,
123     _In_opt_
124     PWDF_OBJECT_ATTRIBUTES LockAttributes,
125     _Out_
126     WDFWAITLOCK* Lock
127     );
128 
129 _Must_inspect_result_
130 _IRQL_requires_max_(DISPATCH_LEVEL)
131 FORCEINLINE
132 NTSTATUS
133 WdfWaitLockCreate(
134     _In_opt_
135     PWDF_OBJECT_ATTRIBUTES LockAttributes,
136     _Out_
137     WDFWAITLOCK* Lock
138     )
139 {
140     return ((PFN_WDFWAITLOCKCREATE) WdfFunctions[WdfWaitLockCreateTableIndex])(WdfDriverGlobals, LockAttributes, Lock);
141 }
142 
143 //
144 // WDF Function: WdfWaitLockAcquire
145 //
146 typedef
147 _When_(Timeout == NULL, _IRQL_requires_max_(PASSIVE_LEVEL))
148 _When_(Timeout != NULL && *Timeout == 0, _IRQL_requires_max_(DISPATCH_LEVEL))
149 _When_(Timeout != NULL && *Timeout != 0, _IRQL_requires_max_(PASSIVE_LEVEL))
150 _Always_(_When_(Timeout == NULL, _Acquires_lock_(Lock)))
151 _When_(Timeout != NULL && return == STATUS_SUCCESS, _Acquires_lock_(Lock))
152 _When_(Timeout != NULL, _Must_inspect_result_)
153 WDFAPI
154 NTSTATUS
155 (STDCALL *PFN_WDFWAITLOCKACQUIRE)(
156     _In_
157     PWDF_DRIVER_GLOBALS DriverGlobals,
158     _In_
159     _Requires_lock_not_held_(_Curr_)
160     WDFWAITLOCK Lock,
161     _In_opt_
162     PLONGLONG Timeout
163     );
164 
165 _When_(Timeout == NULL, _IRQL_requires_max_(PASSIVE_LEVEL))
166 _When_(Timeout != NULL && *Timeout == 0, _IRQL_requires_max_(DISPATCH_LEVEL))
167 _When_(Timeout != NULL && *Timeout != 0, _IRQL_requires_max_(PASSIVE_LEVEL))
168 _Always_(_When_(Timeout == NULL, _Acquires_lock_(Lock)))
169 _When_(Timeout != NULL && return == STATUS_SUCCESS, _Acquires_lock_(Lock))
170 _When_(Timeout != NULL, _Must_inspect_result_)
171 FORCEINLINE
172 NTSTATUS
173 WdfWaitLockAcquire(
174     _In_
175     _Requires_lock_not_held_(_Curr_)
176     WDFWAITLOCK Lock,
177     _In_opt_
178     PLONGLONG Timeout
179     )
180 {
181     return ((PFN_WDFWAITLOCKACQUIRE) WdfFunctions[WdfWaitLockAcquireTableIndex])(WdfDriverGlobals, Lock, Timeout);
182 }
183 
184 //
185 // WDF Function: WdfWaitLockRelease
186 //
187 typedef
188 _IRQL_requires_max_(DISPATCH_LEVEL)
189 WDFAPI
190 VOID
191 (STDCALL *PFN_WDFWAITLOCKRELEASE)(
192     _In_
193     PWDF_DRIVER_GLOBALS DriverGlobals,
194     _In_
195     _Requires_lock_held_(_Curr_)
196     _Releases_lock_(_Curr_)
197     WDFWAITLOCK Lock
198     );
199 
200 _IRQL_requires_max_(DISPATCH_LEVEL)
201 FORCEINLINE
202 VOID
203 WdfWaitLockRelease(
204     _In_
205     _Requires_lock_held_(_Curr_)
206     _Releases_lock_(_Curr_)
207     WDFWAITLOCK Lock
208     )
209 {
210     ((PFN_WDFWAITLOCKRELEASE) WdfFunctions[WdfWaitLockReleaseTableIndex])(WdfDriverGlobals, Lock);
211 }
212 
213 //
214 // WDF Function: WdfSpinLockCreate
215 //
216 typedef
217 _Must_inspect_result_
218 _IRQL_requires_max_(DISPATCH_LEVEL)
219 WDFAPI
220 NTSTATUS
221 (STDCALL *PFN_WDFSPINLOCKCREATE)(
222     _In_
223     PWDF_DRIVER_GLOBALS DriverGlobals,
224     _In_opt_
225     PWDF_OBJECT_ATTRIBUTES SpinLockAttributes,
226     _Out_
227     WDFSPINLOCK* SpinLock
228     );
229 
230 _Must_inspect_result_
231 _IRQL_requires_max_(DISPATCH_LEVEL)
232 FORCEINLINE
233 NTSTATUS
234 WdfSpinLockCreate(
235     _In_opt_
236     PWDF_OBJECT_ATTRIBUTES SpinLockAttributes,
237     _Out_
238     WDFSPINLOCK* SpinLock
239     )
240 {
241     return ((PFN_WDFSPINLOCKCREATE) WdfFunctions[WdfSpinLockCreateTableIndex])(WdfDriverGlobals, SpinLockAttributes, SpinLock);
242 }
243 
244 //
245 // WDF Function: WdfSpinLockAcquire
246 //
247 typedef
248 _IRQL_requires_max_(DISPATCH_LEVEL)
249 _IRQL_raises_(DISPATCH_LEVEL)
250 WDFAPI
251 VOID
252 (STDCALL *PFN_WDFSPINLOCKACQUIRE)(
253     _In_
254     PWDF_DRIVER_GLOBALS DriverGlobals,
255     _In_
256     _Requires_lock_not_held_(_Curr_)
257     _Acquires_lock_(_Curr_)
258     _IRQL_saves_
259     WDFSPINLOCK SpinLock
260     );
261 
262 _IRQL_requires_max_(DISPATCH_LEVEL)
263 _IRQL_raises_(DISPATCH_LEVEL)
264 FORCEINLINE
265 VOID
266 WdfSpinLockAcquire(
267     _In_
268     _Requires_lock_not_held_(_Curr_)
269     _Acquires_lock_(_Curr_)
270     _IRQL_saves_
271     WDFSPINLOCK SpinLock
272     )
273 {
274     ((PFN_WDFSPINLOCKACQUIRE) WdfFunctions[WdfSpinLockAcquireTableIndex])(WdfDriverGlobals, SpinLock);
275 }
276 
277 //
278 // WDF Function: WdfSpinLockRelease
279 //
280 typedef
281 _IRQL_requires_max_(DISPATCH_LEVEL)
282 _IRQL_requires_min_(DISPATCH_LEVEL)
283 WDFAPI
284 VOID
285 (STDCALL *PFN_WDFSPINLOCKRELEASE)(
286     _In_
287     PWDF_DRIVER_GLOBALS DriverGlobals,
288     _In_
289     _Requires_lock_held_(_Curr_)
290     _Releases_lock_(_Curr_)
291     _IRQL_restores_
292     WDFSPINLOCK SpinLock
293     );
294 
295 _IRQL_requires_max_(DISPATCH_LEVEL)
296 _IRQL_requires_min_(DISPATCH_LEVEL)
297 FORCEINLINE
298 VOID
299 WdfSpinLockRelease(
300     _In_
301     _Requires_lock_held_(_Curr_)
302     _Releases_lock_(_Curr_)
303     _IRQL_restores_
304     WDFSPINLOCK SpinLock
305     )
306 {
307     ((PFN_WDFSPINLOCKRELEASE) WdfFunctions[WdfSpinLockReleaseTableIndex])(WdfDriverGlobals, SpinLock);
308 }
309 
310 
311 
312 #endif // (NTDDI_VERSION >= NTDDI_WIN2K)
313 
314 
315 WDF_EXTERN_C_END
316 
317 #endif // _WDFSYNC_H_
318 
319