1 /*++
2
3 Copyright (c) Microsoft Corporation. All rights reserved.
4
5 _WdfVersionBuild_
6
7 Module Name:
8
9 wdfcore.h
10
11 Abstract:
12
13 This is the main driver framework.
14
15 Environment:
16
17 kernel mode only
18
19 Revision History:
20
21 --*/
22
23 //
24 // NOTE: This header is generated by stubwork. Please make any
25 // modifications to the corresponding template files
26 // (.x or .y) and use stubwork to regenerate the header
27 //
28
29 #ifndef _WDFCORE_H_
30 #define _WDFCORE_H_
31
32 #ifndef WDF_EXTERN_C
33 #ifdef __cplusplus
34 #define WDF_EXTERN_C extern "C"
35 #define WDF_EXTERN_C_START extern "C" {
36 #define WDF_EXTERN_C_END }
37 #else
38 #define WDF_EXTERN_C
39 #define WDF_EXTERN_C_START
40 #define WDF_EXTERN_C_END
41 #endif
42 #endif
43
44 WDF_EXTERN_C_START
45
46
47
48 #if (NTDDI_VERSION >= NTDDI_WIN2K)
49
50
51
52 //
53 // Time conversion related macros
54 //
55 // to to to
56 // us ms sec
57 #define WDF_TIMEOUT_TO_SEC ((LONGLONG) 1 * 10 * 1000 * 1000)
58 #define WDF_TIMEOUT_TO_MS ((LONGLONG) 1 * 10 * 1000)
59 #define WDF_TIMEOUT_TO_US ((LONGLONG) 1 * 10)
60 FORCEINLINE
61 LONGLONG
WDF_REL_TIMEOUT_IN_SEC(_In_ ULONGLONG Time)62 WDF_REL_TIMEOUT_IN_SEC(
63 _In_ ULONGLONG Time
64 )
65 {
66 return Time * -1 * WDF_TIMEOUT_TO_SEC;
67 }
68
69 FORCEINLINE
70 LONGLONG
WDF_ABS_TIMEOUT_IN_SEC(_In_ ULONGLONG Time)71 WDF_ABS_TIMEOUT_IN_SEC(
72 _In_ ULONGLONG Time
73 )
74 {
75 return Time * 1 * WDF_TIMEOUT_TO_SEC;
76 }
77
78 FORCEINLINE
79 LONGLONG
WDF_REL_TIMEOUT_IN_MS(_In_ ULONGLONG Time)80 WDF_REL_TIMEOUT_IN_MS(
81 _In_ ULONGLONG Time
82 )
83 {
84 return Time * -1 * WDF_TIMEOUT_TO_MS;
85 }
86
87 FORCEINLINE
88 LONGLONG
WDF_ABS_TIMEOUT_IN_MS(_In_ ULONGLONG Time)89 WDF_ABS_TIMEOUT_IN_MS(
90 _In_ ULONGLONG Time
91 )
92 {
93 return Time * 1 * WDF_TIMEOUT_TO_MS;
94 }
95
96 FORCEINLINE
97 LONGLONG
WDF_REL_TIMEOUT_IN_US(_In_ ULONGLONG Time)98 WDF_REL_TIMEOUT_IN_US(
99 _In_ ULONGLONG Time
100 )
101 {
102 return Time * -1 * WDF_TIMEOUT_TO_US;
103 }
104
105 FORCEINLINE
106 LONGLONG
WDF_ABS_TIMEOUT_IN_US(_In_ ULONGLONG Time)107 WDF_ABS_TIMEOUT_IN_US(
108 _In_ ULONGLONG Time
109 )
110 {
111 return Time * 1 * WDF_TIMEOUT_TO_US;
112 }
113
114 //
115 // Rounding functions
116 //
117 FORCEINLINE
118 size_t
WDF_ALIGN_SIZE_DOWN(_In_ size_t Length,_In_ size_t AlignTo)119 WDF_ALIGN_SIZE_DOWN(
120 _In_ size_t Length,
121 _In_ size_t AlignTo
122 )
123 {
124 return Length & ~(AlignTo - 1);
125 }
126
127 FORCEINLINE
128 size_t
WDF_ALIGN_SIZE_UP(_In_ size_t Length,_In_ size_t AlignTo)129 WDF_ALIGN_SIZE_UP(
130 _In_ size_t Length,
131 _In_ size_t AlignTo
132 )
133 {
134 return WDF_ALIGN_SIZE_DOWN(Length + AlignTo - 1, AlignTo);
135 }
136
137
138 //
139 // Pointer math
140 //
141 #define WDF_PTR_ADD_OFFSET_TYPE(_ptr, _offset, _type) \
142 ((_type) (((PUCHAR) (_ptr)) + (_offset)))
143
144 #define WDF_PTR_ADD_OFFSET(_ptr, _offset) \
145 WDF_PTR_ADD_OFFSET_TYPE(_ptr, _offset, PVOID)
146
147 #define WDF_PTR_GET_OFFSET(_base, _addr) \
148 (size_t) (((PUCHAR) _addr) - ((PUCHAR) _base))
149
150 #if (OSVER(NTDDI_VERSION) == NTDDI_WIN2K)
151 //
152 // These definitions are necessary for building under a Win2K Environment.
153 //
154 #ifndef DECLARE_UNICODE_STRING_SIZE
155 #define DECLARE_UNICODE_STRING_SIZE(_var, _size) \
156 WCHAR _var ## _buffer[_size]; \
157 UNICODE_STRING _var = { 0, _size * sizeof(WCHAR) , _var ## _buffer }
158 #endif
159
160 #undef DECLARE_CONST_UNICODE_STRING
161 #define DECLARE_CONST_UNICODE_STRING(_variablename, _string) \
162 const WCHAR _variablename ## _buffer[] = _string; \
163 __pragma(warning(suppress:4204)) __pragma(warning(suppress:4221)) \
164 const UNICODE_STRING _variablename = { sizeof(_string) - sizeof(WCHAR), sizeof(_string), (PWSTR) _variablename ## _buffer }
165
166 #endif // (OSVER(NTDDI_VERSION) == NTDDI_WIN2K)
167
168
169
170 #endif // (NTDDI_VERSION >= NTDDI_WIN2K)
171
172
173 WDF_EXTERN_C_END
174
175 #endif // _WDFCORE_H_
176
177