diff --git a/reactos/ntoskrnl/cc/copy.c b/reactos/ntoskrnl/cc/copy.c index 7cd5d3d014e..d63c36e06ea 100644 --- a/reactos/ntoskrnl/cc/copy.c +++ b/reactos/ntoskrnl/cc/copy.c @@ -66,7 +66,6 @@ ReadVacbChain ( PROS_VACB current; PROS_VACB previous; IO_STATUS_BLOCK Iosb; - LARGE_INTEGER VacbOffset; NTSTATUS Status; ULONG TempLength; KEVENT Event; @@ -141,11 +140,10 @@ ReadVacbChain ( /* * Read in the information. */ - VacbOffset.QuadPart = current->FileOffset; KeInitializeEvent(&Event, NotificationEvent, FALSE); Status = IoPageRead(SharedCacheMap->FileObject, Mdl, - &VacbOffset, + ¤t->FileOffset, &Event, &Iosb); if (Status == STATUS_PENDING) @@ -194,12 +192,10 @@ CcReadVirtualAddress ( ULONG Size; PMDL Mdl; NTSTATUS Status; - LARGE_INTEGER VacbOffset; IO_STATUS_BLOCK IoStatus; KEVENT Event; - VacbOffset.QuadPart = Vacb->FileOffset; - Size = (ULONG)(Vacb->SharedCacheMap->SectionSize.QuadPart - Vacb->FileOffset); + Size = (ULONG)(Vacb->SharedCacheMap->SectionSize.QuadPart - Vacb->FileOffset.QuadPart); if (Size > VACB_MAPPING_GRANULARITY) { Size = VACB_MAPPING_GRANULARITY; @@ -214,7 +210,7 @@ CcReadVirtualAddress ( MmBuildMdlForNonPagedPool(Mdl); Mdl->MdlFlags |= MDL_IO_PAGE_READ; KeInitializeEvent(&Event, NotificationEvent, FALSE); - Status = IoPageRead(Vacb->SharedCacheMap->FileObject, Mdl, &VacbOffset, &Event, &IoStatus); + Status = IoPageRead(Vacb->SharedCacheMap->FileObject, Mdl, &Vacb->FileOffset, &Event, &IoStatus); if (Status == STATUS_PENDING) { KeWaitForSingleObject(&Event, Executive, KernelMode, FALSE, NULL); @@ -247,12 +243,10 @@ CcWriteVirtualAddress ( PMDL Mdl; NTSTATUS Status; IO_STATUS_BLOCK IoStatus; - LARGE_INTEGER VacbOffset; KEVENT Event; Vacb->Dirty = FALSE; - VacbOffset.QuadPart = Vacb->FileOffset; - Size = (ULONG)(Vacb->SharedCacheMap->SectionSize.QuadPart - Vacb->FileOffset); + Size = (ULONG)(Vacb->SharedCacheMap->SectionSize.QuadPart - Vacb->FileOffset.QuadPart); if (Size > VACB_MAPPING_GRANULARITY) { Size = VACB_MAPPING_GRANULARITY; @@ -277,7 +271,7 @@ CcWriteVirtualAddress ( MmBuildMdlForNonPagedPool(Mdl); Mdl->MdlFlags |= MDL_IO_PAGE_READ; KeInitializeEvent(&Event, NotificationEvent, FALSE); - Status = IoSynchronousPageWrite(Vacb->SharedCacheMap->FileObject, Mdl, &VacbOffset, &Event, &IoStatus); + Status = IoSynchronousPageWrite(Vacb->SharedCacheMap->FileObject, Mdl, &Vacb->FileOffset, &Event, &IoStatus); if (Status == STATUS_PENDING) { KeWaitForSingleObject(&Event, Executive, KernelMode, FALSE, NULL); @@ -364,7 +358,8 @@ CcCopyRead ( ROS_VACB, CacheMapVacbListEntry); if (!current->Valid && - DoRangesIntersect(current->FileOffset, VACB_MAPPING_GRANULARITY, + DoRangesIntersect(current->FileOffset.QuadPart, + VACB_MAPPING_GRANULARITY, ReadOffset, Length)) { KeReleaseSpinLock(&SharedCacheMap->CacheMapLock, oldirql); @@ -372,7 +367,7 @@ CcCopyRead ( IoStatus->Information = 0; return FALSE; } - if (current->FileOffset >= ReadOffset + Length) + if (current->FileOffset.QuadPart >= ReadOffset + Length) break; current_entry = current_entry->Flink; } @@ -482,14 +477,15 @@ CcCopyWrite ( ROS_VACB, CacheMapVacbListEntry); if (!Vacb->Valid && - DoRangesIntersect(Vacb->FileOffset, VACB_MAPPING_GRANULARITY, + DoRangesIntersect(Vacb->FileOffset.QuadPart, + VACB_MAPPING_GRANULARITY, WriteOffset, Length)) { KeReleaseSpinLock(&SharedCacheMap->CacheMapLock, oldirql); /* datas not available */ return FALSE; } - if (Vacb->FileOffset >= WriteOffset + Length) + if (Vacb->FileOffset.QuadPart >= WriteOffset + Length) break; current_entry = current_entry->Flink; } @@ -704,14 +700,15 @@ CcZeroData ( ROS_VACB, CacheMapVacbListEntry); if (!Vacb->Valid && - DoRangesIntersect(Vacb->FileOffset, VACB_MAPPING_GRANULARITY, + DoRangesIntersect(Vacb->FileOffset.QuadPart, + VACB_MAPPING_GRANULARITY, WriteOffset.u.LowPart, Length)) { KeReleaseSpinLock(&SharedCacheMap->CacheMapLock, oldirql); /* datas not available */ return FALSE; } - if (Vacb->FileOffset >= WriteOffset.u.LowPart + Length) + if (Vacb->FileOffset.QuadPart >= WriteOffset.u.LowPart + Length) break; current_entry = current_entry->Flink; } diff --git a/reactos/ntoskrnl/cc/fs.c b/reactos/ntoskrnl/cc/fs.c index 0652891f0da..2b95fb19376 100644 --- a/reactos/ntoskrnl/cc/fs.c +++ b/reactos/ntoskrnl/cc/fs.c @@ -163,7 +163,7 @@ CcSetFileSizes ( ROS_VACB, CacheMapVacbListEntry); current_entry = current_entry->Flink; - if (current->FileOffset >= FileSizes->AllocationSize.QuadPart) + if (current->FileOffset.QuadPart >= FileSizes->AllocationSize.QuadPart) { if ((current->ReferenceCount == 0) || ((current->ReferenceCount == 1) && current->Dirty)) { diff --git a/reactos/ntoskrnl/cc/view.c b/reactos/ntoskrnl/cc/view.c index 2bce41bdfdf..0584917098c 100644 --- a/reactos/ntoskrnl/cc/view.c +++ b/reactos/ntoskrnl/cc/view.c @@ -456,7 +456,8 @@ CcRosLookupVacb ( current = CONTAINING_RECORD(current_entry, ROS_VACB, CacheMapVacbListEntry); - if (IsPointInRange(current->FileOffset, VACB_MAPPING_GRANULARITY, + if (IsPointInRange(current->FileOffset.QuadPart, + VACB_MAPPING_GRANULARITY, FileOffset)) { CcRosVacbIncRefCount(current); @@ -469,7 +470,7 @@ CcRosLookupVacb ( NULL); return current; } - if (current->FileOffset > FileOffset) + if (current->FileOffset.QuadPart > FileOffset) break; current_entry = current_entry->Flink; } @@ -606,7 +607,7 @@ CcRosCreateVacb ( current->Valid = FALSE; current->Dirty = FALSE; current->PageOut = FALSE; - current->FileOffset = ROUND_DOWN(FileOffset, VACB_MAPPING_GRANULARITY); + current->FileOffset.QuadPart = ROUND_DOWN(FileOffset, VACB_MAPPING_GRANULARITY); current->SharedCacheMap = SharedCacheMap; #if DBG if (SharedCacheMap->Trace) @@ -640,7 +641,8 @@ CcRosCreateVacb ( current = CONTAINING_RECORD(current_entry, ROS_VACB, CacheMapVacbListEntry); - if (IsPointInRange(current->FileOffset, VACB_MAPPING_GRANULARITY, + if (IsPointInRange(current->FileOffset.QuadPart, + VACB_MAPPING_GRANULARITY, FileOffset)) { CcRosVacbIncRefCount(current); @@ -665,13 +667,13 @@ CcRosCreateVacb ( NULL); return STATUS_SUCCESS; } - if (current->FileOffset < FileOffset) + if (current->FileOffset.QuadPart < FileOffset) { ASSERT(previous == NULL || - previous->FileOffset < current->FileOffset); + previous->FileOffset.QuadPart < current->FileOffset.QuadPart); previous = current; } - if (current->FileOffset > FileOffset) + if (current->FileOffset.QuadPart > FileOffset) break; current_entry = current_entry->Flink; } @@ -798,7 +800,7 @@ NTAPI CcRosGetVacb ( PROS_SHARED_CACHE_MAP SharedCacheMap, ULONG FileOffset, - PULONG BaseOffset, + PULONGLONG BaseOffset, PVOID* BaseAddress, PBOOLEAN UptoDate, PROS_VACB *Vacb) @@ -841,7 +843,7 @@ CcRosGetVacb ( *BaseAddress = current->BaseAddress; DPRINT("*BaseAddress %p\n", *BaseAddress); *Vacb = current; - *BaseOffset = current->FileOffset; + *BaseOffset = current->FileOffset.QuadPart; return STATUS_SUCCESS; } @@ -857,7 +859,7 @@ CcRosRequestVacb ( * FUNCTION: Request a page mapping for a shared cache map */ { - ULONG BaseOffset; + ULONGLONG BaseOffset; ASSERT(SharedCacheMap); diff --git a/reactos/ntoskrnl/include/internal/cc.h b/reactos/ntoskrnl/include/internal/cc.h index e781e14c15b..57649deec89 100644 --- a/reactos/ntoskrnl/include/internal/cc.h +++ b/reactos/ntoskrnl/include/internal/cc.h @@ -138,7 +138,7 @@ typedef struct _ROS_VACB LIST_ENTRY VacbListEntry; LIST_ENTRY VacbLruListEntry; /* Offset in the file which this view maps. */ - ULONG FileOffset; + LARGE_INTEGER FileOffset; /* Mutex */ KMUTEX Mutex; /* Number of references. */ @@ -187,7 +187,7 @@ NTAPI CcRosGetVacb( PROS_SHARED_CACHE_MAP SharedCacheMap, ULONG FileOffset, - PULONG BaseOffset, + PULONGLONG BaseOffset, PVOID *BaseAddress, PBOOLEAN UptoDate, PROS_VACB *Vacb @@ -305,9 +305,9 @@ CcTryToInitializeFileCache(PFILE_OBJECT FileObject); FORCEINLINE BOOLEAN DoRangesIntersect( - _In_ ULONG Offset1, + _In_ ULONGLONG Offset1, _In_ ULONG Length1, - _In_ ULONG Offset2, + _In_ ULONGLONG Offset2, _In_ ULONG Length2) { if (Offset1 + Length1 <= Offset2) @@ -320,9 +320,9 @@ DoRangesIntersect( FORCEINLINE BOOLEAN IsPointInRange( - _In_ ULONG Offset1, + _In_ ULONGLONG Offset1, _In_ ULONG Length1, - _In_ ULONG Point) + _In_ ULONGLONG Point) { return DoRangesIntersect(Offset1, Length1, Point, 1); } diff --git a/reactos/ntoskrnl/mm/section.c b/reactos/ntoskrnl/mm/section.c index 268e65761e5..ec3b0947678 100644 --- a/reactos/ntoskrnl/mm/section.c +++ b/reactos/ntoskrnl/mm/section.c @@ -1066,7 +1066,7 @@ MiReadPage(PMEMORY_AREA MemoryArea, * Page - Variable that receives a page contains the read data. */ { - ULONG BaseOffset; + ULONGLONG BaseOffset; ULONGLONG FileOffset; PVOID BaseAddress; BOOLEAN UptoDate;