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