Remove unnecessary executable bits
[reactos.git] / drivers / filesystems / cdfs_new / fileinfo.c
old mode 100755 (executable)
new mode 100644 (file)
index c357d3c..62c929b
@@ -14,7 +14,7 @@ Abstract:
 
 --*/
 
-#include "CdProcs.h"
+#include "cdprocs.h"
 
 //
 //  The Bug check file id for this module
@@ -28,67 +28,68 @@ Abstract:
 
 VOID
 CdQueryBasicInfo (
-    IN PIRP_CONTEXT IrpContext,
-    IN PFCB Fcb,
-    IN OUT PFILE_BASIC_INFORMATION Buffer,
-    IN OUT PULONG Length
+    _In_ PIRP_CONTEXT IrpContext,
+    _In_ PFCB Fcb,
+    _Out_ PFILE_BASIC_INFORMATION Buffer,
+    _Inout_ PULONG Length
     );
 
 VOID
 CdQueryStandardInfo (
-    IN PIRP_CONTEXT IrpContext,
-    IN PFCB Fcb,
-    IN OUT PFILE_STANDARD_INFORMATION Buffer,
-    IN OUT PULONG Length
+    _In_ PIRP_CONTEXT IrpContext,
+    _In_ PFCB Fcb,
+    _Out_ PFILE_STANDARD_INFORMATION Buffer,
+    _Inout_ PULONG Length
     );
 
 VOID
 CdQueryInternalInfo (
-    IN PIRP_CONTEXT IrpContext,
-    IN PFCB Fcb,
-    IN OUT PFILE_INTERNAL_INFORMATION Buffer,
-    IN OUT PULONG Length
+    _In_ PIRP_CONTEXT IrpContext,
+    _In_ PFCB Fcb,
+    _Out_ PFILE_INTERNAL_INFORMATION Buffer,
+    _Inout_ PULONG Length
     );
 
 VOID
 CdQueryEaInfo (
-    IN PIRP_CONTEXT IrpContext,
-    IN PFCB Fcb,
-    IN OUT PFILE_EA_INFORMATION Buffer,
-    IN OUT PULONG Length
+    _In_ PIRP_CONTEXT IrpContext,
+    _In_ PFCB Fcb,
+    _Out_ PFILE_EA_INFORMATION Buffer,
+    _Inout_ PULONG Length
     );
 
 VOID
 CdQueryPositionInfo (
-    IN PIRP_CONTEXT IrpContext,
-    IN PFILE_OBJECT FileObject,
-    IN OUT PFILE_POSITION_INFORMATION Buffer,
-    IN OUT PULONG Length
+    _In_ PIRP_CONTEXT IrpContext,
+    _In_ PFILE_OBJECT FileObject,
+    _Out_ PFILE_POSITION_INFORMATION Buffer,
+    _Inout_ PULONG Length
     );
 
 NTSTATUS
 CdQueryNameInfo (
-    IN PIRP_CONTEXT IrpContext,
-    IN PFILE_OBJECT FileObject,
-    IN OUT PFILE_NAME_INFORMATION Buffer,
-    IN OUT PULONG Length
+    _In_ PIRP_CONTEXT IrpContext,
+    _In_ PFILE_OBJECT FileObject,
+    _Out_ PFILE_NAME_INFORMATION Buffer,
+    _Inout_ PULONG Length
     );
 
+_Requires_lock_held_(_Global_critical_region_)
 NTSTATUS
 CdQueryAlternateNameInfo (
-    IN PIRP_CONTEXT IrpContext,
-    IN PFCB Fcb,
-    IN PCCB Ccb,
-    IN OUT PFILE_NAME_INFORMATION Buffer,
-    IN OUT PULONG Length
+    _In_ PIRP_CONTEXT IrpContext,
+    _In_ PFCB Fcb,
+    _In_ PCCB Ccb,
+    _Out_ PFILE_NAME_INFORMATION Buffer,
+    _Inout_ PULONG Length
     );
 
 VOID
 CdQueryNetworkInfo (
-    IN PIRP_CONTEXT IrpContext,
-    IN PFCB Fcb,
-    IN OUT PFILE_NETWORK_OPEN_INFORMATION Buffer,
-    IN OUT PULONG Length
+    _In_ PIRP_CONTEXT IrpContext,
+    _In_ PFCB Fcb,
+    _Out_ PFILE_NETWORK_OPEN_INFORMATION Buffer,
+    _Inout_ PULONG Length
     );
 
 #ifdef ALLOC_PRAGMA
@@ -108,10 +109,11 @@ CdQueryNetworkInfo (
 #endif
 
 \f
+_Requires_lock_held_(_Global_critical_region_)
 NTSTATUS
 CdCommonQueryInfo (
-    IN PIRP_CONTEXT IrpContext,
-    IN PIRP Irp
+    _Inout_ PIRP_CONTEXT IrpContext,
+    _Inout_ PIRP Irp
     )
 
 /*++
@@ -165,7 +167,7 @@ Return Value:
     //  Use a try-finally to facilitate cleanup.
     //
 
-    try {
+    _SEH2_TRY {
 
         //
         //  We only support query on file and directory handles.
@@ -191,8 +193,8 @@ Return Value:
 
             if (!FlagOn( Fcb->FcbState, FCB_STATE_INITIALIZED )) {
 
-                ASSERT( TypeOfOpen == UserDirectoryOpen );
-                CdCreateInternalStream( IrpContext, Fcb->Vcb, Fcb );
+                NT_ASSERT( TypeOfOpen == UserDirectoryOpen );
+                CdVerifyOrCreateDirStreamFile( IrpContext, Fcb);
             }
 
             //
@@ -325,7 +327,7 @@ Return Value:
 
         Irp->IoStatus.Information = IrpSp->Parameters.QueryFile.Length - Length;
 
-    } finally {
+    } _SEH2_FINALLY {
 
         //
         //  Release the file.
@@ -335,7 +337,7 @@ Return Value:
 
             CdReleaseFile( IrpContext, Fcb );
         }
-    }
+    } _SEH2_END;
 
     //
     //  Complete the request if we didn't raise.
@@ -347,10 +349,11 @@ Return Value:
 }
 
 \f
+_Requires_lock_held_(_Global_critical_region_)
 NTSTATUS
 CdCommonSetInfo (
-    IN PIRP_CONTEXT IrpContext,
-    IN PIRP Irp
+    _Inout_ PIRP_CONTEXT IrpContext,
+    _Inout_ PIRP Irp
     )
 
 /*++
@@ -406,7 +409,7 @@ Return Value:
 
     CdAcquireFileShared( IrpContext, Fcb );
 
-    try {
+    _SEH2_TRY {
 
         //
         //  Make sure the Fcb is in a usable condition.  This
@@ -445,10 +448,10 @@ Return Value:
         Status = STATUS_SUCCESS;
 
     try_exit: NOTHING;
-    } finally {
+    } _SEH2_FINALLY {
 
         CdReleaseFile( IrpContext, Fcb );
-    }
+    } _SEH2_END;
 
     //
     //  Complete the request if there was no raise.
@@ -458,15 +461,18 @@ Return Value:
     return Status;
 }
 
-\f
+
+_Function_class_(FAST_IO_QUERY_BASIC_INFO)
+_IRQL_requires_same_\f
+_Success_(return != FALSE)
 BOOLEAN
 NTAPI /* ReactOS Change: GCC Does not support STDCALL by default */
 CdFastQueryBasicInfo (
-    IN PFILE_OBJECT FileObject,
-    IN BOOLEAN Wait,
-    IN OUT PFILE_BASIC_INFORMATION Buffer,
-    OUT PIO_STATUS_BLOCK IoStatus,
-    IN PDEVICE_OBJECT DeviceObject
+    _In_ PFILE_OBJECT FileObject,
+    _In_ BOOLEAN Wait,
+    _Out_ PFILE_BASIC_INFORMATION Buffer,
+    _Out_ PIO_STATUS_BLOCK IoStatus,
+    _In_ PDEVICE_OBJECT DeviceObject
     )
 
 /*++
@@ -500,6 +506,8 @@ Return Value:
 
     PAGED_CODE();
 
+    UNREFERENCED_PARAMETER( DeviceObject );
+
     ASSERT_FILE_OBJECT( FileObject );
 
     FsRtlEnterFileSystem();
@@ -536,7 +544,7 @@ Return Value:
     //  Use a try-finally to facilitate cleanup.
     //
 
-    try {
+    _SEH2_TRY {
 
         //
         //  Only deal with 'good' Fcb's.
@@ -566,25 +574,28 @@ Return Value:
             Result = TRUE;
         }
 
-    } finally {
+    } _SEH2_FINALLY {
 
         ExReleaseResourceLite( Fcb->Resource );
 
         FsRtlExitFileSystem();
-    }
+    } _SEH2_END;
 
     return Result;
 }
 
-\f
+
+_Function_class_(FAST_IO_QUERY_STANDARD_INFO)
+_IRQL_requires_same_
+_Success_(return != FALSE)
 BOOLEAN
 NTAPI /* ReactOS Change: GCC Does not support STDCALL by default */
 CdFastQueryStdInfo (
-    IN PFILE_OBJECT FileObject,
-    IN BOOLEAN Wait,
-    IN OUT PFILE_STANDARD_INFORMATION Buffer,
-    OUT PIO_STATUS_BLOCK IoStatus,
-    IN PDEVICE_OBJECT DeviceObject
+    _In_ PFILE_OBJECT FileObject,
+    _In_ BOOLEAN Wait,
+    _Out_ PFILE_STANDARD_INFORMATION Buffer,
+    _Out_ PIO_STATUS_BLOCK IoStatus,
+    _In_ PDEVICE_OBJECT DeviceObject
     )
 
 /*++
@@ -618,6 +629,8 @@ Return Value:
 
     PAGED_CODE();
 
+    UNREFERENCED_PARAMETER( DeviceObject );
+
     ASSERT_FILE_OBJECT( FileObject );
 
     FsRtlEnterFileSystem();
@@ -654,7 +667,7 @@ Return Value:
     //  Use a try-finally to facilitate cleanup.
     //
 
-    try {
+    _SEH2_TRY {
 
         //
         //  Only deal with 'good' Fcb's.
@@ -694,25 +707,28 @@ Return Value:
             Result = TRUE;
         }
 
-    } finally {
+    } _SEH2_FINALLY {
 
         ExReleaseResourceLite( Fcb->Resource );
 
         FsRtlExitFileSystem();
-    }
+    } _SEH2_END;
 
     return Result;
 }
 
-\f
+
+_Function_class_(FAST_IO_QUERY_NETWORK_OPEN_INFO)
+_IRQL_requires_same_
+_Success_(return != FALSE)
 BOOLEAN
 NTAPI /* ReactOS Change: GCC Does not support STDCALL by default */
 CdFastQueryNetworkInfo (
-    IN PFILE_OBJECT FileObject,
-    IN BOOLEAN Wait,
-    OUT PFILE_NETWORK_OPEN_INFORMATION Buffer,
-    OUT PIO_STATUS_BLOCK IoStatus,
-    IN PDEVICE_OBJECT DeviceObject
+    _In_ PFILE_OBJECT FileObject,
+    _In_ BOOLEAN Wait,
+    _Out_ PFILE_NETWORK_OPEN_INFORMATION Buffer,
+    _Out_ PIO_STATUS_BLOCK IoStatus,
+    _In_ PDEVICE_OBJECT DeviceObject
     )
 
 /*++
@@ -746,6 +762,8 @@ Return Value:
 
     PAGED_CODE();
 
+    UNREFERENCED_PARAMETER( DeviceObject );
+
     ASSERT_FILE_OBJECT( FileObject );
 
     FsRtlEnterFileSystem();
@@ -782,7 +800,7 @@ Return Value:
     //  Use a try-finally to facilitate cleanup.
     //
 
-    try {
+    _SEH2_TRY {
 
         //
         //  Only deal with 'good' Fcb's.
@@ -827,12 +845,12 @@ Return Value:
             Result = TRUE;
         }
 
-    } finally {
+    } _SEH2_FINALLY {
 
         ExReleaseResourceLite( Fcb->Resource );
 
         FsRtlExitFileSystem();
-    }
+    } _SEH2_END;
 
     return Result;
 }
@@ -844,10 +862,10 @@ Return Value:
 
 VOID
 CdQueryBasicInfo (
-    IN PIRP_CONTEXT IrpContext,
-    IN PFCB Fcb,
-    IN OUT PFILE_BASIC_INFORMATION Buffer,
-    IN OUT PULONG Length
+    _In_ PIRP_CONTEXT IrpContext,
+    _In_ PFCB Fcb,
+    _Out_ PFILE_BASIC_INFORMATION Buffer,
+    _Inout_ PULONG Length
     )
 
 /*++
@@ -875,6 +893,8 @@ Return Value:
 {
     PAGED_CODE();
 
+    UNREFERENCED_PARAMETER( IrpContext );
+
     //
     //  We only support creation, last modify and last write times on Cdfs.
     //
@@ -903,10 +923,10 @@ Return Value:
 
 VOID
 CdQueryStandardInfo (
-    IN PIRP_CONTEXT IrpContext,
-    IN PFCB Fcb,
-    IN OUT PFILE_STANDARD_INFORMATION Buffer,
-    IN OUT PULONG Length
+    _In_ PIRP_CONTEXT IrpContext,
+    _In_ PFCB Fcb,
+    _Out_ PFILE_STANDARD_INFORMATION Buffer,
+    _Inout_ PULONG Length
     )
 /*++
 
@@ -933,6 +953,8 @@ Return Value:
 {
     PAGED_CODE();
 
+    UNREFERENCED_PARAMETER( IrpContext );
+
     //
     //  There is only one link and delete is never pending on a Cdrom file.
     //
@@ -976,10 +998,10 @@ Return Value:
 
 VOID
 CdQueryInternalInfo (
-    IN PIRP_CONTEXT IrpContext,
-    IN PFCB Fcb,
-    IN OUT PFILE_INTERNAL_INFORMATION Buffer,
-    IN OUT PULONG Length
+    _In_ PIRP_CONTEXT IrpContext,
+    _In_ PFCB Fcb,
+    _Out_ PFILE_INTERNAL_INFORMATION Buffer,
+    _Inout_ PULONG Length
     )
 
 /*++
@@ -1007,6 +1029,8 @@ Return Value:
 {
     PAGED_CODE();
 
+    UNREFERENCED_PARAMETER( IrpContext );
+
     //
     //  Index number is the file Id number in the Fcb.
     //
@@ -1024,10 +1048,10 @@ Return Value:
 
 VOID
 CdQueryEaInfo (
-    IN PIRP_CONTEXT IrpContext,
-    IN PFCB Fcb,
-    IN OUT PFILE_EA_INFORMATION Buffer,
-    IN OUT PULONG Length
+    _In_ PIRP_CONTEXT IrpContext,
+    _In_ PFCB Fcb,
+    _Out_ PFILE_EA_INFORMATION Buffer,
+    _Inout_ PULONG Length
     )
 
 /*++
@@ -1055,6 +1079,9 @@ Return Value:
 {
     PAGED_CODE();
 
+    UNREFERENCED_PARAMETER( IrpContext );
+    UNREFERENCED_PARAMETER( Fcb );
+
     //
     //  No Ea's on Cdfs volumes.
     //
@@ -1072,10 +1099,10 @@ Return Value:
 
 VOID
 CdQueryPositionInfo (
-    IN PIRP_CONTEXT IrpContext,
-    IN PFILE_OBJECT FileObject,
-    IN OUT PFILE_POSITION_INFORMATION Buffer,
-    IN OUT PULONG Length
+    _In_ PIRP_CONTEXT IrpContext,
+    _In_ PFILE_OBJECT FileObject,
+    _Out_ PFILE_POSITION_INFORMATION Buffer,
+    _Inout_ PULONG Length
     )
 
 /*++
@@ -1103,6 +1130,8 @@ Return Value:
 {
     PAGED_CODE();
 
+    UNREFERENCED_PARAMETER( IrpContext );
+
     //
     //  Get the current position found in the file object.
     //
@@ -1125,10 +1154,10 @@ Return Value:
 
 NTSTATUS
 CdQueryNameInfo (
-    IN PIRP_CONTEXT IrpContext,
-    IN PFILE_OBJECT FileObject,
-    IN OUT PFILE_NAME_INFORMATION Buffer,
-    IN OUT PULONG Length
+    _In_ PIRP_CONTEXT IrpContext,
+    _In_ PFILE_OBJECT FileObject,
+    _Out_ PFILE_NAME_INFORMATION Buffer,
+    _Inout_ PULONG Length
     )
 
 /*++
@@ -1159,7 +1188,9 @@ Return Value:
 
     PAGED_CODE();
 
-    ASSERT(*Length >= sizeof(ULONG));
+    UNREFERENCED_PARAMETER( IrpContext );
+
+    NT_ASSERT(*Length >= sizeof(ULONG));
     
     //
     //  Simply copy the name in the file object to the user's buffer.
@@ -1197,13 +1228,14 @@ Return Value:
 //  Local support routine
 //
 
+_Requires_lock_held_(_Global_critical_region_)
 NTSTATUS
 CdQueryAlternateNameInfo (
-    IN PIRP_CONTEXT IrpContext,
-    IN PFCB Fcb,
-    IN PCCB Ccb,
-    IN OUT PFILE_NAME_INFORMATION Buffer,
-    IN OUT PULONG Length
+    _In_ PIRP_CONTEXT IrpContext,
+    _In_ PFCB Fcb,
+    _In_ PCCB Ccb,
+    _Out_ PFILE_NAME_INFORMATION Buffer,
+    _Inout_ PULONG Length
     )
 
 /*++
@@ -1237,16 +1269,16 @@ Return Value:
 {
     NTSTATUS Status = STATUS_SUCCESS;
 
-    DIRENT_ENUM_CONTEXT DirContext;
-    DIRENT Dirent;
+    DIRENT_ENUM_CONTEXT DirContext = {0};
+    DIRENT Dirent = {0};
 
     PUNICODE_STRING NameToUse;
     ULONG DirentOffset;
 
-    COMPOUND_PATH_ENTRY CompoundPathEntry;
+    COMPOUND_PATH_ENTRY CompoundPathEntry = {{0}};/* ReactOS Change: GCC "missing braces around initializer" */
     FILE_ENUM_CONTEXT FileContext;
 
-    PFCB ParentFcb;
+    PFCB ParentFcb = NULL;
     BOOLEAN ReleaseParentFcb = FALSE;
 
     BOOLEAN CleanupFileLookup = FALSE;
@@ -1278,20 +1310,13 @@ Return Value:
     //  Use a try-finally to cleanup the structures.
     //
 
-    try {
+    _SEH2_TRY {
 
         ParentFcb = Fcb->ParentFcb;
         CdAcquireFileShared( IrpContext, ParentFcb );
         ReleaseParentFcb = TRUE;
     
-        //
-        //  Do an unsafe test to see if we need to create a file object.
-        //
-
-        if (ParentFcb->FileObject == NULL) {
-
-            CdCreateInternalStream( IrpContext, ParentFcb->Vcb, ParentFcb );
-        }
+        CdVerifyOrCreateDirStreamFile( IrpContext, ParentFcb);
 
         if (CdFidIsDirectory( Fcb->FileId)) {
 
@@ -1396,12 +1421,12 @@ Return Value:
         RtlCopyMemory( Buffer->FileName, ShortNameBuffer, Buffer->FileNameLength );
 
     try_exit:  NOTHING;
-    } finally {
+    } _SEH2_FINALLY {
 
         if (CleanupFileLookup) {
 
             CdCleanupDirContext( IrpContext, &DirContext );
-            CdCleanupDirent( IrpContext, &Dirent );
+            CdCleanupDirent( IrpContext, &Dirent );/* ReactOS Change: GCC "passing argument 1 from incompatible pointer type" */
 
         } else if (CleanupDirectoryLookup) {
 
@@ -1413,7 +1438,7 @@ Return Value:
 
             CdReleaseFile( IrpContext, ParentFcb );
         }
-    }
+    } _SEH2_END;
 
     //
     //  Reduce the available bytes by the amount stored into this buffer.
@@ -1434,10 +1459,10 @@ Return Value:
 
 VOID
 CdQueryNetworkInfo (
-    IN PIRP_CONTEXT IrpContext,
-    IN PFCB Fcb,
-    IN OUT PFILE_NETWORK_OPEN_INFORMATION Buffer,
-    IN OUT PULONG Length
+    _In_ PIRP_CONTEXT IrpContext,
+    _In_ PFCB Fcb,
+    _Out_ PFILE_NETWORK_OPEN_INFORMATION Buffer,
+    _Inout_ PULONG Length
     )
 
 /*++
@@ -1465,6 +1490,8 @@ Return Value:
 {
     PAGED_CODE();
 
+    UNREFERENCED_PARAMETER( IrpContext );
+
     //
     //  We only support creation, last modify and last write times on Cdfs.
     //