1 /* $Id: util.c,v 1.16 2004/06/23 00:42:21 ion Exp $
3 * reactos/ntoskrnl/fs/util.c
10 #include <internal/debug.h>
12 /**********************************************************************
14 * FsRtlIsTotalDeviceFailure@4
17 * Check if an NTSTATUS error code represents a
18 * disk hardware failure.
25 * FALSE if either (NtStatus >= STATUS_SUCCESS),
26 * STATUS_CRC_ERROR, STATUS_DEVICE_DATA_ERROR;
33 FsRtlIsTotalDeviceFailure (
38 (NT_SUCCESS(NtStatus
))
39 || (STATUS_CRC_ERROR
== NtStatus
)
40 || (STATUS_DEVICE_DATA_ERROR
== NtStatus
)
47 /**********************************************************************
49 * FsRtlIsNtstatusExpected/1
53 * Check an NTSTATUS value is expected by the FS kernel
61 * TRUE if NtStatus is NOT one out of:
62 * - STATUS_ACCESS_VIOLATION
63 * - STATUS_ILLEGAL_INSTRUCTION
64 * - STATUS_DATATYPE_MISALIGNMENT
65 * - STATUS_INSTRUCTION_MISALIGNMENT
66 * which are the forbidden return stati in the FsRtl
67 * subsystem; FALSE otherwise.
70 * 2002-01-17 Fixed a bad bug reported by Bo Brantén.
71 * Up to version 1.8, this function's semantics was
72 * exactly the opposite! Thank you Bo.
78 FsRtlIsNtstatusExpected (
83 (STATUS_DATATYPE_MISALIGNMENT
== NtStatus
)
84 || (STATUS_ACCESS_VIOLATION
== NtStatus
)
85 || (STATUS_ILLEGAL_INSTRUCTION
== NtStatus
)
86 || (STATUS_INSTRUCTION_MISALIGNMENT
== NtStatus
)
97 IN PFILE_OBJECT FileObject
105 /**********************************************************************
107 * FsRtlNormalizeNtstatus@8
110 * Normalize an NTSTATUS value for using in the FS subsystem.
113 * NtStatusToNormalize
114 * NTSTATUS to normalize.
116 * NTSTATUS to return if the NtStatusToNormalize
117 * value is unexpected by the FS kernel subsystem.
120 * NtStatusToNormalize if it is an expected value,
121 * otherwise NormalizedNtStatus.
127 FsRtlNormalizeNtstatus (
128 IN NTSTATUS NtStatusToNormalize
,
129 IN NTSTATUS NormalizedNtStatus
133 (TRUE
== FsRtlIsNtstatusExpected(NtStatusToNormalize
))
134 ? NtStatusToNormalize
135 : NormalizedNtStatus
;
139 /**********************************************************************
140 * Miscellanea (they may fit somewhere else)
141 *********************************************************************/
144 /**********************************************************************
146 * FsRtlAllocateResource@0
159 FsRtlAllocateResource (VOID
)
165 /**********************************************************************
167 * FsRtlBalanceReads@4
188 /**********************************************************************
199 * From Bo Branten's ntifs.h v12.
206 IN PFILE_OBJECT FileObject
,
207 IN PLARGE_INTEGER FileOffset
,
212 OUT PIO_STATUS_BLOCK IoStatus
,
213 IN PDEVICE_OBJECT DeviceObject
220 /**********************************************************************
231 * From Bo Branten's ntifs.h v12.
238 IN PFILE_OBJECT FileObject
,
239 IN PLARGE_INTEGER FileOffset
,
244 OUT PIO_STATUS_BLOCK IoStatus
,
245 IN PDEVICE_OBJECT DeviceObject
252 /**********************************************************************
267 IN PFILE_OBJECT FileObject
,
268 IN OUT PLARGE_INTEGER FileSize
271 FILE_STANDARD_INFORMATION Info
;
275 Status
= IoQueryFileInformation(FileObject
,
276 FileStandardInformation
,
280 if (NT_SUCCESS(Status
))
282 FileSize
->QuadPart
= Info
.EndOfFile
.QuadPart
;
293 FsRtlInsertPerStreamContext (
294 IN PFSRTL_ADVANCED_FCB_HEADER PerStreamContext
,
295 IN PFSRTL_PER_STREAM_CONTEXT Ptr
299 return STATUS_NOT_IMPLEMENTED
;
306 PFSRTL_PER_STREAM_CONTEXT
307 FsRtlRemovePerStreamContext (
308 IN PFSRTL_ADVANCED_FCB_HEADER StreamContext
,
309 IN PVOID OwnerId OPTIONAL
,
310 IN PVOID InstanceId OPTIONAL
322 FsRtlInsertPerFileObjectContext (
323 IN PFSRTL_ADVANCED_FCB_HEADER PerFileObjectContext
,
324 IN PVOID
/* PFSRTL_PER_FILE_OBJECT_CONTEXT*/ Ptr
328 return STATUS_NOT_IMPLEMENTED
;
331 /**********************************************************************
333 * FsRtlPostPagingFileStackOverflow@12
345 FsRtlPostPagingFileStackOverflow (
354 /**********************************************************************
356 * FsRtlPostStackOverflow@12
368 FsRtlPostStackOverflow (
381 PVOID
/* PFSRTL_PER_FILE_OBJECT_CONTEXT*/
382 FsRtlRemovePerFileObjectContext (
383 IN PFSRTL_ADVANCED_FCB_HEADER PerFileObjectContext
,
384 IN PVOID OwnerId OPTIONAL
,
385 IN PVOID InstanceId OPTIONAL
392 /**********************************************************************
394 * FsRtlSyncVolumes@12
402 * It always returns STATUS_SUCCESS.
414 return STATUS_SUCCESS
;
423 FsRtlTeardownPerStreamContexts (
424 IN PFSRTL_ADVANCED_FCB_HEADER AdvancedHeader