FS stubs.
[reactos.git] / reactos / ntoskrnl / fs / util.c
1 /* $Id: util.c,v 1.1 1999/08/20 16:29:22 ea Exp $
2 *
3 * reactos/ntoskrnl/fs/util.c
4 *
5 */
6 #include <ntos.h>
7
8
9 /**********************************************************************
10 * NAME EXPORTED
11 * FsRtlIsTotalDeviceFailure@4
12 *
13 * DESCRIPTION
14 * Check if an NTSTATUS error code represents a
15 * disk hardware failure.
16 *
17 * ARGUMENTS
18 * NtStatus
19 * NTSTATUS to test.
20 *
21 * RETURN VALUE
22 * FALSE if either (NtStatus >= STATUS_SUCCESS),
23 * STATUS_CRC_ERROR, 0xC000009C; TRUE otherwise.
24 *
25 * NOTES
26 * By calling the function with all possible values,
27 * one unknown NTSTATUS value makes the function
28 * return TRUE (0xC000009C).
29 */
30 BOOLEAN
31 STDCALL
32 FsRtlIsTotalDeviceFailure (
33 NTSTATUS NtStatus
34 )
35 {
36 return (
37 (NT_SUCCESS(NtStatus))
38 || (STATUS_CRC_ERROR == NtStatus)
39 || (STATUS_UNKNOWN_C000009C == NtStatus) /* FIXME */
40 ? FALSE
41 : TRUE
42 );
43 }
44
45
46 /**********************************************************************
47 * NAME EXPORTED
48 * FsRtlIsNtstatusExpected@4
49 *
50 * DESCRIPTION
51 * Check an NTSTATUS value is expected by the FS kernel
52 * subsystem.
53 *
54 * ARGUMENTS
55 * NtStatus
56 * NTSTATUS to test.
57 *
58 * RETURN VALUE
59 * TRUE if NtStatus is either STATUS_ACCESS_VIOLATION,
60 * STATUS_ILLEGAL_INSTRUCTION, 0x80000002, 0xC00000AA;
61 * FALSE otherwise.
62 *
63 * NOTES
64 * By calling the function with all possible values,
65 * two unknown NTSTATUS values make the function
66 * return 0x00 (0x80000002, 0xC00000AA).
67 */
68 BOOLEAN
69 STDCALL
70 FsRtlIsNtstatusExpected (
71 NTSTATUS NtStatus
72 )
73 {
74 return (
75 (STATUS_UNKNOWN_80000002 == NtStatus) /* FIXME */
76 || (STATUS_ACCESS_VIOLATION == NtStatus)
77 || (STATUS_ILLEGAL_INSTRUCTION == NtStatus)
78 || (STATUS_UNKNOWN_C00000AA == NtStatus) /* FIXME */
79 )
80 ? TRUE
81 : FALSE;
82 }
83
84
85 /**********************************************************************
86 * NAME EXPORTED
87 * FsRtlNormalizeNtstatus@8
88 *
89 * DESCRIPTION
90 * Normalize an NTSTATUS value for using in the FS subsystem.
91 *
92 * ARGUMENTS
93 * NtStatusToNormalize
94 * NTSTATUS to normalize.
95 * NormalizedNtStatus
96 * NTSTATUS to return if the NtStatusToNormalize
97 * value is unexpected by the FS kernel subsystem.
98 *
99 * RETURN VALUE
100 * NtStatusToNormalize if it is an expected value,
101 * otherwise NormalizedNtStatus.
102 */
103 NTSTATUS
104 STDCALL
105 FsRtlNormalizeNtstatus (
106 NTSTATUS NtStatusToNormalize,
107 NTSTATUS NormalizedNtStatus
108 )
109 {
110 return
111 (TRUE == FsRtlIsNtstatusExpected(NtStatusToNormalize))
112 ? NtStatusToNormalize
113 : NormalizedNtStatus;
114 }
115
116
117 /* EOF */
118