diff --git a/drivers/filesystems/udfs/Include/Sys_spec_lib.cpp b/drivers/filesystems/udfs/Include/Sys_spec_lib.cpp index b740b6a8a9e73..b56ed59d687a6 100644 --- a/drivers/filesystems/udfs/Include/Sys_spec_lib.cpp +++ b/drivers/filesystems/udfs/Include/Sys_spec_lib.cpp @@ -150,10 +150,10 @@ UDFAttributesToUDF( IN ULONG NTAttr ) { - PULONG attr; //permissions - PUSHORT Flags; - PUCHAR Type; - PUCHAR FCharact; + PULONG attr = NULL; //permissions + PUSHORT Flags = NULL; + PUCHAR Type = NULL; + PUCHAR FCharact = NULL; NTAttr &= UDF_VALID_FILE_ATTRIBUTES; @@ -240,7 +240,7 @@ UDFFileDirInfoToNT( PEXTENDED_FILE_ENTRY ExFileEntry; USHORT Ident; BOOLEAN ReadSizes = FALSE; - NTSTATUS status; + NTSTATUS status = STATUS_SUCCESS; PFCB Fcb; UDFPrint(("@=%#x, FileDirNdx %x\n", &Vcb, FileDirNdx)); @@ -575,7 +575,7 @@ UDFDoesOSAllowFileToBeTargetForRename__( IN PUDF_FILE_INFO FileInfo ) { - NTSTATUS RC; + NTSTATUS RC = STATUS_SUCCESS; if (UDFIsADirectory(FileInfo)) return STATUS_ACCESS_DENIED; diff --git a/drivers/filesystems/udfs/Include/mem_tools.cpp b/drivers/filesystems/udfs/Include/mem_tools.cpp index 7b9a8bf8ea499..33e6878693ea0 100644 --- a/drivers/filesystems/udfs/Include/mem_tools.cpp +++ b/drivers/filesystems/udfs/Include/mem_tools.cpp @@ -47,15 +47,15 @@ ERESOURCE FrameLock; #define InitLockMemoryManager() ExInitializeResourceLite(&FrameLock) #define DeinitLockMemoryManager() ExDeleteResourceLite(&FrameLock) #endif //MEM_LOCK_BY_SPINLOCK -ULONG FrameCount; -ULONG LastFrame; +ULONG FrameCount = 0; +ULONG LastFrame = 0; BOOLEAN MyMemInitialized = FALSE; #define MyAllocIsFrameFree(FrameList, i) \ (!(FrameList[i].LastUsed || FrameList[i].FirstFree)) #ifdef UDF_DBG -ULONG MemTotalAllocated; +ULONG MemTotalAllocated = 0; PCHAR BreakAddr; VOID @@ -64,7 +64,7 @@ MyAllocDumpDescr( ULONG i ) { - BOOLEAN Used; + BOOLEAN Used = FALSE; Used = (Allocs[i].Len & MY_HEAP_FLAG_USED) ? TRUE : FALSE; UDFPrint(("block %x \t%s addr %x len %x \t", i, Used ? "used" : "free", Allocs[i].Addr, (Allocs[i].Len) & MY_HEAP_FLAG_LEN_MASK)); @@ -93,11 +93,11 @@ MyAllocDumpFrame( ULONG Frame ) { - ULONG i; + ULONG i = 0; PMEM_ALLOC_DESC Allocs; Allocs = FrameList[Frame].Frame; ULONG k=0; - BOOLEAN Used; + BOOLEAN Used = FALSE; #ifdef DUMP_MEM_FRAMES if (!MyDumpMem) #endif //DUMP_MEM_FRAMES @@ -132,7 +132,7 @@ MyAllocDumpFrames( VOID ) { - ULONG i; + ULONG i = 0; for(i=0;i> 1; @@ -933,7 +933,7 @@ MyAllocInit(VOID) VOID MyAllocRelease(VOID) { - ULONG i; + ULONG i = 0; PMEM_ALLOC_DESC Allocs; if (!MyMemInitialized) diff --git a/drivers/filesystems/udfs/Include/phys_lib.cpp b/drivers/filesystems/udfs/Include/phys_lib.cpp index bba91e86d1c06..fbef7afec9ab1 100644 --- a/drivers/filesystems/udfs/Include/phys_lib.cpp +++ b/drivers/filesystems/udfs/Include/phys_lib.cpp @@ -288,7 +288,7 @@ UDFTRead( // read according to relocation table RelocExtent_saved = RelocExtent; for(i=0; RelocExtent->extLength; i++, RelocExtent++) { - ULONG _ReadBytes; + ULONG _ReadBytes = 0; rLba = RelocExtent->extLocation; if (rLba >= (Vcb->CDR_Mode ? Vcb->NWA : Vcb->LastLBA + 1)) { RtlZeroMemory(Buffer, _ReadBytes = RelocExtent->extLength); @@ -437,7 +437,7 @@ UDFPrepareForWriteOperation( { #ifdef _UDF_STRUCTURES_H_ if (Vcb->BSBM_Bitmap) { - ULONG i; + ULONG i = 0; for(i=0; iBSBM_Bitmap), Lba+i)) { UDFPrint(("W: Known BB @ %#x\n", Lba)); @@ -485,15 +485,15 @@ UDFDetermineVolumeLayout( PULONG SessionEndLba ) { - NTSTATUS Status; + NTSTATUS Status = STATUS_SUCCESS; CDROM_TOC_LARGE* toc = NULL; CDROM_TOC_SESSION_DATA* LastSes = NULL; - ULONG LocalTrackCount; - ULONG TocEntry; + ULONG LocalTrackCount = 0; + ULONG TocEntry = 0; void* TempBuffer = NULL; - ULONG OldTrkNum; - ULONG TrkNum; - ULONG ReadBytes; + ULONG OldTrkNum = 0; + ULONG TrkNum = 0; + ULONG ReadBytes = 0; SIZE_T i, len; *SessionStartLba = 0; @@ -911,8 +911,8 @@ UDFGetDiskInfo( try_return(RC); } - ULONG SessionStart; - ULONG SessionEnd; + ULONG SessionStart = 0; + ULONG SessionEnd = 0; RC = UDFDetermineVolumeLayout(IrpContext, DeviceObject, Vcb, &SessionStart, &SessionEnd); @@ -1006,7 +1006,7 @@ UDFPrepareForReadOperation( #ifdef _UDF_STRUCTURES_H_ if (Vcb->BSBM_Bitmap) { - ULONG i; + ULONG i = 0; for(i=0; iBSBM_Bitmap), Lba+i)) { UDFPrint(("R: Known BB @ %#x\n", Lba)); @@ -1056,8 +1056,8 @@ UDFReadInSector( ) { int8* tmp_buff; - NTSTATUS status; - ULONG _ReadBytes; + NTSTATUS status = STATUS_SUCCESS; + ULONG _ReadBytes = 0; (*ReadBytes) = 0; @@ -1095,7 +1095,7 @@ UDFReadData( { uint32 i, l, Lba, BS=Vcb->SectorSize; uint32 BSh=Vcb->SectorShift; - NTSTATUS status; + NTSTATUS status = STATUS_SUCCESS; ULONG _ReadBytes = 0; uint32 to_read; @@ -1153,7 +1153,7 @@ UDFWriteSectors( OUT PSIZE_T WrittenBytes ) { - NTSTATUS status; + NTSTATUS status = STATUS_SUCCESS; if (!Vcb->Modified || (Vcb->IntegrityType == INTEGRITY_TYPE_CLOSE)) { UDFSetModified(Vcb); @@ -1187,9 +1187,9 @@ UDFWriteInSector( ) { int8* tmp_buff; - NTSTATUS status; + NTSTATUS status = STATUS_SUCCESS; SIZE_T _WrittenBytes; - ULONG ReadBytes; + ULONG ReadBytes = 0; if (!Vcb->Modified) { UDFSetModified(Vcb); @@ -1252,7 +1252,7 @@ UDFWriteData( { uint32 i, l, Lba, BS=Vcb->SectorSize; uint32 BSh=Vcb->SectorShift; - NTSTATUS status; + NTSTATUS status = STATUS_SUCCESS; SIZE_T _WrittenBytes; (*WrittenBytes) = 0; diff --git a/drivers/filesystems/udfs/Include/regtools.cpp b/drivers/filesystems/udfs/Include/regtools.cpp index 1b75c0c07eb3e..d8a227074c64f 100644 --- a/drivers/filesystems/udfs/Include/regtools.cpp +++ b/drivers/filesystems/udfs/Include/regtools.cpp @@ -17,7 +17,7 @@ RegTGetKeyHandle( { OBJECT_ATTRIBUTES ObjectAttributes; UNICODE_STRING NameString; - NTSTATUS status; + NTSTATUS status = STATUS_SUCCESS; //UDFPrint(("RegTGetKeyHandle: h=%x, %S\n", hRootKey, KeyName)); @@ -107,8 +107,8 @@ RegTGetDwordValue( UNICODE_STRING NameString; PKEY_VALUE_PARTIAL_INFORMATION ValInfo; #endif //WIN_32_MODE - ULONG len; - NTSTATUS status; + ULONG len = 0; + NTSTATUS status = STATUS_SUCCESS; HKEY hKey; BOOLEAN retval = FALSE; BOOLEAN free_h = FALSE; @@ -198,8 +198,8 @@ RegTGetStringValue( UNICODE_STRING NameString; PKEY_VALUE_PARTIAL_INFORMATION ValInfo; #endif //USER_MODE - ULONG len; - NTSTATUS status; + ULONG len = 0; + NTSTATUS status = STATUS_SUCCESS; HKEY hKey; BOOLEAN retval = FALSE; BOOLEAN free_h = FALSE; diff --git a/drivers/filesystems/udfs/Include/string_lib.cpp b/drivers/filesystems/udfs/Include/string_lib.cpp index 1750feb27ff16..bc3ceab171576 100644 --- a/drivers/filesystems/udfs/Include/string_lib.cpp +++ b/drivers/filesystems/udfs/Include/string_lib.cpp @@ -12,7 +12,7 @@ MyRtlCompareMemory( ULONG len ) { - ULONG i; + ULONG i = 0; for(i=0; iLength != s2->Length) return (-1); i = memcmp(s1->Buffer, s2->Buffer, (s1->Length) ? (s1->Length) : (s2->Length)); diff --git a/drivers/filesystems/udfs/cleanup.cpp b/drivers/filesystems/udfs/cleanup.cpp index 4a42b7da33427..9d358b5ac7186 100644 --- a/drivers/filesystems/udfs/cleanup.cpp +++ b/drivers/filesystems/udfs/cleanup.cpp @@ -50,6 +50,7 @@ UDFCommonCleanup( { IO_STATUS_BLOCK IoStatus; NTSTATUS RC = STATUS_SUCCESS; + NTSTATUS RC2 = STATUS_SUCCESS; PFILE_OBJECT FileObject = NULL; PFCB Fcb = NULL; PCCB Ccb = NULL; @@ -77,13 +78,13 @@ UDFCommonCleanup( return STATUS_SUCCESS; } - // Get the file object out of the Irp and decode the type of open. + // Get the file object out of the Irp and decode the type of open. FileObject = IoGetCurrentIrpStackLocation(Irp)->FileObject; TypeOfOpen = UDFDecodeFileObject(FileObject, &Fcb, &Ccb); - // No work here for either an UnopenedFile object or a StreamFileObject. + // No work here for either an UnopenedFile object or a StreamFileObject. if (TypeOfOpen <= StreamFileOpen) { @@ -154,6 +155,8 @@ UDFCommonCleanup( // we've cached close InterlockedDecrement((PLONG)&Fcb->CachedOpenHandleCount); } + ASSERT(Fcb->FcbCleanup <= (Fcb->FcbReference-1)); + MmPrint((" CcUninitializeCacheMap()\n")); CcUninitializeCacheMap(FileObject, NULL, NULL); @@ -171,29 +174,30 @@ UDFCommonCleanup( AcquiredVcb = TRUE; } - // Acquire current object only - // Parent is acquired later only for delete operations (Child → Parent order) + // Acquire parent object + if (Fcb->FileInfo->ParentFile) { + UDF_CHECK_PAGING_IO_RESOURCE(Fcb->FileInfo->ParentFile->Fcb); + UDFAcquireResourceExclusive(&(Fcb->FileInfo->ParentFile->Fcb->FcbNonpaged->FcbResource), TRUE); + } else { + UDFAcquireResourceShared(&(Vcb->VcbResource), TRUE); + } + AcquiredParentFCB = TRUE; + // Acquire current object UDF_CHECK_PAGING_IO_RESOURCE(Fcb); - UDFAcquireFcbExclusive(IrpContext, Fcb, FALSE); + UDFAcquireResourceExclusive(&Fcb->FcbNonpaged->FcbResource, TRUE); AcquiredFCB = TRUE; // Decrement the cleanup counts in the Vcb and Fcb. - // Also decrement LCB reference count. UDFLockVcb(IrpContext, Vcb); UDFDecrementCleanupCounts(IrpContext, Fcb); - if (Ccb->Lcb) { - ASSERT(Ccb->Lcb->Reference > 0); - Ccb->Lcb->Reference--; - } UDFUnlockVcb(IrpContext, Vcb); if (FileObject->Flags & FO_CACHE_SUPPORTED) { // we've cached close InterlockedDecrement((PLONG)&Fcb->CachedOpenHandleCount); } - // No ASSERT on FcbCleanup vs FcbReference here - FcbCleanup - // can be temporarily bumped by try-lock reordering in create.cpp + ASSERT(Fcb->FcbCleanup <= (Fcb->FcbReference-1)); // check if Ccb being cleaned up has DeleteOnClose flag set if (Ccb->Flags & UDF_CCB_DELETE_ON_CLOSE) { @@ -224,147 +228,181 @@ UDFCommonCleanup( // get Link count lc = UDFGetFileLinkCount(Fcb->FileInfo); - NextFileInfo = Fcb->FileInfo; - - // Attempt delete if this is the last cleanup and DELETE_ON_CLOSE is set - if ((Fcb->FcbState & UDF_FCB_DELETE_ON_CLOSE) && + if ( (Fcb->FcbState & UDF_FCB_DELETE_ON_CLOSE) && !(Fcb->FcbCleanup)) { - - BOOLEAN DeleteAttempted = FALSE; - // This can be useful for Streams, those were brutally deleted // (together with parent object) ASSERT(!(Fcb->FcbState & UDF_FCB_ROOT_DIRECTORY)); FileObject->DeletePending = TRUE; - // Check if directory is non-empty — if so, discard delete - if ((Fcb->FcbState & UDF_FCB_DIRECTORY) && - !UDFIsDirEmpty__(NextFileInfo)) { + // we should mark all streams of the file being deleted + // for deletion too, if there are no more Links to + // main data stream + if ((lc <= 1) && + !UDFIsSDirDeleted(Fcb->FileInfo->Dloc->SDirInfo)) { + RC = UDFMarkStreamsForDeletion(IrpContext, Vcb, Fcb, TRUE); // Delete + } + // we can release these resources 'cause UDF_FCB_DELETE_ON_CLOSE + // flag is already set & the file can't be opened + UDF_CHECK_PAGING_IO_RESOURCE(Fcb); + UDFReleaseResource(&Fcb->FcbNonpaged->FcbResource); + AcquiredFCB = FALSE; + if (Fcb->FileInfo->ParentFile) { + UDF_CHECK_PAGING_IO_RESOURCE(Fcb->ParentFcb); + UDFReleaseResource(&Fcb->ParentFcb->FcbNonpaged->FcbResource); + } else { + UDFReleaseResource(&Vcb->VcbResource); + } + AcquiredParentFCB = FALSE; + UDFReleaseResource(&(Vcb->VcbResource)); + AcquiredVcb = FALSE; - Fcb->FcbState &= ~UDF_FCB_DELETE_ON_CLOSE; + // Make system to issue last Close request + // for our Target ... - } else { +#ifdef UDF_DELAYED_CLOSE + UDFFspClose(Fcb->Vcb); +#endif //UDF_DELAYED_CLOSE - DeleteAttempted = TRUE; + UDFAcquireResourceShared(&Vcb->VcbResource, TRUE); + AcquiredVcb = TRUE; + if (Fcb->FileInfo->ParentFile) { + UDF_CHECK_PAGING_IO_RESOURCE(Fcb->ParentFcb); + UDFAcquireResourceExclusive(&(Fcb->ParentFcb->FcbNonpaged->FcbResource), TRUE); + } else { + UDFAcquireResourceShared(&Vcb->VcbResource, TRUE); + } + AcquiredParentFCB = TRUE; + UDF_CHECK_PAGING_IO_RESOURCE(Fcb); + UDFAcquireResourceExclusive(&Fcb->FcbNonpaged->FcbResource, TRUE); + AcquiredFCB = TRUE; + + // we should set file sizes to zero if there are no more + // links to this file + if (lc <= 1) { + // Synchronize here with paging IO + UDFAcquireResourceExclusive(&Fcb->FcbNonpaged->FcbPagingIoResource, TRUE); + // set file size to zero (for system cache manager) +// Fcb->CommonFCBHeader.ValidDataLength.QuadPart = + Fcb->Header.FileSize.QuadPart = + Fcb->Header.ValidDataLength.QuadPart = 0; + CcSetFileSizes(FileObject, (PCC_FILE_SIZES)&Fcb->Header.AllocationSize); + + UDFReleaseResource(&Fcb->FcbNonpaged->FcbPagingIoResource); + } + } - // Mark all streams for deletion if no more links - if ((lc <= 1) && - !UDFIsSDirDeleted(Fcb->FileInfo->Dloc->SDirInfo)) { - RC = UDFMarkStreamsForDeletion(IrpContext, Vcb, Fcb, TRUE); // Delete - } +#ifdef UDF_DELAYED_CLOSE + if ((Fcb->FcbReference == 1) && + /*(Fcb->NodeIdentifier.NodeType != UDF_NODE_TYPE_VCB) &&*/ // see above + (!(Fcb->FcbState & UDF_FCB_DELETE_ON_CLOSE)) ) { + Fcb->FcbState |= UDF_FCB_DELAY_CLOSE; + } +#endif //UDF_DELAYED_CLOSE - // Acquire parent for delete operation (after current — child first order) - if (Fcb->FileInfo->ParentFile) { - UDF_CHECK_PAGING_IO_RESOURCE(Fcb->ParentFcb); - UDFAcquireFcbExclusive(IrpContext, Fcb->ParentFcb, FALSE); - AcquiredParentFCB = TRUE; - } + NextFileInfo = Fcb->FileInfo; - // Note: do NOT set file sizes to zero here before unlink. - // If unlink fails (STATUS_CANNOT_DELETE), the file stays visible - // with FSize=0 — other threads see truncated data. + // do we need to delete it now ? + if ( (Fcb->FcbState & UDF_FCB_DELETE_ON_CLOSE) && + !(Fcb->FcbCleanup)) { - // Mark parent object for deletion if requested - if ((Fcb->FcbState & UDF_FCB_DELETE_PARENT) && - Fcb->ParentFcb) { - ASSERT(!(Fcb->ParentFcb->FcbState & UDF_FCB_ROOT_DIRECTORY)); - Fcb->ParentFcb->FcbState |= UDF_FCB_DELETE_ON_CLOSE; + // can we do it ? + if (Fcb->FcbState & UDF_FCB_DIRECTORY) { + ASSERT(!(Fcb->FcbState & UDF_FCB_ROOT_DIRECTORY)); + if (!UDFIsDirEmpty__(NextFileInfo)) { + // forget about it + Fcb->FcbState &= ~UDF_FCB_DELETE_ON_CLOSE; + goto DiscardDelete; } - - // Flush file. It is required by UDFUnlinkFile__() - RC = UDFFlushFile__(IrpContext, Vcb, NextFileInfo); - if (!NT_SUCCESS(RC)) { - AdPrint(("Error flushing file !!!\n")); + } else + if (lc <= 1) { + // Synchronize here with paging IO + BOOLEAN AcquiredPagingIo = FALSE; + AcquiredPagingIo = UDFAcquireResourceExclusiveWithCheck(&Fcb->FcbNonpaged->FcbPagingIoResource); + // set file size to zero (for UdfInfo package) + // we should not do this for directories and linked files + UDFResizeFile__(IrpContext, Vcb, NextFileInfo, 0); + if (AcquiredPagingIo) { + UDFReleaseResource(&Fcb->FcbNonpaged->FcbPagingIoResource); } - - // Try to unlink - RC = UDFUnlinkFile__(IrpContext, Vcb, NextFileInfo, TRUE); - - if (RC == STATUS_CANNOT_DELETE) { - - if (NextFileInfo->Dloc && - NextFileInfo->Dloc->SDirInfo && - NextFileInfo->Dloc->SDirInfo->Fcb) { - - // Can't delete file with open streams — pretend deleted. - // Streams will trigger parent deletion on their cleanup. - BrutePoint(); - if (!UDFIsSDirDeleted(NextFileInfo->Dloc->SDirInfo)) { - UDFPretendFileDeleted__(Vcb, Fcb->FileInfo); - } - - } else { - - // Can't delete due to references/permissions/other. - BrutePoint(); - ForcedCleanUp = TRUE; - Fcb->FcbState |= UDF_FCB_DELETED; - // Remove LCB from parent's splay trees immediately. - // Parent is held exclusive (AcquiredParentFCB). - if (Ccb->Lcb && Ccb->Lcb->ParentFcb) { - UdfRemoveNameLinks(Ccb->Lcb->ParentFcb, Ccb->Lcb); - } - RC = STATUS_SUCCESS; + } + // mark parent object for deletion if requested + if ((Fcb->FcbState & UDF_FCB_DELETE_PARENT) && + Fcb->ParentFcb) { + ASSERT(!(Fcb->ParentFcb->FcbState & UDF_FCB_ROOT_DIRECTORY)); + Fcb->ParentFcb->FcbState |= UDF_FCB_DELETE_ON_CLOSE; + } + // flush file. It is required by UDFUnlinkFile__() + RC = UDFFlushFile__(IrpContext, Vcb, NextFileInfo); + if (!NT_SUCCESS(RC)) { + AdPrint(("Error flushing file !!!\n")); + } + // try to unlink + if ((RC = UDFUnlinkFile__(IrpContext, Vcb, NextFileInfo, TRUE)) == STATUS_CANNOT_DELETE) { + // If we can't delete file with Streams due to references, + // mark SDir & Streams + // for Deletion. We shall also set DELETE_PARENT flag to + // force Deletion of the current file later... when curently + // opened Streams would be cleaned up. + + // WARNING! We should keep SDir & Streams if there is a + // link to this file + if (NextFileInfo->Dloc && + NextFileInfo->Dloc->SDirInfo && + NextFileInfo->Dloc->SDirInfo->Fcb) { + + BrutePoint(); + if (!UDFIsSDirDeleted(NextFileInfo->Dloc->SDirInfo)) { +// RC = UDFMarkStreamsForDeletion(Vcb, Fcb, TRUE); // Delete +//#ifdef UDF_ALLOW_PRETEND_DELETED + UDFPretendFileDeleted__(Vcb, Fcb->FileInfo); +//#endif //UDF_ALLOW_PRETEND_DELETED } + goto NotifyDelete; } else { - - // Unlink completed (success or other error) — mark as deleted - ASSERT(!(Fcb->FcbState & UDF_FCB_ROOT_DIRECTORY)); - ForcedCleanUp = TRUE; - if (NT_SUCCESS(RC)) - Fcb->FcbState &= ~UDF_FCB_DELETE_ON_CLOSE; - Fcb->FcbState |= UDF_FCB_DELETED; - // Remove LCB from parent's splay trees immediately. - // Parent is held exclusive (AcquiredParentFCB). - if (Ccb->Lcb && Ccb->Lcb->ParentFcb) { - UdfRemoveNameLinks(Ccb->Lcb->ParentFcb, Ccb->Lcb); - } - // Note: do NOT call CcSetFileSizes(0) here. - // CcUninitializeCacheMap with TruncateSize=0 below (ForcedCleanUp path) - // already purges the cache. Setting Fcb->Header.FileSize=0 here would - // leave a stale FCB with FSize=0 in the prefix table — if the FCB is - // reused (e.g., by rename), the renamed file appears as 0-byte. - RC = STATUS_SUCCESS; + // Getting here means that we can't delete file because of + // References/PemissionsDenied/Smth.Else, + // but not Linked+OpenedStream + BrutePoint(); +// RC = STATUS_SUCCESS; + goto DiscardDelete_1; } + } else { +DiscardDelete_1: + // We have got an ugly ERROR, or + // file is deleted, so forget about it + ASSERT(!(Fcb->FcbState & UDF_FCB_ROOT_DIRECTORY)); + ForcedCleanUp = TRUE; + if (NT_SUCCESS(RC)) + Fcb->FcbState &= ~UDF_FCB_DELETE_ON_CLOSE; + Fcb->FcbState |= UDF_FCB_DELETED; + RC = STATUS_SUCCESS; } - - if (DeleteAttempted) { - // Prevent SetEOF operations on completely deleted data streams - if (lc < 1) { - Fcb->NtReqFCBFlags |= UDF_NTREQ_FCB_DELETED; - } - // Report that we have removed an entry. - if (UDFIsAStream(NextFileInfo)) { - UDFNotifyReportChange( IrpContext, Vcb, NextFileInfo->Fcb, - FILE_NOTIFY_CHANGE_STREAM_NAME, - FILE_ACTION_REMOVED_STREAM, - Ccb->Lcb, FileObject); - } else { - UDFNotifyReportChange( IrpContext, Vcb, NextFileInfo->Fcb, - UDFIsADirectory(NextFileInfo) ? FILE_NOTIFY_CHANGE_DIR_NAME : FILE_NOTIFY_CHANGE_FILE_NAME, - FILE_ACTION_REMOVED, - Ccb->Lcb, FileObject); - } +NotifyDelete: + // We should prevent SetEOF operations on completly + // deleted data streams + if (lc < 1) { + Fcb->NtReqFCBFlags |= UDF_NTREQ_FCB_DELETED; + } + // Report that we have removed an entry. + if (UDFIsAStream(NextFileInfo)) { + UDFNotifyFullReportChange( Vcb, NextFileInfo->Fcb, + FILE_NOTIFY_CHANGE_STREAM_NAME, + FILE_ACTION_REMOVED_STREAM); } else { - // Delete discarded (e.g. non-empty directory) — notify modification - UDFNotifyReportChange( IrpContext, Vcb, NextFileInfo->Fcb, - ((Ccb->Flags & UDF_CCB_ACCESS_TIME_SET) ? FILE_NOTIFY_CHANGE_LAST_ACCESS : 0) | - ((Ccb->Flags & UDF_CCB_WRITE_TIME_SET) ? (FILE_NOTIFY_CHANGE_ATTRIBUTES | FILE_NOTIFY_CHANGE_LAST_WRITE) : 0) | - 0, - UDFIsAStream(NextFileInfo) ? FILE_ACTION_MODIFIED_STREAM : FILE_ACTION_MODIFIED, - Ccb->Lcb, FileObject); + UDFNotifyFullReportChange( Vcb, NextFileInfo->Fcb, + UDFIsADirectory(NextFileInfo) ? FILE_NOTIFY_CHANGE_DIR_NAME : FILE_NOTIFY_CHANGE_FILE_NAME, + FILE_ACTION_REMOVED); } - - } else if (Fcb->FcbState & UDF_FCB_DELETE_ON_CLOSE) { - - // DELETE_ON_CLOSE is set but FcbCleanup > 0 (other handles still open) - UDFNotifyReportChange( IrpContext, Vcb, NextFileInfo->Fcb, + } else + if (Fcb->FcbState & UDF_FCB_DELETE_ON_CLOSE) { +DiscardDelete: + UDFNotifyFullReportChange( Vcb, NextFileInfo->Fcb, ((Ccb->Flags & UDF_CCB_ACCESS_TIME_SET) ? FILE_NOTIFY_CHANGE_LAST_ACCESS : 0) | ((Ccb->Flags & UDF_CCB_WRITE_TIME_SET) ? (FILE_NOTIFY_CHANGE_ATTRIBUTES | FILE_NOTIFY_CHANGE_LAST_WRITE) : 0) | 0, - UDFIsAStream(NextFileInfo) ? FILE_ACTION_MODIFIED_STREAM : FILE_ACTION_MODIFIED, - Ccb->Lcb, FileObject); + UDFIsAStream(NextFileInfo) ? FILE_ACTION_MODIFIED_STREAM : FILE_ACTION_MODIFIED); } if (Fcb->FcbState & UDF_FCB_DIRECTORY) { @@ -422,7 +460,7 @@ UDFCommonCleanup( /* MmPrint((" CcPurgeCacheSection()\n")); CcPurgeCacheSection(&Fcb->SectionObject, NULL, 0, FALSE);*/ } - // we needn't Flush here. It will be done in UDFCloseFile__ + // we needn't Flush here. It will be done in UDFCloseFileInfoChain() } // Update FileTimes & Attrs @@ -437,7 +475,7 @@ UDFCommonCleanup( KeQuerySystemTime((PLARGE_INTEGER)&NtTime); // Check if we should set ARCHIVE bit & LastWriteTime if (FileObject->Flags & FO_FILE_MODIFIED) { - ULONG Attr; + ULONG Attr = 0; PDIR_INDEX_ITEM DirNdx; DirNdx = UDFDirIndex(UDFGetDirIndexByFileInfo(NextFileInfo), NextFileInfo->Index); ASSERT(DirNdx); @@ -472,19 +510,17 @@ UDFCommonCleanup( if (UDFIsAStream(Fcb->FileInfo)) { - UDFNotifyReportChange(IrpContext, Vcb, + UDFNotifyFullReportChange(Vcb, Fcb, FILE_NOTIFY_CHANGE_STREAM_SIZE, - FILE_ACTION_MODIFIED_STREAM, - Ccb->Lcb, FileObject); + FILE_ACTION_MODIFIED_STREAM); } else { - UDFNotifyReportChange(IrpContext, Vcb, + UDFNotifyFullReportChange(Vcb, Fcb, FILE_NOTIFY_CHANGE_SIZE, - FILE_ACTION_MODIFIED, - Ccb->Lcb, FileObject); + FILE_ACTION_MODIFIED); } } @@ -509,19 +545,6 @@ UDFCommonCleanup( } } - // Flush FE (File Entry) to disk on last cleanup of non-deleted files. - // This prevents a race in UDFTeardownStructures where the FCB is removed - // from the FCB table (line ~497) before UDFFlushFile__ writes the FE to - // disk (line ~520). Without this, a concurrent open between those two - // points reads stale FE from disk with informationLength=0. - if (!Fcb->FcbCleanup && - !ForcedCleanUp && - !(Fcb->FcbState & UDF_FCB_DELETED) && - !(Vcb->VcbState & VCB_STATE_VOLUME_READ_ONLY) && - NextFileInfo) { - UDFFlushFile__(IrpContext, Vcb, NextFileInfo); - } - if (!(Fcb->FcbState & UDF_FCB_DIRECTORY) && ForcedCleanUp) { // flush system cache @@ -533,20 +556,23 @@ UDFCommonCleanup( } // release resources now. - UDFReleaseFcb(IrpContext, Fcb); + // they'll be acquired in UDFCloseFileInfoChain() + UDF_CHECK_PAGING_IO_RESOURCE(Fcb); + UDFReleaseResource(&Fcb->FcbNonpaged->FcbResource); AcquiredFCB = FALSE; - if (AcquiredParentFCB && Fcb->FileInfo->ParentFile) { - UDFReleaseFcb(IrpContext, Fcb->FileInfo->ParentFile->Fcb); - AcquiredParentFCB = FALSE; + if (Fcb->FileInfo->ParentFile) { + UDF_CHECK_PAGING_IO_RESOURCE(Fcb->FileInfo->ParentFile->Fcb); + UDFReleaseResource(&Fcb->FileInfo->ParentFile->Fcb->FcbNonpaged->FcbResource); + } else { + UDFReleaseResource(&Vcb->VcbResource); } - - // Close the target file's FileInfo - this decrements FileInfo->RefCount - // Parent FileInfo references are now handled by LCB mechanism in UDFTeardownStructures + AcquiredParentFCB = FALSE; + // close the chain ASSERT(AcquiredVcb); - if (NextFileInfo) { - UDFCloseFile__(IrpContext, Vcb, NextFileInfo); - } + RC2 = UDFCloseFileInfoChain(IrpContext, Vcb, NextFileInfo, Ccb->TreeLength, TRUE); + if (NT_SUCCESS(RC)) + RC = RC2; Ccb->Flags |= UDF_CCB_CLEANED; @@ -564,15 +590,21 @@ try_exit: NOTHING; } _SEH2_FINALLY { if (AcquiredFCB) { - UDFReleaseFcb(IrpContext, Fcb); + UDF_CHECK_PAGING_IO_RESOURCE(Fcb); + UDFReleaseResource(&Fcb->FcbNonpaged->FcbResource); } - if (AcquiredParentFCB && Fcb->FileInfo->ParentFile) { - UDFReleaseFcb(IrpContext, Fcb->FileInfo->ParentFile->Fcb); + if (AcquiredParentFCB) { + if (Fcb->FileInfo->ParentFile) { + UDF_CHECK_PAGING_IO_RESOURCE(Fcb->FileInfo->ParentFile->Fcb); + UDFReleaseResource(&Fcb->FileInfo->ParentFile->Fcb->FcbNonpaged->FcbResource); + } else { + UDFReleaseResource(&Vcb->VcbResource); + } } if (AcquiredVcb) { - UDFReleaseVcb(IrpContext, Vcb); + UDFReleaseResource(&Vcb->VcbResource); AcquiredVcb = FALSE; } @@ -590,6 +622,85 @@ try_exit: NOTHING; return(RC); } // end UDFCommonCleanup() +/* + This routine walks through the tree to RootDir & + calls UDFCloseFile__() for each file instance + imho, Useful feature + */ +NTSTATUS +UDFCloseFileInfoChain( + IN PIRP_CONTEXT IrpContext, + IN PVCB Vcb, + IN PUDF_FILE_INFO fi, + IN ULONG TreeLength, + IN BOOLEAN VcbAcquired + ) +{ + PUDF_FILE_INFO ParentFI; + PFCB Fcb; + PFCB ParentFcb = NULL; + NTSTATUS RC = STATUS_SUCCESS; + NTSTATUS RC2 = STATUS_SUCCESS; + + // we can't process Tree until we can acquire Vcb + if (!VcbAcquired) + UDFAcquireResourceShared(&(Vcb->VcbResource),TRUE); + + AdPrint(("UDFCloseFileInfoChain\n")); + for(; TreeLength && fi; TreeLength--) { + + // close parent chain (if any) + // if we started path parsing not from RootDir on Create, + // we would never get RootDir here + ValidateFileInfo(fi); + + // acquire parent + if ((ParentFI = fi->ParentFile)) { + ParentFcb = fi->Fcb->ParentFcb; + ASSERT(ParentFcb); + UDF_CHECK_PAGING_IO_RESOURCE(ParentFcb); + UDFAcquireResourceExclusive(&ParentFcb->FcbNonpaged->FcbResource, TRUE); + ASSERT_FCB(ParentFcb); + } else { + AdPrint(("Acquiring VCB...\n")); + UDFAcquireResourceShared(&Vcb->VcbResource, TRUE); + AdPrint(("Done\n")); + } + // acquire current file/dir + // we must assure that no more threads try to reuse this object + if ((Fcb = fi->Fcb)) { + UDF_CHECK_PAGING_IO_RESOURCE(Fcb); + UDFAcquireResourceExclusive(&Fcb->FcbNonpaged->FcbResource, TRUE); + ASSERT(Fcb->FcbReference >= fi->RefCount); + RC2 = UDFCloseFile__(IrpContext, Vcb, fi); + if (!NT_SUCCESS(RC2)) + RC = RC2; + ASSERT(Fcb->FcbReference > fi->RefCount); + UDF_CHECK_PAGING_IO_RESOURCE(Fcb); + UDFReleaseResource(&Fcb->FcbNonpaged->FcbResource); + } else { + BrutePoint(); + RC2 = UDFCloseFile__(IrpContext, Vcb, fi); + if (!NT_SUCCESS(RC2)) + RC = RC2; + } + + if (ParentFI) { + UDF_CHECK_PAGING_IO_RESOURCE(ParentFcb); + UDFReleaseResource(&ParentFcb->FcbNonpaged->FcbResource); + } else { + UDFReleaseResource(&Vcb->VcbResource); + } + fi = ParentFI; + } + + if (!VcbAcquired) + UDFReleaseResource(&Vcb->VcbResource); + + return RC; + +} // end UDFCloseFileInfoChain() + VOID UDFAutoUnlock ( IN PVCB Vcb diff --git a/drivers/filesystems/udfs/close.cpp b/drivers/filesystems/udfs/close.cpp index 88b74886c080c..7a62cbc191602 100644 --- a/drivers/filesystems/udfs/close.cpp +++ b/drivers/filesystems/udfs/close.cpp @@ -470,7 +470,7 @@ Return Value: --*/ { - BOOLEAN RemovedFcb; + BOOLEAN RemovedFcb = FALSE; PAGED_CODE(); @@ -560,7 +560,7 @@ Return Value: THREAD_CONTEXT ThreadContext = {0}; PFCB Fcb; - ULONG UserReference; + ULONG UserReference = 0; ULONG VcbHoldCount = 0; PVCB CurrentVcb = NULL; diff --git a/drivers/filesystems/udfs/devcntrl.cpp b/drivers/filesystems/udfs/devcntrl.cpp index dd0bb0a651baf..adb9cff4e497a 100644 --- a/drivers/filesystems/udfs/devcntrl.cpp +++ b/drivers/filesystems/udfs/devcntrl.cpp @@ -96,16 +96,24 @@ UdfIsVolumeModifyingScsiOp( NTSTATUS UDFCommonDevControl(PIRP_CONTEXT IrpContext, PIRP Irp) { + BOOLEAN FcbAcquired = FALSE; BOOLEAN DeviceAcquired = FALSE; BOOLEAN IsOpticalWriteRModeActive = FALSE; PIO_STACK_LOCATION IrpSp = IoGetCurrentIrpStackLocation(Irp); + BOOLEAN CanWait = FALSE; PCDB Cdb = NULL; PVCB Vcb; PFCB Fcb; PCCB Ccb; - NTSTATUS Status; + NTSTATUS Status = STATUS_SUCCESS; TYPE_OF_OPEN TypeOfOpen; - ULONG IoControlCode; + ULONG IoControlCode = 0; + + PAGED_CODE(); + + UDFPrint(("UDFCommonDevControl\n")); + UDFPrint(("Irp = %p\n", Irp)); + UDFPrint(("MinorFunction = %08lx\n", IrpSp->MinorFunction)); PAGED_CODE(); @@ -127,10 +135,13 @@ UDFCommonDevControl(PIRP_CONTEXT IrpContext, PIRP Irp) IsOpticalWriteRModeActive = TRUE; } + CanWait = FlagOn(IrpContext->Flags, IRP_CONTEXT_FLAG_WAIT); + if (TypeOfOpen == UserFileOpen) { UDF_CHECK_PAGING_IO_RESOURCE(Fcb); - UDFAcquireFcbShared(IrpContext, Fcb, FALSE); + UDFAcquireResourceShared(&Fcb->FcbNonpaged->FcbResource, CanWait); + FcbAcquired = TRUE; _SEH2_TRY { @@ -173,7 +184,10 @@ UDFCommonDevControl(PIRP_CONTEXT IrpContext, PIRP Irp) if (DeviceAcquired) UDFReleaseDevice(IrpContext, Vcb, NULL); - UDFReleaseFcb(IrpContext, Fcb); + if (FcbAcquired) { + UDF_CHECK_PAGING_IO_RESOURCE(Fcb); + UDFReleaseResource(&Fcb->FcbNonpaged->FcbResource); + } } _SEH2_END; return Status; @@ -218,7 +232,7 @@ UDFCommonDevControl(PIRP_CONTEXT IrpContext, PIRP Irp) if (!FlagOn(Vcb->VcbState, VCB_STATE_PNP_NOTIFICATION)) { - UDFAcquireVcbExclusive(IrpContext, Vcb, FALSE); + UDFAcquireResourceExclusive(&Vcb->VcbResource, CanWait); if (Vcb->VcbCondition == VcbMounted && FALSE /*IsWritableOpticalMedia()*/) { @@ -233,7 +247,7 @@ UDFCommonDevControl(PIRP_CONTEXT IrpContext, PIRP Irp) } } - UDFReleaseVcb(IrpContext, Vcb); + UDFReleaseResource(&(Vcb->VcbResource)); } break; diff --git a/drivers/filesystems/udfs/dircntrl.cpp b/drivers/filesystems/udfs/dircntrl.cpp index c9b2f7d62cf64..ef515e5b01277 100644 --- a/drivers/filesystems/udfs/dircntrl.cpp +++ b/drivers/filesystems/udfs/dircntrl.cpp @@ -156,9 +156,9 @@ UDFQueryDirectory( BOOLEAN FirstTimeQuery = FALSE; LONG NextMatch = 0; LONG PrevMatch = -1; - ULONG CurrentOffset; - ULONG BaseLength; - ULONG FileNameBytes; + ULONG CurrentOffset = 0; + ULONG BaseLength = 0; + ULONG FileNameBytes = 0; ULONG Information = 0; ULONG LastOffset = 0; BOOLEAN AtLeastOneFound = FALSE; @@ -168,7 +168,7 @@ UDFQueryDirectory( PFILE_BOTH_DIR_INFORMATION BothDirInformation = NULL; // Pointer in callers buffer PFILE_NAMES_INFORMATION NamesInfo; PFILE_ID_BOTH_DIR_INFORMATION IdBothDirInfo = NULL; - ULONG BytesRemainingInBuffer; + ULONG BytesRemainingInBuffer = 0; PHASH_ENTRY cur_hashes = NULL; PDIR_INDEX_ITEM DirNdx; // do some pre-init... diff --git a/drivers/filesystems/udfs/env_spec.cpp b/drivers/filesystems/udfs/env_spec.cpp index 52e1cb5382576..c12fb9d9e401f 100644 --- a/drivers/filesystems/udfs/env_spec.cpp +++ b/drivers/filesystems/udfs/env_spec.cpp @@ -342,7 +342,7 @@ UDFTSendIOCTL( ) { NTSTATUS RC = STATUS_SUCCESS; - BOOLEAN Acquired; + BOOLEAN Acquired = FALSE; Acquired = UDFAcquireResourceExclusiveWithCheck(&(Vcb->IoResource)); diff --git a/drivers/filesystems/udfs/fastio.cpp b/drivers/filesystems/udfs/fastio.cpp index 9bdbac17b3f40..caf6f8dcf6672 100644 --- a/drivers/filesystems/udfs/fastio.cpp +++ b/drivers/filesystems/udfs/fastio.cpp @@ -899,7 +899,7 @@ UDFFastIoAcqModWrite( // For embedded data files, acquire exclusive since data shares sector with metadata // For normal files, shared is enough - BOOLEAN Acquired; + BOOLEAN Acquired = FALSE; if (Fcb->FcbState & UDF_FCB_EMBEDDED_DATA) { Acquired = UDFAcquireResourceExclusive(&Fcb->FcbNonpaged->FcbResource, FALSE); } else { diff --git a/drivers/filesystems/udfs/flush.cpp b/drivers/filesystems/udfs/flush.cpp index 65240f50e2a7e..205c6676d8f25 100644 --- a/drivers/filesystems/udfs/flush.cpp +++ b/drivers/filesystems/udfs/flush.cpp @@ -112,9 +112,11 @@ UDFCommonFlush( // action we take. if ((Fcb == Fcb->Vcb->VolumeDasdFcb) || (Fcb->FcbState & UDF_FCB_ROOT_DIRECTORY)) { +#ifdef UDF_DELAYED_CLOSE UDFFspClose(Vcb); +#endif //UDF_DELAYED_CLOSE - UDFAcquireVcbExclusive(IrpContext, Vcb, FALSE); + UDFAcquireResourceExclusive(&(Vcb->VcbResource), TRUE); AcquiredVCB = TRUE; // The caller wishes to flush all files for the mounted // logical volume. The flush volume routine below should simply @@ -127,7 +129,7 @@ UDFCommonFlush( UDFFlushVolume(IrpContext, Vcb); - UDFReleaseVcb(IrpContext, Vcb); + UDFReleaseResource(&(Vcb->VcbResource)); AcquiredVCB = FALSE; try_return(Status); @@ -137,18 +139,16 @@ UDFCommonFlush( Vcb = Fcb->Vcb; ASSERT(Vcb); - // Child-first lock ordering - UDF_CHECK_PAGING_IO_RESOURCE(Fcb); - UDFAcquireFcbExclusive(IrpContext, Fcb, FALSE); - AcquiredFCB = TRUE; - - // Parent second (needed for DirIndex modification in UDFSetFileSizeInDirNdx) if (Fcb->FileInfo->ParentFile && Fcb->FileInfo->ParentFile->Fcb) { UDF_CHECK_PAGING_IO_RESOURCE(Fcb->FileInfo->ParentFile->Fcb); - UDFAcquireFcbExclusive(IrpContext, Fcb->FileInfo->ParentFile->Fcb, FALSE); + UDFAcquireResourceExclusive(&Fcb->FileInfo->ParentFile->Fcb->FcbNonpaged->FcbResource, TRUE); AcquiredParentFcb = TRUE; } + UDF_CHECK_PAGING_IO_RESOURCE(Fcb); + UDFAcquireResourceExclusive(&Fcb->FcbNonpaged->FcbResource, TRUE); + AcquiredFCB = TRUE; + // Request the Cache Manager to perform a flush operation. // Further, instruct the Cache Manager that we wish to flush the // entire file stream. @@ -168,25 +168,26 @@ try_exit: NOTHING; } _SEH2_FINALLY { - // Release in reverse order of acquisition (parent first, then child) - if (AcquiredParentFcb) { - UDFReleaseFcb(IrpContext, Fcb->FileInfo->ParentFile->Fcb); - AcquiredParentFcb = FALSE; - } - if (AcquiredFCB) { - UDFReleaseFcb(IrpContext, Fcb); + UDF_CHECK_PAGING_IO_RESOURCE(Fcb); + UDFReleaseResource(&Fcb->FcbNonpaged->FcbResource); AcquiredFCB = FALSE; } + if (AcquiredParentFcb) { + UDF_CHECK_PAGING_IO_RESOURCE(Fcb->FileInfo->ParentFile->Fcb); + UDFReleaseResource(&Fcb->FileInfo->ParentFile->Fcb->FcbNonpaged->FcbResource); + AcquiredParentFcb = FALSE; + } + if (AcquiredVCB) { - UDFReleaseVcb(IrpContext, Vcb); + UDFReleaseResource(&Vcb->VcbResource); AcquiredVCB = FALSE; } if (!_SEH2_AbnormalTermination()) { - NTSTATUS DriverStatus; + NTSTATUS DriverStatus = STATUS_SUCCESS; // Get the next stack location, and copy over the stack location @@ -304,7 +305,7 @@ UDFFlushAFile( _SEH2_TRY { if (SetArchive && (Fcb->Vcb->CompatFlags & UDF_VCB_IC_UPDATE_ARCH_BIT)) { - ULONG Attr; + ULONG Attr = 0; PDIR_INDEX_ITEM DirNdx; DirNdx = UDFDirIndex(UDFGetDirIndexByFileInfo(Fcb->FileInfo), Fcb->FileInfo->Index); // Archive bit @@ -626,7 +627,7 @@ Return Value: { KEVENT Event; - NTSTATUS Status; + NTSTATUS Status = STATUS_SUCCESS; PIO_STACK_LOCATION NextIrpSp; PAGED_CODE(); diff --git a/drivers/filesystems/udfs/fscntrl.cpp b/drivers/filesystems/udfs/fscntrl.cpp index 74982610e6a43..8b206c583b7a0 100644 --- a/drivers/filesystems/udfs/fscntrl.cpp +++ b/drivers/filesystems/udfs/fscntrl.cpp @@ -49,7 +49,7 @@ UDFCommonFsControl( PIRP Irp ) { - NTSTATUS Status; + NTSTATUS Status = STATUS_SUCCESS; PIO_STACK_LOCATION IrpSp = IoGetCurrentIrpStackLocation(Irp); PAGED_CODE(); @@ -108,7 +108,7 @@ UDFUserFsCtrlRequest( PIRP Irp ) { - NTSTATUS RC; + NTSTATUS RC = STATUS_SUCCESS; PIO_STACK_LOCATION IrpSp = IoGetCurrentIrpStackLocation(Irp); // Case on the control code. @@ -277,7 +277,7 @@ UDFMountVolume( IN PIRP Irp ) { - NTSTATUS RC; + NTSTATUS RC = STATUS_SUCCESS; PIO_STACK_LOCATION IrpSp = IoGetCurrentIrpStackLocation(Irp); PDEVICE_OBJECT DeviceObjectWeTalkTo = IrpSp->Parameters.MountVolume.DeviceObject; PVPB Vpb = IrpSp->Parameters.MountVolume.Vpb; @@ -288,7 +288,7 @@ UDFMountVolume( DEVICE_TYPE FsDeviceType; BOOLEAN RestoreDoVerify = FALSE; BOOLEAN RemovableMedia = TRUE; - BOOLEAN SetDoVerifyOnFail; + BOOLEAN SetDoVerifyOnFail = FALSE; BOOLEAN VcbAcquired = FALSE; BOOLEAN DeviceNotTouched = TRUE; DISK_GEOMETRY DiskGeometry; @@ -886,7 +886,7 @@ UDFLockVolume( IN PIRP Irp ) { - NTSTATUS Status; + NTSTATUS Status = STATUS_SUCCESS; PVCB Vcb; PFCB Fcb; PCCB Ccb; @@ -981,7 +981,7 @@ Return Value: --*/ { - NTSTATUS Status; + NTSTATUS Status = STATUS_SUCCESS; KIRQL SavedIrql; NTSTATUS FinalStatus = (FileObject? STATUS_ACCESS_DENIED: STATUS_DEVICE_BUSY); ULONG RemainingUserReferences = (FileObject? 1: 0); @@ -1071,7 +1071,7 @@ UDFUnlockVolume( IN PIRP Irp ) { - NTSTATUS Status; + NTSTATUS Status = STATUS_SUCCESS; PIO_STACK_LOCATION IrpSp = IoGetCurrentIrpStackLocation(Irp); PVCB Vcb; PFCB Fcb; @@ -1135,7 +1135,7 @@ UDFDismountVolume( IN PIRP Irp ) { - NTSTATUS Status; + NTSTATUS Status = STATUS_SUCCESS; KIRQL SavedIrql; PIO_STACK_LOCATION IrpSp = IoGetCurrentIrpStackLocation(Irp); @@ -1261,16 +1261,16 @@ UDFGetVolumeBitmap( PFCB Fcb; PCCB Ccb; PVCB Vcb = IrpContext->Vcb; - ULONG BytesToCopy; - ULONG TotalClusters; - ULONG StartingCluster; - ULONG DesiredClusters; - ULONG InputBufferLength; - ULONG OutputBufferLength; + ULONG BytesToCopy = 0; + ULONG TotalClusters = 0; + ULONG StartingCluster = 0; + ULONG DesiredClusters = 0; + ULONG InputBufferLength = 0; + ULONG OutputBufferLength = 0; LARGE_INTEGER StartingLcn; PVOLUME_BITMAP_BUFFER OutputBuffer; ULONG i, lim; - PULONG FSBM; + PULONG FSBM = NULL; BOOLEAN VcbAcquired = FALSE; ASSERT_VCB(Vcb); @@ -1411,13 +1411,13 @@ UDFGetRetrievalPointers( IN PIRP Irp ) { - NTSTATUS RC; + NTSTATUS RC = STATUS_SUCCESS; PIO_STACK_LOCATION IrpSp = IoGetCurrentIrpStackLocation(Irp); PUDF_FILE_INFO FileInfo; - ULONG InputBufferLength; - ULONG OutputBufferLength; + ULONG InputBufferLength = 0; + ULONG OutputBufferLength = 0; PRETRIEVAL_POINTERS_BUFFER OutputBuffer; PSTARTING_VCN_INPUT_BUFFER InputBuffer; @@ -1431,10 +1431,10 @@ UDFGetRetrievalPointers( TYPE_OF_OPEN TypeOfOpen; PEXTENT_MAP SubMapping = NULL; - ULONG SubExtInfoSz; - ULONG i; - ULONG LBS; - ULONG LBSh; + ULONG SubExtInfoSz = 0; + ULONG i = 0; + ULONG LBS = 0; + ULONG LBSh = 0; UDFPrint(("UDFGetRetrievalPointers\n")); @@ -1572,7 +1572,7 @@ UDFIsVolumeDirty( IN PIRP Irp ) { - PULONG VolumeState; + PULONG VolumeState = NULL; PIO_STACK_LOCATION IrpSp = IoGetCurrentIrpStackLocation(Irp); PCCB Ccb; PFCB Fcb; @@ -1663,7 +1663,7 @@ UDFInvalidateVolumes( IN PIRP Irp ) { - NTSTATUS Status; + NTSTATUS Status = STATUS_SUCCESS; PIO_STACK_LOCATION IrpSp = IoGetCurrentIrpStackLocation(Irp); UDFPrint(("UDFInvalidateVolumes\n")); diff --git a/drivers/filesystems/udfs/misc.cpp b/drivers/filesystems/udfs/misc.cpp index 75765fe90ce48..d8fae47167790 100644 --- a/drivers/filesystems/udfs/misc.cpp +++ b/drivers/filesystems/udfs/misc.cpp @@ -60,7 +60,7 @@ UDFExceptionFilter( PEXCEPTION_POINTERS ExceptionPointer ) { - NTSTATUS ExceptionCode; + NTSTATUS ExceptionCode = STATUS_SUCCESS; ASSERT_OPTIONAL_IRP_CONTEXT(IrpContext); @@ -733,7 +733,7 @@ Return Value: { PIO_STACK_LOCATION IrpSp = IoGetCurrentIrpStackLocation(Irp); - BOOLEAN RemovedFcb; + BOOLEAN RemovedFcb = FALSE; PAGED_CODE(); @@ -967,7 +967,7 @@ UDFFspDispatch( { THREAD_CONTEXT ThreadContext = { 0 }; PIRP_CONTEXT IrpContext = (PIRP_CONTEXT)Context; - NTSTATUS Status; + NTSTATUS Status = STATUS_SUCCESS; PIRP Irp = IrpContext->Irp; PIO_STACK_LOCATION IrpSp = IoGetCurrentIrpStackLocation(Irp); @@ -1742,7 +1742,7 @@ Return Value: { BOOLEAN Wait = FALSE; - BOOLEAN Acquired; + BOOLEAN Acquired = FALSE; PAGED_CODE(); // We look first at the IgnoreWait flag, next at the flag in the Irp diff --git a/drivers/filesystems/udfs/pnp.cpp b/drivers/filesystems/udfs/pnp.cpp index 55b1e02f0eeb3..1569d5312da4d 100644 --- a/drivers/filesystems/udfs/pnp.cpp +++ b/drivers/filesystems/udfs/pnp.cpp @@ -228,7 +228,7 @@ Return Value: --*/ { - NTSTATUS Status; + NTSTATUS Status = STATUS_SUCCESS; KEVENT Event; BOOLEAN VcbPresent = TRUE; @@ -399,7 +399,7 @@ Return Value: --*/ { - NTSTATUS Status; + NTSTATUS Status = STATUS_SUCCESS; KEVENT Event; BOOLEAN VcbPresent = TRUE; @@ -542,7 +542,7 @@ Return Value: --*/ { - NTSTATUS Status; + NTSTATUS Status = STATUS_SUCCESS; KEVENT Event; BOOLEAN VcbPresent = TRUE; @@ -660,7 +660,7 @@ Return Value: --*/ { - NTSTATUS Status; + NTSTATUS Status = STATUS_SUCCESS; PAGED_CODE(); diff --git a/drivers/filesystems/udfs/read.cpp b/drivers/filesystems/udfs/read.cpp index c920331dee579..e4658dc1f8f4d 100644 --- a/drivers/filesystems/udfs/read.cpp +++ b/drivers/filesystems/udfs/read.cpp @@ -56,8 +56,8 @@ UDFCommonRead( PIO_STACK_LOCATION IrpSp = IoGetCurrentIrpStackLocation(Irp); LONGLONG StartingOffset; LONGLONG ByteRange; - ULONG ReadLength; - ULONG ByteCount; + ULONG ReadLength = 0; + ULONG ByteCount = 0; ULONG NumberBytesRead = 0; LONGLONG FileSize; TYPE_OF_OPEN TypeOfOpen; @@ -68,10 +68,10 @@ UDFCommonRead( BOOLEAN FcbAcquired = FALSE; PVOID SystemBuffer = NULL; - BOOLEAN Wait; - BOOLEAN PagingIo; - BOOLEAN NonCachedIo; - BOOLEAN SynchronousIo; + BOOLEAN Wait = FALSE; + BOOLEAN PagingIo = FALSE; + BOOLEAN NonCachedIo = FALSE; + BOOLEAN SynchronousIo = FALSE; // Read request byte range visualization: // diff --git a/drivers/filesystems/udfs/secursup.cpp b/drivers/filesystems/udfs/secursup.cpp index 8328d7599e110..94484697ef2b8 100644 --- a/drivers/filesystems/udfs/secursup.cpp +++ b/drivers/filesystems/udfs/secursup.cpp @@ -29,7 +29,7 @@ UDFCheckAccessRights( USHORT ShareAccess ) { - NTSTATUS RC; + NTSTATUS RC = STATUS_SUCCESS; BOOLEAN ROCheck = FALSE; // Check attr compatibility diff --git a/drivers/filesystems/udfs/strucsup.cpp b/drivers/filesystems/udfs/strucsup.cpp index 6e746f30fc8a4..4c77bff08bc34 100644 --- a/drivers/filesystems/udfs/strucsup.cpp +++ b/drivers/filesystems/udfs/strucsup.cpp @@ -765,7 +765,7 @@ Return Value: { PFCB NewFcb; - BOOLEAN LocalFcbExisted; + BOOLEAN LocalFcbExisted = FALSE; PAGED_CODE(); @@ -1181,7 +1181,7 @@ UDFCompleteMount( IN PVCB Vcb ) { - NTSTATUS Status; + NTSTATUS Status = STATUS_SUCCESS; UNICODE_STRING LocalPath; ULONG LastSector = 0; BOOLEAN UnlockVcb = FALSE; diff --git a/drivers/filesystems/udfs/udf_dbg.cpp b/drivers/filesystems/udfs/udf_dbg.cpp index 0d16f8280a41e..547252df0c8b8 100644 --- a/drivers/filesystems/udfs/udf_dbg.cpp +++ b/drivers/filesystems/udfs/udf_dbg.cpp @@ -134,7 +134,7 @@ DbgWaitForSingleObject_( PLARGE_INTEGER to; LARGE_INTEGER dto; // LARGE_INTEGER cto; - NTSTATUS RC; + NTSTATUS RC = STATUS_SUCCESS; ULONG c = 20; dto.QuadPart = -5LL*1000000LL*10LL; // 5 sec diff --git a/drivers/filesystems/udfs/udf_info/alloc.cpp b/drivers/filesystems/udfs/udf_info/alloc.cpp index 530d6b168767e..e5b915ad9e1e0 100644 --- a/drivers/filesystems/udfs/udf_info/alloc.cpp +++ b/drivers/filesystems/udfs/udf_info/alloc.cpp @@ -546,7 +546,7 @@ UDFMarkSpaceAsXXXNoProtect_( uint32 root; BOOLEAN asUsed = (asXXX == AS_USED || (asXXX & AS_BAD)); #ifdef UDF_TRACK_ONDISK_ALLOCATION - BOOLEAN bit_before, bit_after; + BOOLEAN bit_before = FALSE, bit_after = FALSE; #endif //UDF_TRACK_ONDISK_ALLOCATION UDF_CHECK_BITMAP_RESOURCE(Vcb); diff --git a/drivers/filesystems/udfs/udf_info/mount.cpp b/drivers/filesystems/udfs/udf_info/mount.cpp index 62fa4048fc624..4a9bf382cc42b 100644 --- a/drivers/filesystems/udfs/udf_info/mount.cpp +++ b/drivers/filesystems/udfs/udf_info/mount.cpp @@ -59,12 +59,12 @@ UDFPrepareXSpaceBitmap( { uint32 BS, j, LBS; uint32 plen; - NTSTATUS status; + NTSTATUS status = STATUS_SUCCESS; EXTENT_MAP TmpExt; lb_addr locAddr; int8* _XSBM; uint16 Ident; - ULONG ReadBytes; + ULONG ReadBytes = 0; uint32 RefPartNum; if (!(XSpaceBitmap->extLength)) { @@ -472,10 +472,10 @@ UDFUpdateSparingTable( NTSTATUS status2 = STATUS_SUCCESS; uint32 i=0, BC, BC2; PSPARING_TABLE SparTable; - ULONG ReadBytes; + ULONG ReadBytes = 0; // uint32 n,m; // BOOLEAN merged; - BOOLEAN sorted; + BOOLEAN sorted = FALSE; UDFPrint(("UDF: Updating Sparable Part Map:\n")); if (!Vcb->SparingTableModified) return STATUS_SUCCESS; @@ -679,7 +679,7 @@ UDFUpdateVDS( IN uint32 flags ) { - NTSTATUS status; + NTSTATUS status = STATUS_SUCCESS; int8* Buf = (int8*)DbgAllocatePool(NonPagedPool,Vcb->SectorSize); UDF_VDS_RECORD vds[VDS_POS_LENGTH]; uint32 i,j; @@ -813,7 +813,7 @@ UDFUpdateVolIdent( { #define CUR_IDENT_SZ (sizeof(pvoldesc->volIdent)) PrimaryVolDesc* pvoldesc = (PrimaryVolDesc*)MyAllocatePool__(NonPagedPool, max(Vcb->SectorSize, sizeof(PrimaryVolDesc)) ); - NTSTATUS status; + NTSTATUS status = STATUS_SUCCESS; dstring CS0[CUR_IDENT_SZ]; uint16 ident; SIZE_T WrittenBytes; @@ -1013,7 +1013,7 @@ UDFFindAnchorVolumeDescriptor( uint16 ident; uint32 i; uint32 LastBlock; - NTSTATUS status; + NTSTATUS status = STATUS_SUCCESS; int8* Buf = (int8*)MyAllocatePool__(NonPagedPool, ROUND_TO_PAGES(SectorAlign(Vcb, sizeof(AnchorVolDescPtr)))); @@ -1086,9 +1086,9 @@ UDFFindVRS( uint32 offset; uint32 retStat = 0; uint32 BeginOffset = Vcb->FirstLBA; - NTSTATUS RC; + NTSTATUS RC = STATUS_SUCCESS; int8* buffer = (int8*)MyAllocatePool__(NonPagedPool,Vcb->SectorSize); - ULONG ReadBytes; + ULONG ReadBytes = 0; if (!buffer) return 0; // Relative to First LBA in Last Session @@ -1622,12 +1622,12 @@ UDFAddXSpaceBitmap( int8* tmp_bm; uint32 i, lim, j, lba, l, lim2, l2, k; lb_addr locAddr; - NTSTATUS status; + NTSTATUS status = STATUS_SUCCESS; uint16 Ident; uint32 flags; SIZE_T Length; - ULONG ReadBytes; - BOOLEAN bit_set; + ULONG ReadBytes = 0; + BOOLEAN bit_set = FALSE; UDF_CHECK_BITMAP_RESOURCE(Vcb); UDFPrint(("UDFAddXSpaceBitmap: at block=%x, partition=%d\n", @@ -1703,11 +1703,11 @@ UDFVerifyXSpaceBitmap( // uint32 i, l2, k, lim, j, lim2; uint32 lba; lb_addr locAddr; - NTSTATUS status; + NTSTATUS status = STATUS_SUCCESS; uint16 Ident; uint32 flags; uint32 Length; - ULONG ReadBytes; + ULONG ReadBytes = 0; // BOOLEAN bit_set; UDF_CHECK_BITMAP_RESOURCE(Vcb); @@ -1798,7 +1798,7 @@ UDFDelXSpaceBitmap( int8* tmp, tmp_bm; uint32 i, lim, j; lb_addr locAddr; - NTSTATUS status; + NTSTATUS status = STATUS_SUCCESS; uint16 Ident; uint32 flags; uint32 Length; @@ -1853,7 +1853,7 @@ UDFVerifyFreeSpaceBitmap( IN uint32 Lba // UnallocSpaceDesc ) { - NTSTATUS status; + NTSTATUS status = STATUS_SUCCESS; uint32 i, l; uint16 Ident; int8* AllocDesc; @@ -1949,7 +1949,7 @@ UDFBuildFreeSpaceBitmap( IN uint32 Lba // UnallocSpaceDesc ) { - NTSTATUS status; + NTSTATUS status = STATUS_SUCCESS; uint32 i, l; uint16 Ident; int8* AllocDesc; @@ -2068,7 +2068,7 @@ UDFLoadPartDesc( { PartitionDesc *p = (PartitionDesc *)Buf; uint32 i; - NTSTATUS RC; + NTSTATUS RC = STATUS_SUCCESS; BOOLEAN Found = FALSE; UDFPrint(("UDF: Pard Descr:\n")); UDFPrint((" volDescSeqNum = %x\n", p->volDescSeqNum)); @@ -2169,7 +2169,7 @@ UDFVerifyPartDesc( { PartitionDesc *p = (PartitionDesc *)Buf; uint32 i; - NTSTATUS RC; + NTSTATUS RC = STATUS_SUCCESS; BOOLEAN Found = FALSE; UDFPrint(("UDF: Verify Part Descr:\n")); UDFPrint((" volDescSeqNum = %x\n", p->volDescSeqNum)); @@ -2284,7 +2284,7 @@ UDFReadVDS( IN int8* Buf ) { - NTSTATUS status; + NTSTATUS status = STATUS_SUCCESS; GenericDesc* gd; BOOLEAN done=FALSE; uint32 vdsn; @@ -2724,7 +2724,7 @@ UDFFindLastFileSet( IN OUT PFILE_SET_DESC FileSetDesc ) { - NTSTATUS status; + NTSTATUS status = STATUS_SUCCESS; uint32 relLocExt = Addr->logicalBlockNum; uint32 locExt = UDFPartLbaToPhys(Vcb, Addr); uint16 Ident; @@ -2768,14 +2768,14 @@ UDFLoadSparingTable( { PSPARING_MAP RelocMap; PSPARING_MAP NewRelocMap; - NTSTATUS status; + NTSTATUS status = STATUS_SUCCESS; uint32 i=0, BC, BC2; PSPARING_TABLE SparTable; uint32 TabSize, NewSize; - ULONG ReadBytes; + ULONG ReadBytes = 0; uint32 SparTableLoc; uint32 n,m; - BOOLEAN merged; + BOOLEAN merged = FALSE; Vcb->SparingCountFree = -1; diff --git a/drivers/filesystems/udfs/udf_info/remap.cpp b/drivers/filesystems/udfs/udf_info/remap.cpp index 72a4079b07021..27c3e7de2145a 100644 --- a/drivers/filesystems/udfs/udf_info/remap.cpp +++ b/drivers/filesystems/udfs/udf_info/remap.cpp @@ -29,8 +29,8 @@ UDFCheckArea( ) { uint8* buff; - NTSTATUS RC; - ULONG ReadBytes; + NTSTATUS RC = STATUS_SUCCESS; + ULONG ReadBytes = 0; uint32 i, d; BOOLEAN ext_ok = TRUE; EXTENT_MAP Map[2]; diff --git a/drivers/filesystems/udfs/udf_info/udf_info.cpp b/drivers/filesystems/udfs/udf_info/udf_info.cpp index e9556aa93de31..651e6747714c1 100644 --- a/drivers/filesystems/udfs/udf_info/udf_info.cpp +++ b/drivers/filesystems/udfs/udf_info/udf_info.cpp @@ -286,7 +286,7 @@ UDFReadFileEntry( IN OUT uint16* Ident ) { - NTSTATUS status; + NTSTATUS status = STATUS_SUCCESS; if (!NT_SUCCESS(status = UDFReadTagged(IrpContext, Vcb, (int8*)FileEntry, UDFPartLbaToPhys(Vcb,&(Icb->extLocation)), @@ -352,7 +352,7 @@ UDFIsIllegalChar( IN PUDF_FILE_INFO FileInfo ) { - BOOLEAN KeepIntact; + BOOLEAN KeepIntact = FALSE; KeepIntact = (FileInfo && (FileInfo->Index < 2)); UDFDOSName(Vcb, DosName, UdfName, KeepIntact); @@ -916,7 +916,7 @@ UDFBuildFileEntry( ) { PFILE_ENTRY FileEntry; - NTSTATUS status; + NTSTATUS status = STATUS_SUCCESS; // EntityID* eID; uint32 l; EXTENT_INFO _FEExtInfo; @@ -1549,10 +1549,10 @@ UDFWriteFile__( ) { int64 t, elen; - NTSTATUS status; + NTSTATUS status = STATUS_SUCCESS; int8* OldInIcb = NULL; ValidateFileInfo(FileInfo); - ULONG ReadBytes; + ULONG ReadBytes = 0; SIZE_T _WrittenBytes; PUDF_DATALOC_INFO Dloc; // unwind staff @@ -1705,8 +1705,8 @@ UDFUnlinkFile__( PDIR_INDEX_HDR hDirNdx; PDIR_INDEX_HDR hCurDirNdx; PDIR_INDEX_ITEM DirNdx; - NTSTATUS status; - BOOLEAN IsSDir; + NTSTATUS status = STATUS_SUCCESS; + BOOLEAN IsSDir = FALSE; AdPrint(("UDFUnlinkFile__:\n")); if (!FileInfo) return STATUS_SUCCESS; @@ -1894,7 +1894,7 @@ UDFUnlinkAllFilesInDir( PDIR_INDEX_HDR hCurDirNdx; PDIR_INDEX_ITEM CurDirNdx; PUDF_FILE_INFO FileInfo; - NTSTATUS status; + NTSTATUS status = STATUS_SUCCESS; uint_di i; hCurDirNdx = DirInfo->Dloc->DirIndex; @@ -1959,7 +1959,7 @@ UDFOpenFile__( IN uint_di* IndexToOpen ) { - NTSTATUS status; + NTSTATUS status = STATUS_SUCCESS; uint_di i=0; EXTENT_AD FEExt; uint16 Ident; @@ -1967,7 +1967,7 @@ UDFOpenFile__( PDIR_INDEX_ITEM DirNdx; PUDF_FILE_INFO FileInfo; PUDF_FILE_INFO ParFileInfo; - ULONG ReadBytes; + ULONG ReadBytes = 0; *_FileInfo = NULL; if (!hDirNdx) return STATUS_NOT_A_DIRECTORY; @@ -2298,7 +2298,7 @@ UDFOpenRootFile__( ) { uint32 RootLBA; - NTSTATUS status; + NTSTATUS status = STATUS_SUCCESS; // uint32 PartNum = RootLoc->partitionReferenceNum; uint32 LBS = Vcb->SectorSize; uint16 Ident; @@ -2380,8 +2380,8 @@ UDFCleanUpFile__( { PUDF_DATALOC_INFO Dloc; uint32 lc = 0; - BOOLEAN IsASDir; - BOOLEAN KeepDloc; + BOOLEAN IsASDir = FALSE; + BOOLEAN KeepDloc = FALSE; PDIR_INDEX_ITEM DirNdx = NULL, DirNdx2; BOOLEAN Parallel = FALSE; BOOLEAN Linked = FALSE; @@ -2752,7 +2752,7 @@ UDFCreateFile__( { uint32 l, d; uint_di i, j; - NTSTATUS status; + NTSTATUS status = STATUS_SUCCESS; LONG_AD FEicb; UDF_DIR_SCAN_CONTEXT ScanContext; PDIR_INDEX_HDR hDirNdx = DirInfo->Dloc->DirIndex; @@ -2761,7 +2761,7 @@ UDFCreateFile__( PUDF_FILE_INFO FileInfo; *_FileInfo = NULL; BOOLEAN undel = FALSE; - ULONG ReadBytes; + ULONG ReadBytes = 0; SIZE_T WrittenBytes; // BOOLEAN PackDir = FALSE; BOOLEAN FEAllocated = FALSE; @@ -3131,7 +3131,7 @@ UDFPadLastSector( PEXTENT_MAP Extent = ExtInfo->Mapping; // Extent array SIZE_T to_write, WrittenBytes; uint32 Lba, sect_offs, flags; - NTSTATUS status; + NTSTATUS status = STATUS_SUCCESS; // Length should not be zero int64 Offset = ExtInfo->Length + ExtInfo->Offset; // data is sector-size-aligned, we needn't any padding @@ -3185,7 +3185,7 @@ UDFCloseFile__( return STATUS_SUCCESS; } PUDF_FILE_INFO DirInfo = FileInfo->ParentFile; - NTSTATUS status; + NTSTATUS status = STATUS_SUCCESS; uint32 PartNum; if (FileInfo->RefCount) { InterlockedDecrement((PLONG)&FileInfo->RefCount); @@ -3344,7 +3344,7 @@ UDFRenameMoveFile__( ) { PUDF_FILE_INFO FileInfo2; - NTSTATUS status; + NTSTATUS status = STATUS_SUCCESS; PDIR_INDEX_ITEM DirNdx1; PDIR_INDEX_ITEM DirNdx2; uint_di i,j; @@ -3572,7 +3572,7 @@ UDFRecordDirectory__( IN OUT PUDF_FILE_INFO DirInfo // source (opened) ) { - NTSTATUS status; + NTSTATUS status = STATUS_SUCCESS; LONG_AD FEicb; UDF_FILE_INFO FileInfo; UDF_DATALOC_INFO Dloc; @@ -3651,9 +3651,9 @@ UDFResizeFile__( IN int64 NewLength ) { - ULONG ReadBytes; + ULONG ReadBytes = 0; SIZE_T WrittenBytes; - NTSTATUS status; + NTSTATUS status = STATUS_SUCCESS; uint32 PartNum; int8* OldInIcb = NULL; PEXTENT_MAP NewMap; @@ -3784,11 +3784,11 @@ UDFLoadVAT( ) { lb_addr VatFELoc; - NTSTATUS status; + NTSTATUS status = STATUS_SUCCESS; PUDF_FILE_INFO VatFileInfo; uint32 len, i=0, j, to_read; uint32 Offset, hdrOffset; - ULONG ReadBytes; + ULONG ReadBytes = 0; uint32 root; uint16 PartNum; // uint32 VatFirstLba = 0; @@ -3971,7 +3971,7 @@ UDFReadFileEA( ) { PFILE_ENTRY FileEntry; - NTSTATUS status; + NTSTATUS status = STATUS_SUCCESS; if (FileDirNdx->FileInfo) { FileEntry = (PFILE_ENTRY)(FileDirNdx->FileInfo->Dloc->FileEntry); @@ -4056,7 +4056,7 @@ UDFFlushFE( ) { int8* NewAllocDescs; - NTSTATUS status; + NTSTATUS status = STATUS_SUCCESS; SIZE_T WrittenBytes; uint16 AllocMode; uint32 lba; @@ -4263,7 +4263,7 @@ UDFFlushFI( { PUDF_FILE_INFO DirInfo = FileInfo->ParentFile; PDIR_INDEX_ITEM DirNdx; - NTSTATUS status; + NTSTATUS status = STATUS_SUCCESS; SIZE_T WrittenBytes; // use WrittenBytes variable to store LBA of FI to be recorded #define lba WrittenBytes @@ -4334,7 +4334,7 @@ UDFFlushFile__( ValidateFileInfo(FileInfo); if (!FileInfo) return STATUS_SUCCESS; - NTSTATUS status; + NTSTATUS status = STATUS_SUCCESS; uint32 PartNum; ASSERT(FileInfo->Dloc->FELoc.Mapping[0].extLocation); @@ -4579,12 +4579,12 @@ UDFReadTagged( uint16 *Ident ) { - NTSTATUS RC; + NTSTATUS RC = STATUS_SUCCESS; tag* PTag = (tag*)Buf; // icbtag* Icb = (icbtag*)(Buf+1); uint8 checksum; unsigned int i; - ULONG ReadBytes; + ULONG ReadBytes = 0; int8* tb; // Read the block @@ -4668,7 +4668,7 @@ UDFHardLinkFile__( ) { PUDF_FILE_INFO FileInfo2; - NTSTATUS status; + NTSTATUS status = STATUS_SUCCESS; PDIR_INDEX_ITEM DirNdx1; PDIR_INDEX_ITEM DirNdx2; uint_di i; @@ -4823,7 +4823,7 @@ UDFCreateRootFile__( OUT PUDF_FILE_INFO* _FileInfo ) { - NTSTATUS status; + NTSTATUS status = STATUS_SUCCESS; LONG_AD FEicb; PUDF_FILE_INFO FileInfo; *_FileInfo = NULL; @@ -4882,7 +4882,7 @@ UDFCreateStreamDir__( // any pointers ) { - NTSTATUS status; + NTSTATUS status = STATUS_SUCCESS; PUDF_FILE_INFO SDirInfo; uint16 Ident; @@ -4968,7 +4968,7 @@ UDFOpenStreamDir__( // any pointers ) { - NTSTATUS status; + NTSTATUS status = STATUS_SUCCESS; PUDF_FILE_INFO SDirInfo; PUDF_FILE_INFO ParSDirInfo; uint16 Ident; @@ -5040,8 +5040,8 @@ UDFRecordVAT( uint32 to_read; uint32 hdrOffset, hdrOffsetNew; uint32 hdrLen; - NTSTATUS status; - ULONG ReadBytes; + NTSTATUS status = STATUS_SUCCESS; + ULONG ReadBytes = 0; SIZE_T WrittenBytes; uint32 len; uint16 PartNdx = (uint16)Vcb->VatPartNdx; @@ -5358,8 +5358,8 @@ UDFConvertFEToExtended( PEXTENDED_FILE_ENTRY ExFileEntry; PFILE_ENTRY FileEntry; uint32 Length, NewLength, l; - NTSTATUS status; - ULONG ReadBytes; + NTSTATUS status = STATUS_SUCCESS; + ULONG ReadBytes = 0; SIZE_T WrittenBytes; if (!FileInfo) return STATUS_INVALID_PARAMETER; @@ -5466,7 +5466,7 @@ UDFPretendFileDeleted__( { AdPrint(("UDFPretendFileDeleted__:\n")); - NTSTATUS RC; + NTSTATUS RC = STATUS_SUCCESS; PDIR_INDEX_HDR hDirNdx = UDFGetDirIndexByFileInfo(FileInfo); if (!hDirNdx) return STATUS_CANNOT_DELETE; PDIR_INDEX_ITEM DirNdx = UDFDirIndex(hDirNdx, FileInfo->Index); diff --git a/drivers/filesystems/udfs/udfdata.cpp b/drivers/filesystems/udfs/udfdata.cpp index d1674b7727e54..ee60b53dcf61a 100644 --- a/drivers/filesystems/udfs/udfdata.cpp +++ b/drivers/filesystems/udfs/udfdata.cpp @@ -76,13 +76,13 @@ Return Value: { THREAD_CONTEXT ThreadContext = {0}; PIRP_CONTEXT IrpContext = NULL; - BOOLEAN Wait; + BOOLEAN Wait = FALSE; #ifdef UDF_SANITY PVOID PreviousTopLevel; #endif - NTSTATUS Status; + NTSTATUS Status = STATUS_SUCCESS; #if DBG diff --git a/drivers/filesystems/udfs/verfysup.cpp b/drivers/filesystems/udfs/verfysup.cpp index 015af5a6b423b..5111b0da8a420 100644 --- a/drivers/filesystems/udfs/verfysup.cpp +++ b/drivers/filesystems/udfs/verfysup.cpp @@ -89,7 +89,7 @@ UDFVerifyVcb( IO_STATUS_BLOCK Iosb; ULONG MediaChangeCount = 0; BOOLEAN ForceVerify = FALSE; - BOOLEAN DevMarkedForVerify; + BOOLEAN DevMarkedForVerify = FALSE; ASSERT(ExIsResourceAcquiredExclusiveLite(&Vcb->VcbResource) || ExIsResourceAcquiredSharedLite(&Vcb->VcbResource)); @@ -263,7 +263,7 @@ UDFVerifyVolume( PVCB NewVcb = NULL; IO_STATUS_BLOCK Iosb; ULONG MediaChangeCount = 0; - NTSTATUS Status; + NTSTATUS Status = STATUS_SUCCESS; BOOLEAN ReleaseVcb = FALSE; PAGED_CODE(); @@ -736,7 +736,7 @@ UDFDismountVcb( BOOLEAN VcbPresent = TRUE; KIRQL SavedIrql; - BOOLEAN FinalReference; + BOOLEAN FinalReference = FALSE; ASSERT_EXCLUSIVE_CDDATA; ASSERT_EXCLUSIVE_VCB(Vcb); diff --git a/drivers/filesystems/udfs/volinfo.cpp b/drivers/filesystems/udfs/volinfo.cpp index c6ab4d3da9bf9..b5a39cbcf73f8 100644 --- a/drivers/filesystems/udfs/volinfo.cpp +++ b/drivers/filesystems/udfs/volinfo.cpp @@ -91,7 +91,7 @@ UDFCommonQueryVolInfo( { NTSTATUS Status = STATUS_INVALID_PARAMETER; PIO_STACK_LOCATION IrpSp = IoGetCurrentIrpStackLocation( Irp ); - ULONG Length; + ULONG Length = 0; PVCB Vcb; TYPE_OF_OPEN TypeOfOpen; PFCB Fcb; @@ -206,8 +206,8 @@ UDFQueryFsVolumeInfo( IN OUT PULONG Length ) { - ULONG BytesToCopy; - NTSTATUS Status; + ULONG BytesToCopy = 0; + NTSTATUS Status = STATUS_SUCCESS; PAGED_CODE(); @@ -403,11 +403,11 @@ UDFQueryFsAttributeInfo( IN OUT PULONG Length ) { - ULONG BytesToCopy; + ULONG BytesToCopy = 0; NTSTATUS Status = STATUS_SUCCESS; PCWSTR FsTypeTitle; - ULONG FsTypeTitleLen; + ULONG FsTypeTitleLen = 0; PAGED_CODE(); UDFPrint((" UDFQueryFsAttributeInfo: \n")); @@ -464,7 +464,7 @@ UDFCommonSetVolInfo( { NTSTATUS Status = STATUS_INVALID_PARAMETER; PIO_STACK_LOCATION IrpSp = IoGetCurrentIrpStackLocation(Irp); - ULONG Length; + ULONG Length = 0; FS_INFORMATION_CLASS FsInformationClass; PVOID Buffer; TYPE_OF_OPEN TypeOfOpen; diff --git a/drivers/filesystems/udfs/write.cpp b/drivers/filesystems/udfs/write.cpp index 076e5a6cbe305..988e7bebd3842 100644 --- a/drivers/filesystems/udfs/write.cpp +++ b/drivers/filesystems/udfs/write.cpp @@ -397,7 +397,7 @@ UDFCommonWrite( !RecursiveWriteThrough && !IsLazyWriteThread) { - BOOLEAN ExtendFS; + BOOLEAN ExtendFS = FALSE; ExtendFS = (StartingOffset + TruncatedLength > Fcb->Header.FileSize.QuadPart); @@ -732,9 +732,9 @@ UDFPurgeCacheEx_( PFILE_OBJECT FileObject ) { - ULONG Off_l; + ULONG Off_l = 0; #ifdef USE_CcCopyWrite_TO_ZERO - ULONG PgLen; + ULONG PgLen = 0; #endif //USE_CcCopyWrite_TO_ZERO // We'll just purge cache section here, @@ -897,7 +897,7 @@ UDFZeroData ( LARGE_INTEGER ZeroStart = {0,0}; LARGE_INTEGER BeyondZeroEnd = {0,0}; - BOOLEAN Finished; + BOOLEAN Finished = FALSE; PAGED_CODE();