Author: arty Date: Fri Nov 13 16:35:12 2009 New Revision: 44140
URL: http://svn.reactos.org/svn/reactos?rev=44140&view=rev Log: Correct 64-bit paths. Files > 4G and large volumes can now have arbitrary sections on them. Theoretically, even >4G as a single section on 64-bit reactos. Unfortunately some code is slightly uglified. Ext2 fixes likely reflect change in build environment, not the original author's bugs.
Modified: branches/arty-newcc/drivers/filesystems/ext2/src/DiskIO.c branches/arty-newcc/drivers/filesystems/ext2/src/fsctrl.c branches/arty-newcc/drivers/filesystems/ext2/src/io.c branches/arty-newcc/drivers/filesystems/ext2/src/metadata.c branches/arty-newcc/drivers/filesystems/ext2/src/read.c branches/arty-newcc/drivers/filesystems/ext2/src/write.c branches/arty-newcc/ntoskrnl/cache/copysup.c branches/arty-newcc/ntoskrnl/cache/pinsup.c branches/arty-newcc/ntoskrnl/include/internal/newcc.h branches/arty-newcc/ntoskrnl/include/internal/newmm.h branches/arty-newcc/ntoskrnl/mm/rmap.c branches/arty-newcc/ntoskrnl/mm/section/data.c branches/arty-newcc/ntoskrnl/mm/section/image.c branches/arty-newcc/ntoskrnl/mm/section/io.c branches/arty-newcc/ntoskrnl/mm/section/pagefile.c branches/arty-newcc/ntoskrnl/mm/section/physical.c branches/arty-newcc/ntoskrnl/mm/virtual.c
Modified: branches/arty-newcc/drivers/filesystems/ext2/src/DiskIO.c URL: http://svn.reactos.org/svn/reactos/branches/arty-newcc/drivers/filesystems/e... ============================================================================== --- branches/arty-newcc/drivers/filesystems/ext2/src/DiskIO.c [iso-8859-1] (original) +++ branches/arty-newcc/drivers/filesystems/ext2/src/DiskIO.c [iso-8859-1] Fri Nov 13 16:35:12 2009 @@ -18,7 +18,6 @@ #define EXT2_BUG_CHECK_ID EXT2_FILE_DISK_IO
#define DEBUG_LEVEL ( DEBUG_TRACE_DISKIO ) -
/************************************************************************* * @@ -80,9 +79,9 @@ LogicalBlockSize = EXT2_MIN_BLOCK_SIZE << PtrVCB->LogBlockSize; PhysicalBlockSize = PtrTargetDeviceObject->SectorSize; - NoOfPhysicalBlocks = NoOfLogicalBlocks * LogicalBlockSize / PhysicalBlockSize; - - StartPhysicalBlock.QuadPart = ( StartLogicalBlock.QuadPart ) * + NoOfPhysicalBlocks = (ULONGLONG)NoOfLogicalBlocks * LogicalBlockSize / PhysicalBlockSize; + + StartPhysicalBlock.QuadPart = (ULONGLONG)( StartLogicalBlock.QuadPart ) * ( LogicalBlockSize / PhysicalBlockSize );
Status = Ext2ReadPhysicalBlocks( PtrTargetDeviceObject, @@ -144,7 +143,7 @@ NumberOfBytesToRead = PhysicalBlockSize * NoOfBlocks;
- ByteOffset.QuadPart = StartPhysicalBlock.QuadPart * PhysicalBlockSize; + ByteOffset.QuadPart = (ULONGLONG)StartPhysicalBlock.QuadPart * PhysicalBlockSize;
try {
Modified: branches/arty-newcc/drivers/filesystems/ext2/src/fsctrl.c URL: http://svn.reactos.org/svn/reactos/branches/arty-newcc/drivers/filesystems/e... ============================================================================== --- branches/arty-newcc/drivers/filesystems/ext2/src/fsctrl.c [iso-8859-1] (original) +++ branches/arty-newcc/drivers/filesystems/ext2/src/fsctrl.c [iso-8859-1] Fri Nov 13 16:35:12 2009 @@ -393,12 +393,12 @@ if( PtrVCB->LogBlockSize ) { // First block contains the descriptors... - VolumeByteOffset.QuadPart = LogicalBlockSize; + VolumeByteOffset.QuadPart = (ULONGLONG)LogicalBlockSize; } else { // Second block contains the descriptors... - VolumeByteOffset.QuadPart = LogicalBlockSize * 2; + VolumeByteOffset.QuadPart = (ULONGLONG)LogicalBlockSize * 2; }
NumberOfBytesToRead = PtrVCB->NoOfGroups * sizeof( struct ext2_group_desc );
Modified: branches/arty-newcc/drivers/filesystems/ext2/src/io.c URL: http://svn.reactos.org/svn/reactos/branches/arty-newcc/drivers/filesystems/e... ============================================================================== --- branches/arty-newcc/drivers/filesystems/ext2/src/io.c [iso-8859-1] (original) +++ branches/arty-newcc/drivers/filesystems/ext2/src/io.c [iso-8859-1] Fri Nov 13 16:35:12 2009 @@ -140,13 +140,13 @@ { PtrIrpSp->Parameters.Read.Length = ReadWriteLength; PtrIrpSp->Parameters.Read.ByteOffset.QuadPart = - PtrIoRuns[i].LogicalBlock * ( LogicalBlockSize ); + (ULONGLONG)PtrIoRuns[i].LogicalBlock * ( LogicalBlockSize ); } else if( PtrIrpContext->MajorFunction == IRP_MJ_WRITE ) { PtrIrpSp->Parameters.Write.Length = ReadWriteLength; PtrIrpSp->Parameters.Write.ByteOffset.QuadPart = - PtrIoRuns[i].LogicalBlock * ( LogicalBlockSize ); + (ULONGLONG)PtrIoRuns[i].LogicalBlock * ( LogicalBlockSize ); }
// PtrIrpSp->Parameters.Read.Length = ReadWriteLength; @@ -170,12 +170,12 @@ if( PtrIrpContext->MajorFunction == IRP_MJ_READ ) { PtrIrpSp->Parameters.Read.Length = ReadWriteLength; - PtrIrpSp->Parameters.Read.ByteOffset.QuadPart = PtrIoRuns[i].LogicalBlock * ( LogicalBlockSize ); + PtrIrpSp->Parameters.Read.ByteOffset.QuadPart = (ULONGLONG)PtrIoRuns[i].LogicalBlock * ( LogicalBlockSize ); } else if( PtrIrpContext->MajorFunction == IRP_MJ_WRITE ) { PtrIrpSp->Parameters.Write.Length = ReadWriteLength; - PtrIrpSp->Parameters.Write.ByteOffset.QuadPart = PtrIoRuns[i].LogicalBlock * ( LogicalBlockSize ); + PtrIrpSp->Parameters.Write.ByteOffset.QuadPart = (ULONGLONG)PtrIoRuns[i].LogicalBlock * ( LogicalBlockSize ); }
// PtrIrpSp->Parameters.Read.Length = ReadWriteLength;
Modified: branches/arty-newcc/drivers/filesystems/ext2/src/metadata.c URL: http://svn.reactos.org/svn/reactos/branches/arty-newcc/drivers/filesystems/e... ============================================================================== --- branches/arty-newcc/drivers/filesystems/ext2/src/metadata.c [iso-8859-1] (original) +++ branches/arty-newcc/drivers/filesystems/ext2/src/metadata.c [iso-8859-1] Fri Nov 13 16:35:12 2009 @@ -101,8 +101,10 @@ LogicalBlockSize = EXT2_MIN_BLOCK_SIZE << PtrVcb->LogBlockSize; NumberOfBytesToRead = sizeof(EXT2_INODE); // LogicalBlockSize;
- VolumeByteOffset.QuadPart = PtrVcb->PtrGroupDescriptors[ GroupNo ].InodeTablesBlock + VolumeByteOffset.QuadPart = (ULONGLONG)PtrVcb->PtrGroupDescriptors[ GroupNo ].InodeTablesBlock * LogicalBlockSize + Index * PtrVcb->InodeSize; + DebugTrace(DEBUG_TRACE_MISC, "VolumeByteOffset.HighPart %08x", VolumeByteOffset.HighPart); + DebugTrace(DEBUG_TRACE_MISC, "VolumeByteOffset.LowPart %08x", VolumeByteOffset.LowPart); //VolumeByteOffset.QuadPart = PtrVcb->InodeTableBlock[ GroupNo ] * LogicalBlockSize + // Index * PtrVcb->InodeSize; @@ -298,7 +300,7 @@ }
VolumeByteOffset.QuadPart = - PtrVCB->PtrGroupDescriptors[ GroupNo ].InodeBitmapBlock * LogicalBlockSize; + (ULONGLONG)PtrVCB->PtrGroupDescriptors[ GroupNo ].InodeBitmapBlock * LogicalBlockSize; NumberOfBytesToRead = PtrVCB->InodesCount / PtrVCB->NoOfGroups;
@@ -534,7 +536,7 @@ BitmapIndex = BitmapIndex - ( BlockIndex * LogicalBlockSize );
VolumeByteOffset.QuadPart = - ( PtrVCB->PtrGroupDescriptors[ GroupNo ].InodeBitmapBlock + BlockIndex ) + (ULONGLONG)( PtrVCB->PtrGroupDescriptors[ GroupNo ].InodeBitmapBlock + BlockIndex ) * LogicalBlockSize;
// @@ -752,7 +754,7 @@ LogicalBlockSize = EXT2_MIN_BLOCK_SIZE << PtrVcb->LogBlockSize; NumberOfBytesToRead = sizeof(EXT2_INODE);
- VolumeByteOffset.QuadPart = PtrVcb->PtrGroupDescriptors[ GroupNo ].InodeTablesBlock + VolumeByteOffset.QuadPart = (ULONGLONG)PtrVcb->PtrGroupDescriptors[ GroupNo ].InodeTablesBlock * LogicalBlockSize + Index * PtrVcb->InodeSize; TempOffset.QuadPart = Ext2Align64( VolumeByteOffset.QuadPart, LogicalBlockSize ); @@ -936,7 +938,7 @@ } }
- VolumeByteOffset.QuadPart = BlockNo * LogicalBlockSize; + VolumeByteOffset.QuadPart = (ULONGLONG)BlockNo * LogicalBlockSize; CcMapData( PtrFileObject, &VolumeByteOffset, LogicalBlockSize, @@ -1243,7 +1245,7 @@ }
// No of blocks CURRENTLY allocated... - NoOfBlocks = (ULONG) PtrFCB->NTRequiredFCB.CommonFCBHeader.AllocationSize.QuadPart / LogicalBlockSize; + NoOfBlocks = (ULONG) (PtrFCB->NTRequiredFCB.CommonFCBHeader.AllocationSize.QuadPart / LogicalBlockSize); if( NoOfBlocks < EXT2_NDIR_BLOCKS ) @@ -1311,7 +1313,7 @@
// Bring in the new block to the cache // Zero it out - VolumeByteOffset.QuadPart = PtrFCB->IBlock[ EXT2_IND_BLOCK ] * LogicalBlockSize; + VolumeByteOffset.QuadPart = (ULONGLONG)PtrFCB->IBlock[ EXT2_IND_BLOCK ] * LogicalBlockSize;
if( !CcPreparePinWrite( PtrVCB->PtrStreamFileObject, @@ -1329,7 +1331,7 @@ { // Just bring in the SIB to the cache - VolumeByteOffset.QuadPart = PtrFCB->IBlock[ EXT2_IND_BLOCK ] * LogicalBlockSize; + VolumeByteOffset.QuadPart = (ULONGLONG)PtrFCB->IBlock[ EXT2_IND_BLOCK ] * LogicalBlockSize;
if( !CcPreparePinWrite( PtrVCB->PtrStreamFileObject, &VolumeByteOffset, @@ -1402,7 +1404,7 @@
// Bring in the new block to the cache // Zero it out - VolumeByteOffset.QuadPart = PtrFCB->IBlock[ EXT2_DIND_BLOCK ] * LogicalBlockSize; + VolumeByteOffset.QuadPart = (ULONGLONG)PtrFCB->IBlock[ EXT2_DIND_BLOCK ] * LogicalBlockSize;
if( !CcPreparePinWrite( PtrVCB->PtrStreamFileObject, @@ -1446,7 +1448,7 @@ DebugTrace(DEBUG_TRACE_SPECIAL, "Ext2AllocBlock", 0); PtrDIBBuffer[SBlockNo] = Ext2AllocBlock( PtrIrpContext, PtrVCB, 1 ); CcSetDirtyPinnedData( PtrDIBBCB, NULL ); - VolumeByteOffset.QuadPart = PtrDIBBuffer[SBlockNo] * LogicalBlockSize; + VolumeByteOffset.QuadPart = (ULONGLONG)PtrDIBBuffer[SBlockNo] * LogicalBlockSize;
Inode.i_blocks += ( LogicalBlockSize / 512 );
@@ -1538,7 +1540,7 @@
// Bring in the new block to the cache // Zero it out - VolumeByteOffset.QuadPart = PtrFCB->IBlock[ EXT2_DIND_BLOCK ] * LogicalBlockSize; + VolumeByteOffset.QuadPart = (ULONGLONG)PtrFCB->IBlock[ EXT2_DIND_BLOCK ] * LogicalBlockSize;
if( !CcPreparePinWrite( PtrVCB->PtrStreamFileObject, @@ -1580,7 +1582,7 @@ DebugTrace(DEBUG_TRACE_SPECIAL, "Ext2AllocBlock", 0); PtrDIBBuffer[SBlockNo] = Ext2AllocBlock( PtrIrpContext, PtrVCB, 1 ); CcSetDirtyPinnedData( PtrDIBBCB, NULL ); - VolumeByteOffset.QuadPart = PtrDIBBuffer[SBlockNo] * LogicalBlockSize; + VolumeByteOffset.QuadPart = (ULONGLONG)PtrDIBBuffer[SBlockNo] * LogicalBlockSize;
Inode.i_blocks += ( LogicalBlockSize / 512 );
@@ -1715,7 +1717,7 @@ }
VolumeByteOffset.QuadPart = - PtrVCB->PtrGroupDescriptors[ GroupNo ].BlockBitmapBlock * LogicalBlockSize; + (ULONGLONG)PtrVCB->PtrGroupDescriptors[ GroupNo ].BlockBitmapBlock * LogicalBlockSize; NumberOfBytesToRead = PtrVCB->BlocksCount / PtrVCB->NoOfGroups;
@@ -1947,7 +1949,7 @@ BitmapIndex = BitmapIndex - ( BlockIndex * LogicalBlockSize );
VolumeByteOffset.QuadPart = - ( PtrVCB->PtrGroupDescriptors[ GroupNo ].BlockBitmapBlock + BlockIndex ) + (ULONGLONG)( PtrVCB->PtrGroupDescriptors[ GroupNo ].BlockBitmapBlock + BlockIndex ) * LogicalBlockSize; // @@ -2259,7 +2261,7 @@ ULONG TIndex, DIndex, SIndex;
// Pin the Double Indirect Pointer Block... - VolumeByteOffset.QuadPart = PtrFCB->IBlock[ EXT2_TIND_BLOCK ] * LogicalBlockSize; + VolumeByteOffset.QuadPart = (ULONGLONG)PtrFCB->IBlock[ EXT2_TIND_BLOCK ] * LogicalBlockSize; if (!CcMapData( PtrVCB->PtrStreamFileObject, &VolumeByteOffset, LogicalBlockSize, @@ -2275,7 +2277,7 @@ { if( PtrPinnedTIndirectBlock[ TIndex ] ) { - VolumeByteOffset.QuadPart = PtrPinnedTIndirectBlock[TIndex] * LogicalBlockSize; + VolumeByteOffset.QuadPart = (ULONGLONG)PtrPinnedTIndirectBlock[TIndex] * LogicalBlockSize; if (!CcMapData( PtrVCB->PtrStreamFileObject, &VolumeByteOffset, LogicalBlockSize, @@ -2291,7 +2293,7 @@ { if( PtrPinnedDIndirectBlock[DIndex] ) { - VolumeByteOffset.QuadPart = PtrPinnedDIndirectBlock[DIndex] * LogicalBlockSize; + VolumeByteOffset.QuadPart = (ULONGLONG)PtrPinnedDIndirectBlock[DIndex] * LogicalBlockSize; if (!CcMapData( PtrVCB->PtrStreamFileObject, &VolumeByteOffset, LogicalBlockSize, @@ -2350,7 +2352,7 @@ ULONG DIndex, SIndex;
// Pin the Double Indirect Pointer Block... - VolumeByteOffset.QuadPart = PtrFCB->IBlock[ EXT2_DIND_BLOCK ] * LogicalBlockSize; + VolumeByteOffset.QuadPart = (ULONGLONG)PtrFCB->IBlock[ EXT2_DIND_BLOCK ] * LogicalBlockSize; if (!CcMapData( PtrVCB->PtrStreamFileObject, &VolumeByteOffset, LogicalBlockSize, @@ -2366,7 +2368,7 @@ { if( PtrPinnedDIndirectBlock[DIndex] ) { - VolumeByteOffset.QuadPart = PtrPinnedDIndirectBlock[DIndex] * LogicalBlockSize; + VolumeByteOffset.QuadPart = (ULONGLONG)PtrPinnedDIndirectBlock[DIndex] * LogicalBlockSize; if (!CcMapData( PtrVCB->PtrStreamFileObject, &VolumeByteOffset, LogicalBlockSize, @@ -2416,7 +2418,7 @@ ULONG Index;
// Pin the Single Indirect Pointer Block... - VolumeByteOffset.QuadPart = PtrFCB->IBlock[ EXT2_IND_BLOCK ] * LogicalBlockSize; + VolumeByteOffset.QuadPart = (ULONGLONG)PtrFCB->IBlock[ EXT2_IND_BLOCK ] * LogicalBlockSize; if (!CcMapData( PtrVCB->PtrStreamFileObject, &VolumeByteOffset, LogicalBlockSize, @@ -2513,7 +2515,7 @@ ULONG Index;
// Pin the Single Indirect Pointer Block... - VolumeByteOffset.QuadPart = PtrFCB->IBlock[ EXT2_IND_BLOCK ] * LogicalBlockSize; + VolumeByteOffset.QuadPart = (ULONGLONG)PtrFCB->IBlock[ EXT2_IND_BLOCK ] * LogicalBlockSize; if (!CcMapData( PtrVCB->PtrStreamFileObject, &VolumeByteOffset, LogicalBlockSize,
Modified: branches/arty-newcc/drivers/filesystems/ext2/src/read.c URL: http://svn.reactos.org/svn/reactos/branches/arty-newcc/drivers/filesystems/e... ============================================================================== --- branches/arty-newcc/drivers/filesystems/ext2/src/read.c [iso-8859-1] (original) +++ branches/arty-newcc/drivers/filesystems/ext2/src/read.c [iso-8859-1] Fri Nov 13 16:35:12 2009 @@ -212,6 +212,7 @@ } DebugTrace(DEBUG_TRACE_READ_DETAILS, " ->ByteCount = 0x%8lx", PtrIoStackLocation->Parameters.Read.Length); + DebugTrace(DEBUG_TRACE_READ_DETAILS, " ->ByteOffset.HighPart = 0x%8lx", PtrIoStackLocation->Parameters.Read.ByteOffset.HighPart); DebugTrace(DEBUG_TRACE_READ_DETAILS, " ->ByteOffset.LowPart = 0x%8lx", PtrIoStackLocation->Parameters.Read.ByteOffset.LowPart); if( CanWait ) @@ -674,7 +675,7 @@ LARGE_INTEGER VolumeByteOffset;
DebugTrace(DEBUG_TRACE_MISC, "Reading in some Single Indirect Blocks from IND block at %x", PtrFCB->IBlock[EXT2_IND_BLOCK]); - VolumeByteOffset.QuadPart = PtrFCB->IBlock[ EXT2_IND_BLOCK ] * LogicalBlockSize; + VolumeByteOffset.QuadPart = (ULONGLONG)PtrFCB->IBlock[ EXT2_IND_BLOCK ] * LogicalBlockSize;
// // Asking the cache manager to oblige by pinning the single indirect block... @@ -713,7 +714,9 @@
DebugTrace(DEBUG_TRACE_MISC, "Reading in some Double Indirect Blocks", 0);
- VolumeByteOffset.QuadPart = PtrFCB->IBlock[ EXT2_DIND_BLOCK ] * LogicalBlockSize; + VolumeByteOffset.QuadPart = (ULONGLONG)PtrFCB->IBlock[ EXT2_DIND_BLOCK ] * LogicalBlockSize; + DebugTrace(DEBUG_TRACE_MISC, "VolumeByteOffset.HighPart %08x", VolumeByteOffset.HighPart); + DebugTrace(DEBUG_TRACE_MISC, "VolumeByteOffset.LowPart %08x", VolumeByteOffset.LowPart);
// // Asking the cache manager to oblige by pinning the double indirect block... @@ -772,7 +775,7 @@
for( i = 0; i < DIArrayCount; i++ ) { - VolumeByteOffset.QuadPart = PtrPinnedDIndirectBlock[StartIndirectBlock+i] * LogicalBlockSize; + VolumeByteOffset.QuadPart = (ULONGLONG)PtrPinnedDIndirectBlock[StartIndirectBlock+i] * LogicalBlockSize; if (!CcMapData( PtrVCB->PtrStreamFileObject, &VolumeByteOffset, LogicalBlockSize, @@ -817,7 +820,7 @@
DebugTrace(DEBUG_TRACE_MISC, "Reading in some Triple Indirect Blocks", 0);
- VolumeByteOffset.QuadPart = PtrFCB->IBlock[ EXT2_TIND_BLOCK ] * LogicalBlockSize; + VolumeByteOffset.QuadPart = (ULONGLONG)PtrFCB->IBlock[ EXT2_TIND_BLOCK ] * LogicalBlockSize;
DebugTrace(DEBUG_TRACE_TRIPLE, "ByteOffset = 0x%I64X", ByteOffset ); DebugTrace(DEBUG_TRACE_TRIPLE, "ReadLength = 0x%lX", ReadLength ); @@ -890,7 +893,7 @@
for( i = 0; i < Count; i++, ByteOffsetTillHere += DoubleIndirectBlockSize) { - VolumeByteOffset.QuadPart = PtrPinnedTIndirectBlock[StartDIndirectBlock+i] * LogicalBlockSize; + VolumeByteOffset.QuadPart = (ULONGLONG)PtrPinnedTIndirectBlock[StartDIndirectBlock+i] * LogicalBlockSize; DebugTrace(DEBUG_TRACE_TRIPLE, "Double VolOffset = 0x%I64X", VolumeByteOffset );
@@ -940,7 +943,7 @@ for( i = 0; i < (EndIndirectBlock - StartIndirectBlock); i++ ) { - VolumeByteOffset.QuadPart = TempDIBuffer[StartIndirectBlock+i] * LogicalBlockSize; + VolumeByteOffset.QuadPart = (ULONGLONG)TempDIBuffer[StartIndirectBlock+i] * LogicalBlockSize; DebugTrace(DEBUG_TRACE_TRIPLE, "Single VolOffset = 0x%I64X", VolumeByteOffset );
if (!CcMapData( PtrVCB->PtrStreamFileObject,
Modified: branches/arty-newcc/drivers/filesystems/ext2/src/write.c URL: http://svn.reactos.org/svn/reactos/branches/arty-newcc/drivers/filesystems/e... ============================================================================== --- branches/arty-newcc/drivers/filesystems/ext2/src/write.c [iso-8859-1] (original) +++ branches/arty-newcc/drivers/filesystems/ext2/src/write.c [iso-8859-1] Fri Nov 13 16:35:12 2009 @@ -627,6 +627,16 @@ PtrReqdFCB->CommonFCBHeader.FileSize.QuadPart = ByteOffset.QuadPart + WriteLength; + if ( PtrReqdFCB->CommonFCBHeader.FileSize.QuadPart > PtrReqdFCB->CommonFCBHeader.AllocationSize.QuadPart ) + { + DbgPrint + ("File size greater than allocation size: %08x%08x vs %08x%08x %wZ\n", + PtrReqdFCB->CommonFCBHeader.FileSize.HighPart, + PtrReqdFCB->CommonFCBHeader.FileSize.LowPart, + PtrReqdFCB->CommonFCBHeader.AllocationSize.HighPart, + PtrReqdFCB->CommonFCBHeader.AllocationSize.LowPart, + &PtrFileObject->FileName); + } ASSERT( PtrReqdFCB->CommonFCBHeader.FileSize.QuadPart <= PtrReqdFCB->CommonFCBHeader.AllocationSize.QuadPart );
Ext2UpdateFileSize( PtrIrpContext, PtrFileObject, PtrFCB ); @@ -796,7 +806,7 @@ DebugTrace(DEBUG_TRACE_WRITE_DETAILS, "Reading in some Indirect Blocks", 0);
DebugTrace(DEBUG_TRACE_WRITE_DETAILS, "Indirect block at %x", PtrFCB->IBlock[EXT2_NDIR_BLOCKS]); - VolumeByteOffset.QuadPart = PtrFCB->IBlock[ EXT2_NDIR_BLOCKS ] * LogicalBlockSize; + VolumeByteOffset.QuadPart = (ULONGLONG)PtrFCB->IBlock[ EXT2_NDIR_BLOCKS ] * LogicalBlockSize;
// // Asking the cache manager to oblige by pinning the single indirect block... @@ -836,7 +846,7 @@
DebugTrace(DEBUG_TRACE_MISC, "Reading in some Double Indirect Blocks", 0);
- VolumeByteOffset.QuadPart = PtrFCB->IBlock[ EXT2_DIND_BLOCK ] * LogicalBlockSize; + VolumeByteOffset.QuadPart = (ULONGLONG)PtrFCB->IBlock[ EXT2_DIND_BLOCK ] * LogicalBlockSize;
// // Asking the cache manager to oblige by pinning the double indirect block... @@ -895,7 +905,7 @@
for( i = 0; i < DIArrayCount; i++ ) { - VolumeByteOffset.QuadPart = PtrPinnedDIndirectBlock[StartIndirectBlock+i] * LogicalBlockSize; + VolumeByteOffset.QuadPart = (ULONGLONG)PtrPinnedDIndirectBlock[StartIndirectBlock+i] * LogicalBlockSize; if (!CcMapData( PtrVCB->PtrStreamFileObject, &VolumeByteOffset, LogicalBlockSize, @@ -928,7 +938,7 @@
DebugTrace(DEBUG_TRACE_MISC, "Reading in some Double Indirect Blocks", 0);
- VolumeByteOffset.QuadPart = PtrFCB->IBlock[ EXT2_DIND_BLOCK ] * LogicalBlockSize; + VolumeByteOffset.QuadPart = (ULONGLONG)PtrFCB->IBlock[ EXT2_DIND_BLOCK ] * LogicalBlockSize;
// // Asking the cache manager to oblige by pinning the double indirect block... @@ -991,7 +1001,7 @@
for( i = 0; i < DIArrayCount; i++ ) { - VolumeByteOffset.QuadPart = PtrPinnedDIndirectBlock[StartIndirectBlock+i] * LogicalBlockSize; + VolumeByteOffset.QuadPart = (ULONGLONG)PtrPinnedDIndirectBlock[StartIndirectBlock+i] * LogicalBlockSize; if (!CcMapData( PtrVCB->PtrStreamFileObject, &VolumeByteOffset, LogicalBlockSize, @@ -1036,7 +1046,7 @@
DebugTrace(DEBUG_TRACE_MISC, "Reading in some Triple Indirect Blocks", 0);
- VolumeByteOffset.QuadPart = PtrFCB->IBlock[ EXT2_TIND_BLOCK ] * LogicalBlockSize; + VolumeByteOffset.QuadPart = (ULONGLONG)PtrFCB->IBlock[ EXT2_TIND_BLOCK ] * LogicalBlockSize;
DebugTrace(DEBUG_TRACE_TRIPLE, "ByteOffset = 0x%I64X", ByteOffset ); DebugTrace(DEBUG_TRACE_TRIPLE, "WriteLength = 0x%lX", WriteLength ); @@ -1109,7 +1119,7 @@
for( i = 0; i < Count; i++, ByteOffsetTillHere += DoubleIndirectBlockSize) { - VolumeByteOffset.QuadPart = PtrPinnedTIndirectBlock[StartDIndirectBlock+i] * LogicalBlockSize; + VolumeByteOffset.QuadPart = (ULONGLONG)PtrPinnedTIndirectBlock[StartDIndirectBlock+i] * LogicalBlockSize; DebugTrace(DEBUG_TRACE_TRIPLE, "Double VolOffset = 0x%I64X", VolumeByteOffset );
@@ -1159,7 +1169,7 @@ for( i = 0; i < (EndIndirectBlock - StartIndirectBlock); i++ ) { - VolumeByteOffset.QuadPart = TempDIBuffer[StartIndirectBlock+i] * LogicalBlockSize; + VolumeByteOffset.QuadPart = (ULONGLONG)TempDIBuffer[StartIndirectBlock+i] * LogicalBlockSize; DebugTrace(DEBUG_TRACE_TRIPLE, "Single VolOffset = 0x%I64X", VolumeByteOffset );
if (!CcMapData( PtrVCB->PtrStreamFileObject,
Modified: branches/arty-newcc/ntoskrnl/cache/copysup.c URL: http://svn.reactos.org/svn/reactos/branches/arty-newcc/ntoskrnl/cache/copysu... ============================================================================== --- branches/arty-newcc/ntoskrnl/cache/copysup.c [iso-8859-1] (original) +++ branches/arty-newcc/ntoskrnl/cache/copysup.c [iso-8859-1] Fri Nov 13 16:35:12 2009 @@ -54,41 +54,42 @@
while (CacheOffset.QuadPart < EndOfExtent.QuadPart) { - NextOffset.QuadPart = (CacheOffset.QuadPart + CACHE_STRIPE) & ~(CACHE_STRIPE-1); - ReadLen = EndOfExtent.QuadPart - CacheOffset.QuadPart; - if (CacheOffset.QuadPart + ReadLen > NextOffset.QuadPart) - { - ReadLen = NextOffset.QuadPart - CacheOffset.QuadPart; - } - - DPRINT("Reading %d bytes in this go (at %08x%08x)\n", ReadLen, CacheOffset.HighPart, CacheOffset.LowPart); - - if (!CcPinRead - (FileObject, - &CacheOffset, - ReadLen, - Wait ? PIN_WAIT : PIN_IF_BCB, - &Bcb, - (PVOID*)&ReadBuffer)) - { - IoStatus->Status = STATUS_UNSUCCESSFUL; - IoStatus->Information = 0; - DPRINT("Failed CcCopyRead\n"); - return FALSE; - } - - DPRINT("Copying %d bytes at %08x%08x\n", ReadLen, CacheOffset.HighPart, CacheOffset.LowPart); - RtlCopyMemory - (BufferTarget, - ReadBuffer, - ReadLen); - - BufferTarget += ReadLen; + NextOffset.QuadPart = CacheOffset.QuadPart; + NextOffset.LowPart = (NextOffset.LowPart + CACHE_STRIPE) & ~(CACHE_STRIPE-1); + ReadLen = EndOfExtent.QuadPart - CacheOffset.QuadPart; + if (CacheOffset.QuadPart + ReadLen > NextOffset.QuadPart) + { + ReadLen = NextOffset.QuadPart - CacheOffset.QuadPart; + } + + DPRINT("Reading %d bytes in this go (at %08x%08x)\n", ReadLen, CacheOffset.HighPart, CacheOffset.LowPart); + + if (!CcPinRead + (FileObject, + &CacheOffset, + ReadLen, + Wait ? PIN_WAIT : PIN_IF_BCB, + &Bcb, + (PVOID*)&ReadBuffer)) + { + IoStatus->Status = STATUS_UNSUCCESSFUL; + IoStatus->Information = 0; + DPRINT("Failed CcCopyRead\n"); + return FALSE; + } + + DPRINT("Copying %d bytes at %08x%08x\n", ReadLen, CacheOffset.HighPart, CacheOffset.LowPart); + RtlCopyMemory + (BufferTarget, + ReadBuffer, + ReadLen); + + BufferTarget += ReadLen; + + CacheOffset = NextOffset; + CcUnpinData(Bcb); + } - CacheOffset = NextOffset; - CcUnpinData(Bcb); - } - IoStatus->Status = STATUS_SUCCESS; IoStatus->Information = Length;
@@ -139,7 +140,8 @@
while (CurrentOffset.QuadPart < EndOffset.QuadPart) { - NextOffset.QuadPart = (CurrentOffset.QuadPart + CACHE_STRIPE) & ~(CACHE_STRIPE - 1); + NextOffset.HighPart = CurrentOffset.HighPart; + NextOffset.LowPart = (CurrentOffset.LowPart + CACHE_STRIPE) & ~(CACHE_STRIPE - 1); DPRINT("NextOffset %08x%08x\n", NextOffset.u.HighPart, NextOffset.u.LowPart); WriteLen = MIN(NextOffset.QuadPart - CurrentOffset.QuadPart, Length); DPRINT("Copying %x bytes from %08x%08x\n",
Modified: branches/arty-newcc/ntoskrnl/cache/pinsup.c URL: http://svn.reactos.org/svn/reactos/branches/arty-newcc/ntoskrnl/cache/pinsup... ============================================================================== --- branches/arty-newcc/ntoskrnl/cache/pinsup.c [iso-8859-1] (original) +++ branches/arty-newcc/ntoskrnl/cache/pinsup.c [iso-8859-1] Fri Nov 13 16:35:12 2009 @@ -39,14 +39,14 @@ PETHREAD LastThread; VOID _CcpLock(const char *file, int line) { - DPRINT("<<<---<<< CC In Mutex(%s:%d %x)!\n", file, line, PsGetCurrentThread()); + //DPRINT("<<<---<<< CC In Mutex(%s:%d %x)!\n", file, line, PsGetCurrentThread()); ExAcquireFastMutex(&CcMutex); }
VOID _CcpUnlock(const char *file, int line) { ExReleaseFastMutex(&CcMutex); - DPRINT(">>>--->>> CC Exit Mutex!\n", file, line); + //DPRINT(">>>--->>> CC Exit Mutex!\n", file, line); }
PDEVICE_OBJECT @@ -301,11 +301,12 @@ return FALSE; }
- DPRINT("CcMapData(F->%x,%x:%d)\n", FileObject, FileOffset->LowPart, Length); + DPRINT("CcMapData(F->%x,%08x%08x:%d)\n", FileObject, FileOffset->HighPart, FileOffset->LowPart, Length);
ASSERT(KeGetCurrentIrql() < DISPATCH_LEVEL);
- Target.QuadPart = CACHE_ROUND_DOWN(FileOffset->QuadPart); + Target.HighPart = FileOffset->HighPart; + Target.LowPart = CACHE_ROUND_DOWN(FileOffset->LowPart);
CcpLock();
@@ -320,8 +321,9 @@ *BcbResult = Bcb; *Buffer = ((PCHAR)Bcb->BaseAddress) + (int)(FileOffset->QuadPart - Bcb->FileOffset.QuadPart); DPRINT - ("Bcb #%x Buffer maps (%x) At %x Length %x (Getting %x:%x) %wZ\n", + ("Bcb #%x Buffer maps (%08x%08x) At %x Length %x (Getting %x:%x) %wZ\n", Bcb - CcCacheSections, + Bcb->FileOffset.HighPart, Bcb->FileOffset.LowPart, Bcb->BaseAddress, Bcb->Length, @@ -430,8 +432,9 @@ *Buffer = ((PCHAR)Bcb->BaseAddress) + (int)(FileOffset->QuadPart - Bcb->FileOffset.QuadPart);
DPRINT - ("Bcb #%x Buffer maps (%x) At %x Length %x (Getting %x:%x) %wZ\n", + ("Bcb #%x Buffer maps (%08x%08x) At %x Length %x (Getting %x:%x) %wZ\n", Bcb - CcCacheSections, + Bcb->FileOffset.HighPart, Bcb->FileOffset.LowPart, Bcb->BaseAddress, Bcb->Length,
Modified: branches/arty-newcc/ntoskrnl/include/internal/newcc.h URL: http://svn.reactos.org/svn/reactos/branches/arty-newcc/ntoskrnl/include/inte... ============================================================================== --- branches/arty-newcc/ntoskrnl/include/internal/newcc.h [iso-8859-1] (original) +++ branches/arty-newcc/ntoskrnl/include/internal/newcc.h [iso-8859-1] Fri Nov 13 16:35:12 2009 @@ -225,9 +225,6 @@ #define CACHE_NUM_SECTIONS (CACHE_OVERALL_SIZE / CACHE_STRIPE) #define CACHE_ROUND_UP(x) (((x) + (CACHE_STRIPE-1)) & ~(CACHE_STRIPE-1)) #define CACHE_ROUND_DOWN(x) ((x) & ~(CACHE_STRIPE-1)) -#define CACHE_NEED_SECTIONS(OFFSET,LENGTH) \ - ((CACHE_ROUND_UP((OFFSET)->QuadPart + (LENGTH)) - \ - CACHE_ROUND_DOWN((OFFSET)->QuadPart)) >> CACHE_SHIFT) #define INVALID_CACHE ((ULONG)~0)
extern NOCC_BCB CcCacheSections[CACHE_NUM_SECTIONS];
Modified: branches/arty-newcc/ntoskrnl/include/internal/newmm.h URL: http://svn.reactos.org/svn/reactos/branches/arty-newcc/ntoskrnl/include/inte... ============================================================================== --- branches/arty-newcc/ntoskrnl/include/internal/newmm.h [iso-8859-1] (original) +++ branches/arty-newcc/ntoskrnl/include/internal/newmm.h [iso-8859-1] Fri Nov 13 16:35:12 2009 @@ -326,8 +326,8 @@ struct { ROS_SECTION_OBJECT* Section; - ULONG ViewOffset; PMM_SECTION_SEGMENT Segment; + LARGE_INTEGER ViewOffset; BOOLEAN WriteCopyView; LIST_ENTRY RegionListHead; } SectionData; @@ -1859,7 +1859,7 @@ PVOID* BaseAddress, SIZE_T ViewSize, ULONG Protect, - ULONG ViewOffset, + PLARGE_INTEGER ViewOffset, ULONG AllocationType);
/* section/image.c ***********************************************************/
Modified: branches/arty-newcc/ntoskrnl/mm/rmap.c URL: http://svn.reactos.org/svn/reactos/branches/arty-newcc/ntoskrnl/mm/rmap.c?re... ============================================================================== --- branches/arty-newcc/ntoskrnl/mm/rmap.c [iso-8859-1] (original) +++ branches/arty-newcc/ntoskrnl/mm/rmap.c [iso-8859-1] Fri Nov 13 16:35:12 2009 @@ -119,8 +119,8 @@ Type = MemoryArea->Type; if (Type == MEMORY_AREA_SECTION_VIEW) { - Offset = (ULONG_PTR)Address - (ULONG_PTR)MemoryArea->StartingAddress - + MemoryArea->Data.SectionData.ViewOffset; + Offset = (ULONG_PTR)Address - (ULONG_PTR)MemoryArea->StartingAddress; + /* * Get or create a pageop */ @@ -253,8 +253,7 @@ Type = MemoryArea->Type; if (Type == MEMORY_AREA_SECTION_VIEW) { - Offset = (ULONG_PTR)Address - (ULONG_PTR)MemoryArea->StartingAddress - + MemoryArea->Data.SectionData.ViewOffset; + Offset = (ULONG_PTR)Address - (ULONG_PTR)MemoryArea->StartingAddress;
/* * Get or create a pageop @@ -286,8 +285,7 @@ #ifdef _NEWCC_ else if (Type == MEMORY_AREA_PAGE_FILE_SECTION) { - Offset = (ULONG_PTR)Address - (ULONG_PTR)MemoryArea->StartingAddress - + MemoryArea->Data.SectionData.ViewOffset; + Offset = (ULONG_PTR)Address - (ULONG_PTR)MemoryArea->StartingAddress;
/* * Get or create a pageop @@ -318,8 +316,7 @@ } else if (Type == MEMORY_AREA_IMAGE_SECTION) { - Offset = (ULONG_PTR)Address - (ULONG_PTR)MemoryArea->StartingAddress - + MemoryArea->Data.SectionData.ViewOffset; + Offset = (ULONG_PTR)Address - (ULONG_PTR)MemoryArea->StartingAddress;
/* * Get or create a pageop
Modified: branches/arty-newcc/ntoskrnl/mm/section/data.c URL: http://svn.reactos.org/svn/reactos/branches/arty-newcc/ntoskrnl/mm/section/d... ============================================================================== --- branches/arty-newcc/ntoskrnl/mm/section/data.c [iso-8859-1] (original) +++ branches/arty-newcc/ntoskrnl/mm/section/data.c [iso-8859-1] Fri Nov 13 16:35:12 2009 @@ -206,6 +206,7 @@
if (MmIsDirtyPageRmap(Page)) { + DPRINT("MiWriteBackPage(%wZ,%08x%08x)\n", &FileObject->FileName, Offset->u.HighPart, Offset->u.LowPart); Status = MiWriteBackPage(FileObject, Offset, PAGE_SIZE, Page); if (!NT_SUCCESS(Status)) { @@ -358,7 +359,7 @@ Region = MmFindRegion(MemoryArea->StartingAddress, &MemoryArea->Data.SectionData.RegionListHead, Address, NULL); - TotalOffset.QuadPart = Offset + MemoryArea->Data.SectionData.ViewOffset; + TotalOffset.QuadPart = MemoryArea->Data.SectionData.ViewOffset.QuadPart + Offset;
/* * Lock the segment @@ -367,13 +368,13 @@
Entry = MiGetPageEntrySectionSegment(Segment, &TotalOffset); HasSwapEntry = MmIsPageSwapEntry(Process, (PVOID)PAddress); - DPRINT("Entry %x HasSwapEntry %x Offset %x\n", Entry, HasSwapEntry, TotalOffset.QuadPart); + DPRINT("Entry %x HasSwapEntry %x Offset %08x%08x\n", Entry, HasSwapEntry, TotalOffset.u.HighPart, TotalOffset.u.LowPart);
if (Entry == 0 && !HasSwapEntry) { DPRINT("Segment->RawLength %08x%08x\n", Segment->RawLength.u.HighPart, Segment->RawLength.u.LowPart); DPRINT("Segment->Length %08x%08x\n", Segment->Length.u.HighPart, Segment->Length.u.LowPart); - DPRINT("Reading at offset %x (relative %x)\n", TotalOffset.LowPart, Offset); + DPRINT("Reading at offset %08x%08x (relative %x)\n", TotalOffset.HighPart, TotalOffset.LowPart, Offset); MmUnlockSectionSegment(Segment); MmUnlockAddressSpace(AddressSpace); @@ -616,8 +617,8 @@ * Find the offset of the page */ PAddress = MM_ROUND_DOWN(Address, PAGE_SIZE); - Offset.QuadPart = (ULONG_PTR)PAddress - (ULONG_PTR)MemoryArea->StartingAddress - + MemoryArea->Data.SectionData.ViewOffset; + Offset.QuadPart = (ULONG_PTR)PAddress - (ULONG_PTR)MemoryArea->StartingAddress + + MemoryArea->Data.SectionData.ViewOffset.QuadPart;
Segment = MemoryArea->Data.SectionData.Segment; Section = MemoryArea->Data.SectionData.Section; @@ -728,7 +729,8 @@ PEPROCESS Process = MmGetAddressSpaceOwner(AddressSpace); Address = MM_ROUND_DOWN(Address, PAGE_SIZE); - Offset.QuadPart = (ULONG_PTR)Address - (ULONG_PTR)MemoryArea->StartingAddress; + Offset.QuadPart = (ULONG_PTR)Address - (ULONG_PTR)MemoryArea->StartingAddress + + MemoryArea->Data.SectionData.ViewOffset.QuadPart; Region = MmFindRegion(MemoryArea->StartingAddress, &MemoryArea->Data.SectionData.RegionListHead, Address, NULL); @@ -819,9 +821,10 @@ }
Segment = MemoryArea->Data.SectionData.Segment; - End.QuadPart = PAGE_ROUND_DOWN(FileOffset.QuadPart + Length); - FileOffset.QuadPart = PAGE_ROUND_UP(FileOffset.QuadPart); - FirstMapped.QuadPart = MemoryArea->Data.SectionData.ViewOffset; + End.QuadPart = FileOffset.QuadPart + Length; + End.LowPart = PAGE_ROUND_DOWN(End.LowPart); + FileOffset.LowPart = PAGE_ROUND_UP(FileOffset.LowPart); + FirstMapped.QuadPart = MemoryArea->Data.SectionData.ViewOffset.QuadPart; DPRINT1 ("Pulling zero pages for %08x%08x-%08x%08x\n", FileOffset.u.HighPart, FileOffset.u.LowPart, @@ -917,7 +920,6 @@ MM_SECTION_PAGEOUT_CONTEXT Context; SWAPENTRY SwapEntry; ULONG Entry; - LARGE_INTEGER FileOffset; NTSTATUS Status; PFILE_OBJECT FileObject; PEPROCESS Process = MmGetAddressSpaceOwner(AddressSpace); @@ -929,9 +931,8 @@ */ Context.Segment = MemoryArea->Data.SectionData.Segment; Context.Section = MemoryArea->Data.SectionData.Section; - - Context.Offset.QuadPart = (ULONG_PTR)Address - (ULONG_PTR)MemoryArea->StartingAddress; - FileOffset = Context.Offset; + Context.Offset.QuadPart = (ULONG_PTR)Address - (ULONG_PTR)MemoryArea->StartingAddress + + MemoryArea->Data.SectionData.ViewOffset.QuadPart;
FileObject = Context.Section->FileObject;
@@ -984,7 +985,8 @@
if (Context.WasDirty) { - Status = MiWriteBackPage(FileObject, &FileOffset, PAGE_SIZE, Page); + DPRINT("MiWriteBackPage(%wZ,%08x%08x)\n", &FileObject->FileName, Context.Offset.u.HighPart, Context.Offset.u.LowPart); + Status = MiWriteBackPage(FileObject, &Context.Offset, PAGE_SIZE, Page); if (!NT_SUCCESS(Status)) { DPRINT1("CCRosUnmapCacheSegment failed, status = %x\n", Status); @@ -1161,7 +1163,8 @@
Address = (PVOID)PAGE_ROUND_DOWN(Address);
- Offset.QuadPart = (ULONG_PTR)Address - (ULONG_PTR)MemoryArea->StartingAddress; + Offset.QuadPart = (ULONG_PTR)Address - (ULONG_PTR)MemoryArea->StartingAddress + + MemoryArea->Data.SectionData.ViewOffset.QuadPart;
/* * Get the segment and section. @@ -1209,6 +1212,7 @@ if (!Private) { ASSERT(SwapEntry == 0); + DPRINT("MiWriteBackPage(%wZ,%08x%08x)\n", &FileObject->FileName, Offset.u.HighPart, Offset.u.LowPart); Status = PageOp->Status = MiWriteBackPage(FileObject, &Offset, PAGE_SIZE, Page); MmspCompleteAndReleasePageOp(PageOp); return(Status); @@ -1280,7 +1284,7 @@ BeginningAddress = PAGE_ROUND_DOWN((ULONG_PTR)MemoryArea->StartingAddress); EndingAddress = PAGE_ROUND_UP((ULONG_PTR)MemoryArea->EndingAddress); Segment = MemoryArea->Data.SectionData.Segment; - ViewOffset.QuadPart = MemoryArea->Data.SectionData.ViewOffset; + ViewOffset.QuadPart = MemoryArea->Data.SectionData.ViewOffset.QuadPart;
MmLockSectionSegment(Segment);
@@ -1325,6 +1329,7 @@ Page = Pages[(PageAddress - BeginningAddress) >> PAGE_SHIFT]; if (Page) { + DPRINT("MiWriteBackPage(%wZ,%08x%08x)\n", &Segment->FileObject->FileName, FileOffset.u.HighPart, FileOffset.u.LowPart); Status = MiWriteBackPage(Segment->FileObject, &FileOffset, PAGE_SIZE, Page); MmUnlockPage(Page); MmSetCleanAllRmaps(Page); @@ -1394,7 +1399,7 @@ PFN_TYPE Page;
Offset.QuadPart = (ULONG_PTR)Address - (ULONG_PTR)MemoryArea->StartingAddress - + MemoryArea->Data.SectionData.ViewOffset; + + MemoryArea->Data.SectionData.ViewOffset.QuadPart; Entry = MiGetPageEntrySectionSegment(Segment, &Offset); Page = MmGetPfnForProcess(Process, Address);
@@ -1919,7 +1924,7 @@ PVOID* BaseAddress, SIZE_T ViewSize, ULONG Protect, - ULONG ViewOffset, + PLARGE_INTEGER ViewOffset, ULONG AllocationType) { PMEMORY_AREA MArea; @@ -1954,7 +1959,10 @@
MArea->Data.SectionData.Segment = Segment; MArea->Data.SectionData.Section = Section; - MArea->Data.SectionData.ViewOffset = ViewOffset; + if (ViewOffset) + MArea->Data.SectionData.ViewOffset = *ViewOffset; + else + MArea->Data.SectionData.ViewOffset.QuadPart = 0; MArea->Data.SectionData.WriteCopyView = FALSE; MmInitializeRegion(&MArea->Data.SectionData.RegionListHead, ViewSize, 0, Protect); @@ -2219,7 +2227,7 @@ Address = (PVOID)PAGE_ROUND_DOWN(Address);
Offset.QuadPart = ((ULONG_PTR)Address - (ULONG_PTR)MemoryArea->StartingAddress) + - MemoryArea->Data.SectionData.ViewOffset; + MemoryArea->Data.SectionData.ViewOffset.QuadPart;
Section = MemoryArea->Data.SectionData.Section; Segment = MemoryArea->Data.SectionData.Segment; @@ -2352,7 +2360,7 @@ Offset -= PAGE_SIZE; PageOp = MmCheckForPageOp(MemoryArea, NULL, NULL, MemoryArea->Data.SectionData.Segment, - Offset + MemoryArea->Data.SectionData.ViewOffset); + Offset); if (PageOp) { MmUnlockAddressSpace(AddressSpace); @@ -2648,7 +2656,7 @@
MmLockSectionSegment(Segment); Segment->RawLength.QuadPart = NewSize->QuadPart; - Segment->Length.QuadPart = MAX(Segment->Length.QuadPart, PAGE_ROUND_UP(Segment->RawLength.QuadPart)); + Segment->Length.QuadPart = MAX(Segment->Length.QuadPart, PAGE_ROUND_UP(Segment->RawLength.LowPart)); MmUnlockSectionSegment(Segment); Section->MaximumSize = *NewSize; return STATUS_SUCCESS; @@ -2842,7 +2850,7 @@ { PROS_SECTION_OBJECT Section; PMMSUPPORT AddressSpace; - ULONG ViewOffset; + LARGE_INTEGER ViewOffset; NTSTATUS Status = STATUS_SUCCESS;
ASSERT(Process); @@ -2900,14 +2908,14 @@
if (SectionOffset == NULL) { - ViewOffset = 0; + ViewOffset.QuadPart = 0; } else { - ViewOffset = SectionOffset->u.LowPart; + ViewOffset = *SectionOffset; }
- if ((ViewOffset % PAGE_SIZE) != 0) + if ((ViewOffset.QuadPart % PAGE_SIZE) != 0) { MmUnlockAddressSpace(AddressSpace); return(STATUS_MAPPED_ALIGNMENT); @@ -2915,11 +2923,11 @@
if ((*ViewSize) == 0) { - (*ViewSize) = Section->MaximumSize.u.LowPart - ViewOffset; + (*ViewSize) = Section->MaximumSize.QuadPart - ViewOffset.QuadPart; } - else if (((*ViewSize)+ViewOffset) > Section->MaximumSize.u.LowPart) + else if (((*ViewSize)+ViewOffset.QuadPart) > Section->MaximumSize.QuadPart) { - (*ViewSize) = Section->MaximumSize.u.LowPart - ViewOffset; + (*ViewSize) = Section->MaximumSize.QuadPart - ViewOffset.QuadPart; }
MmLockSectionSegment(Section->Segment); @@ -2929,7 +2937,7 @@ BaseAddress, *ViewSize, Protect, - ViewOffset, + &ViewOffset, AllocationType & (MEM_TOP_DOWN|SEC_NO_CHANGE)); MmUnlockSectionSegment(Section->Segment); if (!NT_SUCCESS(Status)) @@ -3085,7 +3093,7 @@ PMMSUPPORT AddressSpace; NTSTATUS Status;
- DPRINT("MmMapViewInSystemSpaceAtOffset() called offset %x\n", FileOffset->LowPart); + DPRINT("MmMapViewInSystemSpaceAtOffset() called offset %08x%08x\n", FileOffset->HighPart, FileOffset->LowPart);
Section = (PROS_SECTION_OBJECT)SectionObject; AddressSpace = MmGetKernelAddressSpace(); @@ -3100,7 +3108,7 @@ MappedBase, *ViewSize, Section->SectionPageProtection, - FileOffset->LowPart, + FileOffset, 0);
MmUnlockSectionSegment(Section->Segment);
Modified: branches/arty-newcc/ntoskrnl/mm/section/image.c URL: http://svn.reactos.org/svn/reactos/branches/arty-newcc/ntoskrnl/mm/section/i... ============================================================================== --- branches/arty-newcc/ntoskrnl/mm/section/image.c [iso-8859-1] (original) +++ branches/arty-newcc/ntoskrnl/mm/section/image.c [iso-8859-1] Fri Nov 13 16:35:12 2009 @@ -1797,7 +1797,7 @@ Address = (PVOID)PAGE_ROUND_DOWN(Address);
Offset.QuadPart = ((ULONG_PTR)Address - (ULONG_PTR)MemoryArea->StartingAddress) + - MemoryArea->Data.SectionData.ViewOffset; + MemoryArea->Data.SectionData.ViewOffset.QuadPart;
Section = MemoryArea->Data.SectionData.Section; Segment = MemoryArea->Data.SectionData.Segment;
Modified: branches/arty-newcc/ntoskrnl/mm/section/io.c URL: http://svn.reactos.org/svn/reactos/branches/arty-newcc/ntoskrnl/mm/section/i... ============================================================================== --- branches/arty-newcc/ntoskrnl/mm/section/io.c [iso-8859-1] (original) +++ branches/arty-newcc/ntoskrnl/mm/section/io.c [iso-8859-1] Fri Nov 13 16:35:12 2009 @@ -239,9 +239,10 @@ ASSERT(DeviceObject);
DPRINT - ("PAGING READ: FileObject %x <%wZ> Offset %x Length %d\n", + ("PAGING READ: FileObject %x <%wZ> Offset %08x%08x Length %d\n", &FileObject, &FileObject->FileName, + FileOffset->HighPart, FileOffset->LowPart, Length);
Modified: branches/arty-newcc/ntoskrnl/mm/section/pagefile.c URL: http://svn.reactos.org/svn/reactos/branches/arty-newcc/ntoskrnl/mm/section/p... ============================================================================== --- branches/arty-newcc/ntoskrnl/mm/section/pagefile.c [iso-8859-1] (original) +++ branches/arty-newcc/ntoskrnl/mm/section/pagefile.c [iso-8859-1] Fri Nov 13 16:35:12 2009 @@ -712,7 +712,7 @@ Address = (PVOID)PAGE_ROUND_DOWN(Address);
Offset.QuadPart = ((ULONG_PTR)Address - (ULONG_PTR)MemoryArea->StartingAddress) + - MemoryArea->Data.SectionData.ViewOffset; + MemoryArea->Data.SectionData.ViewOffset.QuadPart;
Section = MemoryArea->Data.SectionData.Section; Segment = MemoryArea->Data.SectionData.Segment;
Modified: branches/arty-newcc/ntoskrnl/mm/section/physical.c URL: http://svn.reactos.org/svn/reactos/branches/arty-newcc/ntoskrnl/mm/section/p... ============================================================================== --- branches/arty-newcc/ntoskrnl/mm/section/physical.c [iso-8859-1] (original) +++ branches/arty-newcc/ntoskrnl/mm/section/physical.c [iso-8859-1] Fri Nov 13 16:35:12 2009 @@ -75,11 +75,11 @@ * Just map the desired physical page */ PAddress = MM_ROUND_DOWN(Address, PAGE_SIZE); - Offset = (ULONG_PTR)PAddress - (ULONG_PTR)MemoryArea->StartingAddress + MemoryArea->Data.SectionData.ViewOffset; + Offset = (ULONG_PTR)PAddress - (ULONG_PTR)MemoryArea->StartingAddress; Region = MmFindRegion(MemoryArea->StartingAddress, &MemoryArea->Data.SectionData.RegionListHead, Address, NULL); - Page = Offset >> PAGE_SHIFT; + Page = (Offset + MemoryArea->Data.SectionData.ViewOffset.QuadPart) >> PAGE_SHIFT; Status = MmCreateVirtualMappingUnsafe(Process, Address, Region->Protect,
Modified: branches/arty-newcc/ntoskrnl/mm/virtual.c URL: http://svn.reactos.org/svn/reactos/branches/arty-newcc/ntoskrnl/mm/virtual.c... ============================================================================== --- branches/arty-newcc/ntoskrnl/mm/virtual.c [iso-8859-1] (original) +++ branches/arty-newcc/ntoskrnl/mm/virtual.c [iso-8859-1] Fri Nov 13 16:35:12 2009 @@ -81,6 +81,11 @@ break;
case MEMORY_AREA_SECTION_VIEW: +#ifdef _NEWCC_ + case MEMORY_AREA_PHYSICAL_MEMORY_SECTION: + case MEMORY_AREA_PAGE_FILE_SECTION: + case MEMORY_AREA_IMAGE_SECTION: +#endif Status = MmQuerySectionView(MemoryArea, Address, Info, ResultLength); break;