mirror of
https://github.com/reactos/reactos.git
synced 2025-08-03 02:16:49 +00:00
[CDFS_NEW] Replace old driver with a Ms-PL licensed version straight out of the driver samples github repository.
This commit is contained in:
parent
87d276f05d
commit
fd34548263
38 changed files with 5298 additions and 2802 deletions
|
@ -44,7 +44,7 @@ Abstract:
|
|||
|
||||
--*/
|
||||
|
||||
#include "cdprocs.h"
|
||||
#include "CdProcs.h"
|
||||
|
||||
//
|
||||
// The Bug check file id for this module
|
||||
|
@ -58,18 +58,18 @@ Abstract:
|
|||
|
||||
ULONG
|
||||
CdFindMcbEntry (
|
||||
IN PIRP_CONTEXT IrpContext,
|
||||
IN PFCB Fcb,
|
||||
IN LONGLONG FileOffset
|
||||
_In_ PIRP_CONTEXT IrpContext,
|
||||
_In_ PFCB Fcb,
|
||||
_In_ LONGLONG FileOffset
|
||||
);
|
||||
|
||||
VOID
|
||||
CdDiskOffsetFromMcbEntry (
|
||||
IN PIRP_CONTEXT IrpContext,
|
||||
IN PCD_MCB_ENTRY McbEntry,
|
||||
IN LONGLONG FileOffset,
|
||||
IN PLONGLONG DiskOffset,
|
||||
IN PULONG ByteCount
|
||||
_In_ PIRP_CONTEXT IrpContext,
|
||||
_In_ PCD_MCB_ENTRY McbEntry,
|
||||
_In_ LONGLONG FileOffset,
|
||||
_Out_ PLONGLONG DiskOffset,
|
||||
_Out_ PULONG ByteCount
|
||||
);
|
||||
|
||||
#ifdef ALLOC_PRAGMA
|
||||
|
@ -84,13 +84,16 @@ CdDiskOffsetFromMcbEntry (
|
|||
#endif
|
||||
|
||||
|
||||
_Requires_lock_held_(_Global_critical_region_)
|
||||
VOID
|
||||
// PREFast currently has no way to express the Fcb==Fcb->Vcb->VolumeDasdFcb early return
|
||||
#pragma warning(suppress: 6001 6101)
|
||||
CdLookupAllocation (
|
||||
IN PIRP_CONTEXT IrpContext,
|
||||
IN PFCB Fcb,
|
||||
IN LONGLONG FileOffset,
|
||||
OUT PLONGLONG DiskOffset,
|
||||
OUT PULONG ByteCount
|
||||
_In_ PIRP_CONTEXT IrpContext,
|
||||
_In_ PFCB Fcb,
|
||||
_In_ LONGLONG FileOffset,
|
||||
_Out_ PLONGLONG DiskOffset,
|
||||
_Out_ PULONG ByteCount
|
||||
)
|
||||
|
||||
/*++
|
||||
|
@ -128,7 +131,7 @@ Return Value:
|
|||
{
|
||||
BOOLEAN FirstPass = TRUE;
|
||||
ULONG McbEntryOffset;
|
||||
PFCB ParentFcb = NULL; /* ReactOS Change: GCC uninitialized variable bug */
|
||||
PFCB ParentFcb = NULL;
|
||||
BOOLEAN CleanupParent = FALSE;
|
||||
|
||||
BOOLEAN UnlockFcb = FALSE;
|
||||
|
@ -137,19 +140,31 @@ Return Value:
|
|||
ULONG CurrentMcbOffset;
|
||||
PCD_MCB_ENTRY CurrentMcbEntry;
|
||||
|
||||
DIRENT_ENUM_CONTEXT DirContext;
|
||||
DIRENT Dirent;
|
||||
DIRENT_ENUM_CONTEXT DirContext = {0};
|
||||
DIRENT Dirent = {0};
|
||||
|
||||
PAGED_CODE();
|
||||
|
||||
ASSERT_IRP_CONTEXT( IrpContext );
|
||||
ASSERT_FCB( Fcb );
|
||||
|
||||
//
|
||||
// For DASD IO we already have clamped the read to the volume limits.
|
||||
// We'll allow reading beyond those limits for extended DASD IO, so
|
||||
// no MCB lookup here.
|
||||
//
|
||||
|
||||
if (Fcb == Fcb->Vcb->VolumeDasdFcb) {
|
||||
|
||||
*DiskOffset = FileOffset;
|
||||
return;
|
||||
}
|
||||
|
||||
//
|
||||
// Use a try finally to facilitate cleanup.
|
||||
//
|
||||
|
||||
_SEH2_TRY {
|
||||
try {
|
||||
|
||||
//
|
||||
// We use a loop to perform the lookup. If we don't find the mapping in the
|
||||
|
@ -215,10 +230,7 @@ Return Value:
|
|||
// 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);
|
||||
|
||||
//
|
||||
// Initialize the local variables to indicate the first dirent
|
||||
|
@ -296,7 +308,7 @@ Return Value:
|
|||
FirstPass = FALSE;
|
||||
}
|
||||
|
||||
} _SEH2_FINALLY {
|
||||
} finally {
|
||||
|
||||
if (CleanupParent) {
|
||||
|
||||
|
@ -311,7 +323,7 @@ Return Value:
|
|||
}
|
||||
|
||||
if (UnlockFcb) { CdUnlockFcb( IrpContext, Fcb ); }
|
||||
} _SEH2_END;
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
@ -319,11 +331,11 @@ Return Value:
|
|||
|
||||
VOID
|
||||
CdAddAllocationFromDirent (
|
||||
IN PIRP_CONTEXT IrpContext,
|
||||
IN PFCB Fcb,
|
||||
IN ULONG McbEntryOffset,
|
||||
IN LONGLONG StartingFileOffset,
|
||||
IN PDIRENT Dirent
|
||||
_In_ PIRP_CONTEXT IrpContext,
|
||||
_Inout_ PFCB Fcb,
|
||||
_In_ ULONG McbEntryOffset,
|
||||
_In_ LONGLONG StartingFileOffset,
|
||||
_In_ PDIRENT Dirent
|
||||
)
|
||||
|
||||
/*++
|
||||
|
@ -358,6 +370,8 @@ Return Value:
|
|||
|
||||
PAGED_CODE();
|
||||
|
||||
UNREFERENCED_PARAMETER( IrpContext );
|
||||
|
||||
ASSERT_IRP_CONTEXT( IrpContext );
|
||||
ASSERT_FCB( Fcb );
|
||||
ASSERT_LOCKED_FCB( Fcb );
|
||||
|
@ -466,10 +480,10 @@ Return Value:
|
|||
|
||||
VOID
|
||||
CdAddInitialAllocation (
|
||||
IN PIRP_CONTEXT IrpContext,
|
||||
IN PFCB Fcb,
|
||||
IN ULONG StartingBlock,
|
||||
IN LONGLONG DataLength
|
||||
_In_ PIRP_CONTEXT IrpContext,
|
||||
_Inout_ PFCB Fcb,
|
||||
_In_ ULONG StartingBlock,
|
||||
_In_ LONGLONG DataLength
|
||||
)
|
||||
|
||||
/*++
|
||||
|
@ -505,11 +519,13 @@ Return Value:
|
|||
|
||||
PAGED_CODE();
|
||||
|
||||
UNREFERENCED_PARAMETER( IrpContext );
|
||||
|
||||
ASSERT_IRP_CONTEXT( IrpContext );
|
||||
ASSERT_FCB( Fcb );
|
||||
ASSERT_LOCKED_FCB( Fcb );
|
||||
ASSERT( 0 == Fcb->Mcb.CurrentEntryCount);
|
||||
ASSERT( CDFS_NTC_FCB_DATA != Fcb->NodeTypeCode);
|
||||
NT_ASSERT( 0 == Fcb->Mcb.CurrentEntryCount);
|
||||
NT_ASSERT( CDFS_NTC_FCB_DATA != Fcb->NodeTypeCode);
|
||||
|
||||
//
|
||||
// Update the new entry with the input data.
|
||||
|
@ -555,9 +571,9 @@ Return Value:
|
|||
|
||||
VOID
|
||||
CdTruncateAllocation (
|
||||
IN PIRP_CONTEXT IrpContext,
|
||||
IN PFCB Fcb,
|
||||
IN LONGLONG StartingFileOffset
|
||||
_In_ PIRP_CONTEXT IrpContext,
|
||||
_Inout_ PFCB Fcb,
|
||||
_In_ LONGLONG StartingFileOffset
|
||||
)
|
||||
|
||||
/*++
|
||||
|
@ -591,7 +607,7 @@ Return Value:
|
|||
ASSERT_LOCKED_FCB( Fcb );
|
||||
|
||||
//
|
||||
// Find the entry containing this starting offset.
|
||||
// Find the entry containg this starting offset.
|
||||
//
|
||||
|
||||
McbEntryOffset = CdFindMcbEntry( IrpContext, Fcb, StartingFileOffset );
|
||||
|
@ -606,10 +622,11 @@ Return Value:
|
|||
}
|
||||
|
||||
|
||||
_At_(Fcb->NodeByteSize, _In_range_(>=, FIELD_OFFSET( FCB, FcbType )))
|
||||
VOID
|
||||
CdInitializeMcb (
|
||||
IN PIRP_CONTEXT IrpContext,
|
||||
IN PFCB Fcb
|
||||
_In_ PIRP_CONTEXT IrpContext,
|
||||
_Inout_updates_bytes_(Fcb->NodeByteSize) PFCB Fcb
|
||||
)
|
||||
|
||||
/*++
|
||||
|
@ -635,6 +652,8 @@ Return Value:
|
|||
{
|
||||
PAGED_CODE();
|
||||
|
||||
UNREFERENCED_PARAMETER( IrpContext );
|
||||
|
||||
ASSERT_IRP_CONTEXT( IrpContext );
|
||||
ASSERT_FCB( Fcb );
|
||||
|
||||
|
@ -652,10 +671,14 @@ Return Value:
|
|||
}
|
||||
|
||||
|
||||
_At_(Fcb->NodeByteSize, _In_range_(>=, FIELD_OFFSET( FCB, FcbType )))
|
||||
_When_(Fcb->NodeTypeCode == CDFS_NTC_FCB_PATH_TABLE, _At_(Fcb->NodeByteSize, _In_range_(==, SIZEOF_FCB_INDEX)))
|
||||
_When_(Fcb->NodeTypeCode == CDFS_NTC_FCB_INDEX, _At_(Fcb->NodeByteSize, _In_range_(==, SIZEOF_FCB_INDEX)))
|
||||
_When_(Fcb->NodeTypeCode == CDFS_NTC_FCB_DATA, _At_(Fcb->NodeByteSize, _In_range_(==, SIZEOF_FCB_DATA)))
|
||||
VOID
|
||||
CdUninitializeMcb (
|
||||
IN PIRP_CONTEXT IrpContext,
|
||||
IN PFCB Fcb
|
||||
_In_ PIRP_CONTEXT IrpContext,
|
||||
_Inout_updates_bytes_(Fcb->NodeByteSize) PFCB Fcb
|
||||
)
|
||||
|
||||
/*++
|
||||
|
@ -681,6 +704,8 @@ Return Value:
|
|||
{
|
||||
PAGED_CODE();
|
||||
|
||||
UNREFERENCED_PARAMETER( IrpContext );
|
||||
|
||||
ASSERT_IRP_CONTEXT( IrpContext );
|
||||
ASSERT_FCB( Fcb );
|
||||
|
||||
|
@ -698,14 +723,14 @@ Return Value:
|
|||
|
||||
|
||||
//
|
||||
// Local support routine
|
||||
// Local suupport routine
|
||||
//
|
||||
|
||||
ULONG
|
||||
CdFindMcbEntry (
|
||||
IN PIRP_CONTEXT IrpContext,
|
||||
IN PFCB Fcb,
|
||||
IN LONGLONG FileOffset
|
||||
_In_ PIRP_CONTEXT IrpContext,
|
||||
_In_ PFCB Fcb,
|
||||
_In_ LONGLONG FileOffset
|
||||
)
|
||||
|
||||
/*++
|
||||
|
@ -736,6 +761,8 @@ Return Value:
|
|||
|
||||
PAGED_CODE();
|
||||
|
||||
UNREFERENCED_PARAMETER( IrpContext );
|
||||
|
||||
ASSERT_IRP_CONTEXT( IrpContext );
|
||||
ASSERT_FCB( Fcb );
|
||||
ASSERT_LOCKED_FCB( Fcb );
|
||||
|
@ -781,11 +808,11 @@ Return Value:
|
|||
|
||||
VOID
|
||||
CdDiskOffsetFromMcbEntry (
|
||||
IN PIRP_CONTEXT IrpContext,
|
||||
IN PCD_MCB_ENTRY McbEntry,
|
||||
IN LONGLONG FileOffset,
|
||||
IN PLONGLONG DiskOffset,
|
||||
IN PULONG ByteCount
|
||||
_In_ PIRP_CONTEXT IrpContext,
|
||||
_In_ PCD_MCB_ENTRY McbEntry,
|
||||
_In_ LONGLONG FileOffset,
|
||||
_Out_ PLONGLONG DiskOffset,
|
||||
_Out_ PULONG ByteCount
|
||||
)
|
||||
|
||||
/*++
|
||||
|
@ -827,6 +854,9 @@ Return Value:
|
|||
LONGLONG LocalByteCount;
|
||||
|
||||
PAGED_CODE();
|
||||
|
||||
UNREFERENCED_PARAMETER( IrpContext );
|
||||
|
||||
ASSERT_IRP_CONTEXT( IrpContext );
|
||||
|
||||
//
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue