1 /* $Id: util.c,v 1.18 2004/08/21 20:40:27 tamlin Exp $
3 * reactos/ntoskrnl/fs/util.c
9 #include <internal/debug.h>
11 /**********************************************************************
13 * FsRtlIsTotalDeviceFailure@4
16 * Check if an NTSTATUS error code represents a
17 * disk hardware failure.
24 * FALSE if either (NtStatus >= STATUS_SUCCESS),
25 * STATUS_CRC_ERROR, STATUS_DEVICE_DATA_ERROR;
32 FsRtlIsTotalDeviceFailure (
37 (NT_SUCCESS(NtStatus
))
38 || (STATUS_CRC_ERROR
== NtStatus
)
39 || (STATUS_DEVICE_DATA_ERROR
== NtStatus
)
46 /**********************************************************************
48 * FsRtlIsNtstatusExpected/1
52 * Check an NTSTATUS value is expected by the FS kernel
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.
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.
77 FsRtlIsNtstatusExpected (
82 (STATUS_DATATYPE_MISALIGNMENT
== NtStatus
)
83 || (STATUS_ACCESS_VIOLATION
== NtStatus
)
84 || (STATUS_ILLEGAL_INSTRUCTION
== NtStatus
)
85 || (STATUS_INSTRUCTION_MISALIGNMENT
== NtStatus
)
96 IN PFILE_OBJECT FileObject
104 /**********************************************************************
106 * FsRtlNormalizeNtstatus@8
109 * Normalize an NTSTATUS value for using in the FS subsystem.
112 * NtStatusToNormalize
113 * NTSTATUS to normalize.
115 * NTSTATUS to return if the NtStatusToNormalize
116 * value is unexpected by the FS kernel subsystem.
119 * NtStatusToNormalize if it is an expected value,
120 * otherwise NormalizedNtStatus.
126 FsRtlNormalizeNtstatus (
127 IN NTSTATUS NtStatusToNormalize
,
128 IN NTSTATUS NormalizedNtStatus
132 (TRUE
== FsRtlIsNtstatusExpected(NtStatusToNormalize
))
133 ? NtStatusToNormalize
134 : NormalizedNtStatus
;
138 /**********************************************************************
139 * Miscellanea (they may fit somewhere else)
140 *********************************************************************/
143 /**********************************************************************
145 * FsRtlAllocateResource@0
158 FsRtlAllocateResource (VOID
)
164 /**********************************************************************
166 * FsRtlBalanceReads@4
187 /**********************************************************************
198 * From Bo Branten's ntifs.h v12.
205 IN PFILE_OBJECT FileObject
,
206 IN PLARGE_INTEGER FileOffset
,
211 OUT PIO_STATUS_BLOCK IoStatus
,
212 IN PDEVICE_OBJECT DeviceObject
219 /**********************************************************************
230 * From Bo Branten's ntifs.h v12.
237 IN PFILE_OBJECT FileObject
,
238 IN PLARGE_INTEGER FileOffset
,
243 OUT PIO_STATUS_BLOCK IoStatus
,
244 IN PDEVICE_OBJECT DeviceObject
251 /**********************************************************************
266 IN PFILE_OBJECT FileObject
,
267 IN OUT PLARGE_INTEGER FileSize
270 FILE_STANDARD_INFORMATION Info
;
274 Status
= IoQueryFileInformation(FileObject
,
275 FileStandardInformation
,
279 if (NT_SUCCESS(Status
))
281 FileSize
->QuadPart
= Info
.EndOfFile
.QuadPart
;
292 FsRtlInsertPerStreamContext (
293 IN PFSRTL_ADVANCED_FCB_HEADER PerStreamContext
,
294 IN PFSRTL_PER_STREAM_CONTEXT Ptr
298 return STATUS_NOT_IMPLEMENTED
;
304 PFSRTL_PER_STREAM_CONTEXT
306 FsRtlRemovePerStreamContext (
307 IN PFSRTL_ADVANCED_FCB_HEADER StreamContext
,
308 IN PVOID OwnerId OPTIONAL
,
309 IN PVOID InstanceId OPTIONAL
321 FsRtlInsertPerFileObjectContext (
322 IN PFSRTL_ADVANCED_FCB_HEADER PerFileObjectContext
,
323 IN PVOID
/* PFSRTL_PER_FILE_OBJECT_CONTEXT*/ Ptr
327 return STATUS_NOT_IMPLEMENTED
;
330 /**********************************************************************
332 * FsRtlPostPagingFileStackOverflow@12
344 FsRtlPostPagingFileStackOverflow (
353 /**********************************************************************
355 * FsRtlPostStackOverflow@12
367 FsRtlPostStackOverflow (
379 PVOID
/* PFSRTL_PER_FILE_OBJECT_CONTEXT*/
381 FsRtlRemovePerFileObjectContext (
382 IN PFSRTL_ADVANCED_FCB_HEADER PerFileObjectContext
,
383 IN PVOID OwnerId OPTIONAL
,
384 IN PVOID InstanceId OPTIONAL
391 /**********************************************************************
393 * FsRtlSyncVolumes@12
401 * It always returns STATUS_SUCCESS.
413 return STATUS_SUCCESS
;
422 FsRtlTeardownPerStreamContexts (
423 IN PFSRTL_ADVANCED_FCB_HEADER AdvancedHeader