FsRtlIsNtstatusExpected fixed (Bo Branten reported the bug).
[reactos.git] / reactos / ntoskrnl / fs / util.c
1 /* $Id: util.c,v 1.9 2002/01/17 23:17:39 ea Exp $
2 *
3 * reactos/ntoskrnl/fs/util.c
4 *
5 */
6 #include <ntos.h>
7 #include <ddk/ntifs.h>
8
9
10 /**********************************************************************
11 * NAME EXPORTED
12 * FsRtlIsTotalDeviceFailure@4
13 *
14 * DESCRIPTION
15 * Check if an NTSTATUS error code represents a
16 * disk hardware failure.
17 *
18 * ARGUMENTS
19 * NtStatus
20 * NTSTATUS to test.
21 *
22 * RETURN VALUE
23 * FALSE if either (NtStatus >= STATUS_SUCCESS),
24 * STATUS_CRC_ERROR, STATUS_DEVICE_DATA_ERROR;
25 * TRUE otherwise.
26 *
27 */
28 BOOLEAN
29 STDCALL
30 FsRtlIsTotalDeviceFailure (
31 IN NTSTATUS NtStatus
32 )
33 {
34 return (
35 (NT_SUCCESS(NtStatus))
36 || (STATUS_CRC_ERROR == NtStatus)
37 || (STATUS_DEVICE_DATA_ERROR == NtStatus)
38 ? FALSE
39 : TRUE
40 );
41 }
42
43
44 /**********************************************************************
45 * NAME EXPORTED
46 * FsRtlIsNtstatusExpected/1
47 * stack32 = 4
48 *
49 * DESCRIPTION
50 * Check an NTSTATUS value is expected by the FS kernel
51 * subsystem.
52 *
53 * ARGUMENTS
54 * NtStatus
55 * NTSTATUS to test.
56 *
57 * RETURN VALUE
58 * TRUE if NtStatus is NOT one out of:
59 * - STATUS_ACCESS_VIOLATION
60 * - STATUS_ILLEGAL_INSTRUCTION
61 * - STATUS_DATATYPE_MISALIGNMENT
62 * - STATUS_INSTRUCTION_MISALIGNMENT
63 * which are the forbidden return stati in the FsRtl
64 * subsystem; FALSE otherwise.
65 *
66 * REVISIONS
67 * 2002-01-17 Fixed a bad bug reported by Bo Brantén.
68 * Up to version 1.8, this function's semantics was
69 * exactly the opposite! Thank you Bo.
70 */
71 BOOLEAN
72 STDCALL
73 FsRtlIsNtstatusExpected (
74 IN NTSTATUS NtStatus
75 )
76 {
77 return (
78 (STATUS_DATATYPE_MISALIGNMENT == NtStatus)
79 || (STATUS_ACCESS_VIOLATION == NtStatus)
80 || (STATUS_ILLEGAL_INSTRUCTION == NtStatus)
81 || (STATUS_INSTRUCTION_MISALIGNMENT == NtStatus)
82 )
83 ? FALSE
84 : TRUE;
85 }
86
87
88 /**********************************************************************
89 * NAME EXPORTED
90 * FsRtlNormalizeNtstatus@8
91 *
92 * DESCRIPTION
93 * Normalize an NTSTATUS value for using in the FS subsystem.
94 *
95 * ARGUMENTS
96 * NtStatusToNormalize
97 * NTSTATUS to normalize.
98 * NormalizedNtStatus
99 * NTSTATUS to return if the NtStatusToNormalize
100 * value is unexpected by the FS kernel subsystem.
101 *
102 * RETURN VALUE
103 * NtStatusToNormalize if it is an expected value,
104 * otherwise NormalizedNtStatus.
105 */
106 NTSTATUS
107 STDCALL
108 FsRtlNormalizeNtstatus (
109 IN NTSTATUS NtStatusToNormalize,
110 IN NTSTATUS NormalizedNtStatus
111 )
112 {
113 return
114 (TRUE == FsRtlIsNtstatusExpected(NtStatusToNormalize))
115 ? NtStatusToNormalize
116 : NormalizedNtStatus;
117 }
118
119
120 /**********************************************************************
121 * Miscellanea (they may fit somewhere else)
122 *********************************************************************/
123
124
125 /**********************************************************************
126 * NAME EXPORTED
127 * FsRtlAllocateResource@0
128 *
129 * DESCRIPTION
130 *
131 * ARGUMENTS
132 *
133 * RETURN VALUE
134 *
135 */
136 DWORD
137 STDCALL
138 FsRtlAllocateResource (VOID)
139 {
140 return 0;
141 }
142
143
144 /**********************************************************************
145 * NAME EXPORTED
146 * FsRtlBalanceReads@4
147 *
148 * DESCRIPTION
149 *
150 * ARGUMENTS
151 *
152 * RETURN VALUE
153 *
154 */
155 DWORD
156 STDCALL
157 FsRtlBalanceReads (
158 DWORD Unknown0
159 )
160 {
161 return 0;
162 }
163
164
165 /**********************************************************************
166 * NAME EXPORTED
167 * FsRtlCopyRead@32
168 *
169 * DESCRIPTION
170 *
171 * ARGUMENTS
172 *
173 * RETURN VALUE
174 *
175 * NOTE
176 * From Bo Branten's ntifs.h v12.
177 *
178 */
179 BOOLEAN
180 STDCALL
181 FsRtlCopyRead (
182 IN PFILE_OBJECT FileObject,
183 IN PLARGE_INTEGER FileOffset,
184 IN ULONG Length,
185 IN BOOLEAN Wait,
186 IN ULONG LockKey,
187 OUT PVOID Buffer,
188 OUT PIO_STATUS_BLOCK IoStatus,
189 IN PDEVICE_OBJECT DeviceObject
190 )
191 {
192 return FALSE;
193 }
194
195
196 /**********************************************************************
197 * NAME EXPORTED
198 * FsRtlCopyWrite@32
199 *
200 * DESCRIPTION
201 *
202 * ARGUMENTS
203 *
204 * RETURN VALUE
205 *
206 * NOTE
207 * From Bo Branten's ntifs.h v12.
208 */
209 BOOLEAN
210 STDCALL
211 FsRtlCopyWrite (
212 IN PFILE_OBJECT FileObject,
213 IN PLARGE_INTEGER FileOffset,
214 IN ULONG Length,
215 IN BOOLEAN Wait,
216 IN ULONG LockKey,
217 IN PVOID Buffer,
218 OUT PIO_STATUS_BLOCK IoStatus,
219 IN PDEVICE_OBJECT DeviceObject
220 )
221 {
222 return FALSE;
223 }
224
225
226 /**********************************************************************
227 * NAME EXPORTED
228 * FsRtlGetFileSize@8
229 *
230 * DESCRIPTION
231 *
232 * ARGUMENTS
233 *
234 * RETURN VALUE
235 *
236 */
237 NTSTATUS
238 STDCALL
239 FsRtlGetFileSize (
240 IN PFILE_OBJECT FileObject,
241 IN OUT PLARGE_INTEGER FileSize
242 )
243 {
244 return STATUS_NOT_IMPLEMENTED;
245 }
246
247
248 /**********************************************************************
249 * NAME EXPORTED
250 * FsRtlPostPagingFileStackOverflow@12
251 *
252 * DESCRIPTION
253 *
254 * ARGUMENTS
255 *
256 * RETURN VALUE
257 *
258 */
259 VOID
260 STDCALL
261 FsRtlPostPagingFileStackOverflow (
262 DWORD Unknown0,
263 DWORD Unknown1,
264 DWORD Unknown2
265 )
266 {
267 }
268
269
270 /**********************************************************************
271 * NAME EXPORTED
272 * FsRtlPostStackOverflow@12
273 *
274 * DESCRIPTION
275 *
276 * ARGUMENTS
277 *
278 * RETURN VALUE
279 *
280 */
281 VOID
282 STDCALL
283 FsRtlPostStackOverflow (
284 DWORD Unknown0,
285 DWORD Unknown1,
286 DWORD Unknown2
287 )
288 {
289 }
290
291
292 /**********************************************************************
293 * NAME EXPORTED
294 * FsRtlSyncVolumes@12
295 *
296 * DESCRIPTION
297 * Obsolete function.
298 *
299 * ARGUMENTS
300 *
301 * RETURN VALUE
302 * It always returns STATUS_SUCCESS.
303 */
304 NTSTATUS
305 STDCALL
306 FsRtlSyncVolumes (
307 DWORD Unknown0,
308 DWORD Unknown1,
309 DWORD Unknown2
310 )
311 {
312 return STATUS_SUCCESS;
313 }
314
315
316 /* EOF */
317