Fix FsRtl function prototypes
[reactos.git] / reactos / ntoskrnl / fs / util.c
1 /* $Id$
2 *
3 * reactos/ntoskrnl/fs/util.c
4 *
5 */
6
7 #include <ntoskrnl.h>
8 #define NDEBUG
9 #include <internal/debug.h>
10
11 /**********************************************************************
12 * NAME EXPORTED
13 * FsRtlIsTotalDeviceFailure@4
14 *
15 * DESCRIPTION
16 * Check if an NTSTATUS error code represents a
17 * disk hardware failure.
18 *
19 * ARGUMENTS
20 * NtStatus
21 * NTSTATUS to test.
22 *
23 * RETURN VALUE
24 * FALSE if either (NtStatus >= STATUS_SUCCESS),
25 * STATUS_CRC_ERROR, STATUS_DEVICE_DATA_ERROR;
26 * TRUE otherwise.
27 *
28 * @implemented
29 */
30 BOOLEAN
31 STDCALL
32 FsRtlIsTotalDeviceFailure (
33 IN NTSTATUS NtStatus
34 )
35 {
36 return (
37 (NT_SUCCESS(NtStatus))
38 || (STATUS_CRC_ERROR == NtStatus)
39 || (STATUS_DEVICE_DATA_ERROR == NtStatus)
40 ? FALSE
41 : TRUE
42 );
43 }
44
45
46 /**********************************************************************
47 * NAME EXPORTED
48 * FsRtlIsNtstatusExpected/1
49 * stack32 = 4
50 *
51 * DESCRIPTION
52 * Check an NTSTATUS value is expected by the FS kernel
53 * subsystem.
54 *
55 * ARGUMENTS
56 * NtStatus
57 * NTSTATUS to test.
58 *
59 * RETURN VALUE
60 * TRUE if NtStatus is NOT one out of:
61 * - STATUS_ACCESS_VIOLATION
62 * - STATUS_ILLEGAL_INSTRUCTION
63 * - STATUS_DATATYPE_MISALIGNMENT
64 * - STATUS_INSTRUCTION_MISALIGNMENT
65 * which are the forbidden return stati in the FsRtl
66 * subsystem; FALSE otherwise.
67 *
68 * REVISIONS
69 * 2002-01-17 Fixed a bad bug reported by Bo Brantén.
70 * Up to version 1.8, this function's semantics was
71 * exactly the opposite! Thank you Bo.
72 *
73 * @implemented
74 */
75 BOOLEAN
76 STDCALL
77 FsRtlIsNtstatusExpected (
78 IN NTSTATUS NtStatus
79 )
80 {
81 return (
82 (STATUS_DATATYPE_MISALIGNMENT == NtStatus)
83 || (STATUS_ACCESS_VIOLATION == NtStatus)
84 || (STATUS_ILLEGAL_INSTRUCTION == NtStatus)
85 || (STATUS_INSTRUCTION_MISALIGNMENT == NtStatus)
86 )
87 ? FALSE
88 : TRUE;
89 }
90
91 /*
92 * @unimplemented
93 */
94 ULONG
95 FsRtlIsPagingFile (
96 IN PFILE_OBJECT FileObject
97 )
98 {
99 UNIMPLEMENTED;
100 return 0;
101 }
102
103
104 /**********************************************************************
105 * NAME EXPORTED
106 * FsRtlNormalizeNtstatus@8
107 *
108 * DESCRIPTION
109 * Normalize an NTSTATUS value for using in the FS subsystem.
110 *
111 * ARGUMENTS
112 * NtStatusToNormalize
113 * NTSTATUS to normalize.
114 * NormalizedNtStatus
115 * NTSTATUS to return if the NtStatusToNormalize
116 * value is unexpected by the FS kernel subsystem.
117 *
118 * RETURN VALUE
119 * NtStatusToNormalize if it is an expected value,
120 * otherwise NormalizedNtStatus.
121 *
122 * @implemented
123 */
124 NTSTATUS
125 STDCALL
126 FsRtlNormalizeNtstatus (
127 IN NTSTATUS NtStatusToNormalize,
128 IN NTSTATUS NormalizedNtStatus
129 )
130 {
131 return
132 (TRUE == FsRtlIsNtstatusExpected(NtStatusToNormalize))
133 ? NtStatusToNormalize
134 : NormalizedNtStatus;
135 }
136
137
138 /**********************************************************************
139 * Miscellanea (they may fit somewhere else)
140 *********************************************************************/
141
142
143 /**********************************************************************
144 * NAME EXPORTED
145 * FsRtlAllocateResource@0
146 *
147 * DESCRIPTION
148 *
149 * ARGUMENTS
150 *
151 * RETURN VALUE
152 *
153 *
154 * @unimplemented
155 */
156 DWORD
157 STDCALL
158 FsRtlAllocateResource (VOID)
159 {
160 UNIMPLEMENTED;
161 return STATUS_NOT_IMPLEMENTED;
162 }
163
164
165 /**********************************************************************
166 * NAME EXPORTED
167 * FsRtlBalanceReads@4
168 *
169 * DESCRIPTION
170 *
171 * ARGUMENTS
172 *
173 * RETURN VALUE
174 *
175 *
176 * @unimplemented
177 */
178 NTSTATUS
179 STDCALL
180 FsRtlBalanceReads (PDEVICE_OBJECT TargetDevice)
181 {
182 UNIMPLEMENTED;
183 return STATUS_NOT_IMPLEMENTED;
184 }
185
186
187 /**********************************************************************
188 * NAME EXPORTED
189 * FsRtlCopyRead@32
190 *
191 * DESCRIPTION
192 *
193 * ARGUMENTS
194 *
195 * RETURN VALUE
196 *
197 * NOTE
198 * From Bo Branten's ntifs.h v12.
199 *
200 * @unimplemented
201 */
202 BOOLEAN
203 STDCALL
204 FsRtlCopyRead (
205 IN PFILE_OBJECT FileObject,
206 IN PLARGE_INTEGER FileOffset,
207 IN ULONG Length,
208 IN BOOLEAN Wait,
209 IN ULONG LockKey,
210 OUT PVOID Buffer,
211 OUT PIO_STATUS_BLOCK IoStatus,
212 IN PDEVICE_OBJECT DeviceObject
213 )
214 {
215 UNIMPLEMENTED;
216 return FALSE;
217 }
218
219
220 /**********************************************************************
221 * NAME EXPORTED
222 * FsRtlCopyWrite@32
223 *
224 * DESCRIPTION
225 *
226 * ARGUMENTS
227 *
228 * RETURN VALUE
229 *
230 * NOTE
231 * From Bo Branten's ntifs.h v12.
232 *
233 * @unimplemented
234 */
235 BOOLEAN
236 STDCALL
237 FsRtlCopyWrite (
238 IN PFILE_OBJECT FileObject,
239 IN PLARGE_INTEGER FileOffset,
240 IN ULONG Length,
241 IN BOOLEAN Wait,
242 IN ULONG LockKey,
243 IN PVOID Buffer,
244 OUT PIO_STATUS_BLOCK IoStatus,
245 IN PDEVICE_OBJECT DeviceObject
246 )
247 {
248 UNIMPLEMENTED;
249 return FALSE;
250 }
251
252
253 /**********************************************************************
254 * NAME EXPORTED
255 * FsRtlGetFileSize@8
256 *
257 * DESCRIPTION
258 *
259 * ARGUMENTS
260 *
261 * RETURN VALUE
262 *
263 * @implemented
264 */
265 NTSTATUS
266 STDCALL
267 FsRtlGetFileSize (
268 IN PFILE_OBJECT FileObject,
269 IN OUT PLARGE_INTEGER FileSize
270 )
271 {
272 FILE_STANDARD_INFORMATION Info;
273 NTSTATUS Status;
274 ULONG Length;
275
276 Status = IoQueryFileInformation(FileObject,
277 FileStandardInformation,
278 sizeof(Info),
279 &Info,
280 &Length);
281 if (NT_SUCCESS(Status))
282 {
283 FileSize->QuadPart = Info.EndOfFile.QuadPart;
284 }
285
286 return Status;
287 }
288
289 /*
290 * @unimplemented
291 */
292 NTSTATUS
293 STDCALL
294 FsRtlInsertPerStreamContext (
295 IN PFSRTL_ADVANCED_FCB_HEADER PerStreamContext,
296 IN PFSRTL_PER_STREAM_CONTEXT Ptr
297 )
298 {
299 UNIMPLEMENTED;
300 return STATUS_NOT_IMPLEMENTED;
301 }
302
303 /*
304 * @unimplemented
305 */
306 PFSRTL_PER_STREAM_CONTEXT
307 STDCALL
308 FsRtlRemovePerStreamContext (
309 IN PFSRTL_ADVANCED_FCB_HEADER StreamContext,
310 IN PVOID OwnerId OPTIONAL,
311 IN PVOID InstanceId OPTIONAL
312 )
313 {
314 UNIMPLEMENTED;
315 return NULL;
316 }
317
318 /*
319 * @unimplemented
320 */
321 NTSTATUS
322 STDCALL
323 FsRtlInsertPerFileObjectContext (
324 IN PFSRTL_ADVANCED_FCB_HEADER PerFileObjectContext,
325 IN PVOID /* PFSRTL_PER_FILE_OBJECT_CONTEXT*/ Ptr
326 )
327 {
328 UNIMPLEMENTED;
329 return STATUS_NOT_IMPLEMENTED;
330 }
331
332 /**********************************************************************
333 * NAME EXPORTED
334 * FsRtlPostPagingFileStackOverflow@12
335 *
336 * DESCRIPTION
337 *
338 * ARGUMENTS
339 *
340 * RETURN VALUE
341 *
342 * @unimplemented
343 */
344 VOID
345 STDCALL
346 FsRtlPostPagingFileStackOverflow(IN PVOID Context,
347 IN PKEVENT Event,
348 IN PFSRTL_STACK_OVERFLOW_ROUTINE StackOverflowRoutine)
349 {
350 UNIMPLEMENTED;
351 }
352
353
354 /**********************************************************************
355 * NAME EXPORTED
356 * FsRtlPostStackOverflow@12
357 *
358 * DESCRIPTION
359 *
360 * ARGUMENTS
361 *
362 * RETURN VALUE
363 *
364 * @unimplemented
365 */
366 VOID
367 STDCALL
368 FsRtlPostStackOverflow (IN PVOID Context,
369 IN PKEVENT Event,
370 IN PFSRTL_STACK_OVERFLOW_ROUTINE StackOverflowRoutine)
371 {
372 UNIMPLEMENTED;
373 }
374
375
376 /*
377 * @unimplemented
378 */
379 PVOID /* PFSRTL_PER_FILE_OBJECT_CONTEXT*/
380 STDCALL
381 FsRtlRemovePerFileObjectContext (
382 IN PFSRTL_ADVANCED_FCB_HEADER PerFileObjectContext,
383 IN PVOID OwnerId OPTIONAL,
384 IN PVOID InstanceId OPTIONAL
385 )
386 {
387 UNIMPLEMENTED;
388 return NULL;
389 }
390
391 /**********************************************************************
392 * NAME EXPORTED
393 * FsRtlSyncVolumes@12
394 *
395 * DESCRIPTION
396 * Obsolete function.
397 *
398 * ARGUMENTS
399 *
400 * RETURN VALUE
401 * It always returns STATUS_SUCCESS.
402 *
403 * @implemented
404 */
405 NTSTATUS
406 STDCALL
407 FsRtlSyncVolumes (
408 DWORD Unknown0,
409 DWORD Unknown1,
410 DWORD Unknown2
411 )
412 {
413 return STATUS_SUCCESS;
414 }
415
416
417 /*
418 * @unimplemented
419 */
420 VOID
421 STDCALL
422 FsRtlTeardownPerStreamContexts (
423 IN PFSRTL_ADVANCED_FCB_HEADER AdvancedHeader
424 )
425 {
426 UNIMPLEMENTED;
427 }
428
429 /* EOF */