typedef struct
{
- PROS_SECTION_OBJECT Section;
+ PSECTION Section;
PMM_SECTION_SEGMENT Segment;
LARGE_INTEGER Offset;
BOOLEAN WasDirty;
BOOLEAN
NTAPI
-MmUnsharePageEntrySectionSegment(PROS_SECTION_OBJECT Section,
+MmUnsharePageEntrySectionSegment(PSECTION Section,
PMM_SECTION_SEGMENT Segment,
PLARGE_INTEGER Offset,
BOOLEAN Dirty,
#endif
Page = PFN_FROM_SSE(Entry);
- FileObject = Section->FileObject;
+ FileObject = FILE_OBJECT_FROM_SECTION(Section);
if (FileObject != NULL &&
!(Segment->Image.Characteristics & IMAGE_SCN_MEM_SHARED))
{
{
PROS_SHARED_CACHE_MAP SharedCacheMap;
PROS_VACB Vacb;
- SharedCacheMap = MemoryArea->Data.SectionData.Section->FileObject->SectionObjectPointer->SharedCacheMap;
+ SharedCacheMap = FILE_OBJECT_FROM_SECTION(MemoryArea->Data.SectionData.Section)->SectionObjectPointer->SharedCacheMap;
Vacb = CcRosLookupVacb(SharedCacheMap, SegOffset + MemoryArea->Data.SectionData.Segment->Image.FileOffset);
if (Vacb)
{
BOOLEAN IsImageSection;
LONGLONG Length;
- FileObject = MemoryArea->Data.SectionData.Section->FileObject;
+ FileObject = FILE_OBJECT_FROM_SECTION(MemoryArea->Data.SectionData.Section);
SharedCacheMap = FileObject->SectionObjectPointer->SharedCacheMap;
RawLength = MemoryArea->Data.SectionData.Segment->RawLength.QuadPart;
FileOffset = SegOffset + MemoryArea->Data.SectionData.Segment->Image.FileOffset;
LARGE_INTEGER Offset;
PFN_NUMBER Page;
NTSTATUS Status;
- PROS_SECTION_OBJECT Section;
+ PSECTION Section;
PMM_SECTION_SEGMENT Segment;
ULONG_PTR Entry;
ULONG_PTR Entry1;
PVOID Address)
{
PMM_SECTION_SEGMENT Segment;
- PROS_SECTION_OBJECT Section;
+ PSECTION Section;
PFN_NUMBER OldPage;
PFN_NUMBER NewPage;
NTSTATUS Status;
if (!PageOutContext->Private)
{
MmLockSectionSegment(PageOutContext->Segment);
- MmUnsharePageEntrySectionSegment((PROS_SECTION_OBJECT)PageOutContext->Section,
+ MmUnsharePageEntrySectionSegment(PageOutContext->Section,
PageOutContext->Segment,
&PageOutContext->Offset,
PageOutContext->WasDirty,
#ifndef NEWCC
FileOffset = Context.Offset.QuadPart + Context.Segment->Image.FileOffset;
IsImageSection = Context.Section->u.Flags.Image;
- FileObject = Context.Section->FileObject;
+ FileObject = FILE_OBJECT_FROM_SECTION(Context.Section);
if (FileObject != NULL &&
!(Context.Segment->Image.Characteristics & IMAGE_SCN_MEM_SHARED))
ULONG PageEntry)
{
LARGE_INTEGER Offset;
- PROS_SECTION_OBJECT Section;
+ PSECTION Section;
PMM_SECTION_SEGMENT Segment;
PFN_NUMBER Page;
SWAPENTRY SwapEntry;
Section = MemoryArea->Data.SectionData.Section;
IsImageSection = Section->u.Flags.Image;
- FileObject = Section->FileObject;
+ FileObject = FILE_OBJECT_FROM_SECTION(Section);
DirectMapped = FALSE;
if (FileObject != NULL &&
!(Segment->Image.Characteristics & IMAGE_SCN_MEM_SHARED))
{
PMM_REGION Region;
PVOID RegionBaseAddress;
- PROS_SECTION_OBJECT Section;
+ PSECTION Section;
PMM_SECTION_SEGMENT Segment;
Region = MmFindRegion((PVOID)MA_GetStartingAddress(MemoryArea),
VOID NTAPI
MmpDeleteSection(PVOID ObjectBody)
{
- PROS_SECTION_OBJECT Section = (PROS_SECTION_OBJECT)ObjectBody;
+ PSECTION Section = ObjectBody;
+ PFILE_OBJECT FileObject;
/* Check if it's an ARM3, or ReactOS section */
if (!MiIsRosSectionObject(Section))
return;
}
+ FileObject = FILE_OBJECT_FROM_SECTION(Section);
+
DPRINT("MmpDeleteSection(ObjectBody %p)\n", ObjectBody);
if (Section->u.Flags.Image)
{
(void)InterlockedDecrementUL(&Segment->ReferenceCount);
}
}
- if (Section->FileObject != NULL)
+ if (FileObject != NULL)
{
#ifndef NEWCC
- CcRosDereferenceCache(Section->FileObject);
+ CcRosDereferenceCache(FileObject);
#endif
- ObDereferenceObject(Section->FileObject);
- Section->FileObject = NULL;
+ ObDereferenceObject(FileObject);
}
}
NTAPI
MmCreatePhysicalMemorySection(VOID)
{
- PROS_SECTION_OBJECT PhysSection;
+ PSECTION PhysSection;
NTSTATUS Status;
OBJECT_ATTRIBUTES Obj;
UNICODE_STRING Name = RTL_CONSTANT_STRING(L"\\Device\\PhysicalMemory");
RtlZeroMemory(&ObjectTypeInitializer, sizeof(ObjectTypeInitializer));
RtlInitUnicodeString(&Name, L"Section");
ObjectTypeInitializer.Length = sizeof(ObjectTypeInitializer);
- ObjectTypeInitializer.DefaultPagedPoolCharge = sizeof(ROS_SECTION_OBJECT);
+ ObjectTypeInitializer.DefaultPagedPoolCharge = sizeof(SECTION);
ObjectTypeInitializer.PoolType = PagedPool;
ObjectTypeInitializer.UseDefaultObject = TRUE;
ObjectTypeInitializer.GenericMapping = MmpSectionMapping;
NTSTATUS
NTAPI
-MmCreatePageFileSection(PROS_SECTION_OBJECT *SectionObject,
+MmCreatePageFileSection(PSECTION *SectionObject,
ACCESS_MASK DesiredAccess,
POBJECT_ATTRIBUTES ObjectAttributes,
PLARGE_INTEGER UMaximumSize,
*/
{
LARGE_INTEGER MaximumSize;
- PROS_SECTION_OBJECT Section;
+ PSECTION Section;
PMM_SECTION_SEGMENT Segment;
NTSTATUS Status;
ObjectAttributes,
ExGetPreviousMode(),
NULL,
- sizeof(ROS_SECTION_OBJECT),
+ sizeof(*Section),
0,
0,
- (PVOID*)(PVOID)&Section);
+ (PVOID*)&Section);
if (!NT_SUCCESS(Status))
{
DPRINT1("MmCreatePageFileSection: failed to create object (0x%lx)\n", Status);
/*
* Initialize it
*/
- RtlZeroMemory(Section, sizeof(ROS_SECTION_OBJECT));
+ RtlZeroMemory(Section, sizeof(*Section));
/* Mark it as a "ROS" Section */
Section->u.Flags.filler0 = 1;
Section->InitialPageProtection = SectionPageProtection;
NTSTATUS
NTAPI
-MmCreateDataFileSection(PROS_SECTION_OBJECT *SectionObject,
+MmCreateDataFileSection(PSECTION *SectionObject,
ACCESS_MASK DesiredAccess,
POBJECT_ATTRIBUTES ObjectAttributes,
PLARGE_INTEGER UMaximumSize,
* Create a section backed by a data file
*/
{
- PROS_SECTION_OBJECT Section;
+ PSECTION Section;
NTSTATUS Status;
LARGE_INTEGER MaximumSize;
PMM_SECTION_SEGMENT Segment;
ObjectAttributes,
ExGetPreviousMode(),
NULL,
- sizeof(ROS_SECTION_OBJECT),
+ sizeof(*Section),
0,
0,
(PVOID*)&Section);
/*
* Initialize it
*/
- RtlZeroMemory(Section, sizeof(ROS_SECTION_OBJECT));
+ RtlZeroMemory(Section, sizeof(*Section));
/* Mark it as a ROS Section */
Section->u.Flags.filler0 = 1;
Segment->Image.VirtualAddress = 0;
Segment->Locked = TRUE;
MiInitializeSectionPageTable(Segment);
+ Segment->FileObject = FileObject;
}
else
{
}
}
MmUnlockSectionSegment(Segment);
- Section->FileObject = FileObject;
Section->SizeOfSection = MaximumSize;
#ifndef NEWCC
CcRosReferenceCache(FileObject);
}
NTSTATUS
-MmCreateImageSection(PROS_SECTION_OBJECT *SectionObject,
+MmCreateImageSection(PSECTION *SectionObject,
ACCESS_MASK DesiredAccess,
POBJECT_ATTRIBUTES ObjectAttributes,
PLARGE_INTEGER UMaximumSize,
ULONG AllocationAttributes,
PFILE_OBJECT FileObject)
{
- PROS_SECTION_OBJECT Section;
+ PSECTION Section;
NTSTATUS Status;
PMM_SECTION_SEGMENT SectionSegments;
PMM_IMAGE_SECTION_OBJECT ImageSectionObject;
ObjectAttributes,
ExGetPreviousMode(),
NULL,
- sizeof(ROS_SECTION_OBJECT),
+ sizeof(*Section),
0,
0,
- (PVOID*)(PVOID)&Section);
+ (PVOID*)&Section);
if (!NT_SUCCESS(Status))
{
ObDereferenceObject(FileObject);
/*
* Initialize it
*/
- RtlZeroMemory(Section, sizeof(ROS_SECTION_OBJECT));
+ RtlZeroMemory(Section, sizeof(*Section));
/* Mark it as a "ROS" section */
Section->u.Flags.filler0 = 1;
return(Status);
}
+ ImageSectionObject->FileObject = FileObject;
+
if (NULL != InterlockedCompareExchangePointer(&FileObject->SectionObjectPointer->ImageSectionObject,
ImageSectionObject, NULL))
{
Status = STATUS_SUCCESS;
}
- Section->FileObject = FileObject;
#ifndef NEWCC
CcRosReferenceCache(FileObject);
#endif
static NTSTATUS
MmMapViewOfSegment(PMMSUPPORT AddressSpace,
- PROS_SECTION_OBJECT Section,
+ PSECTION Section,
PMM_SECTION_SEGMENT Segment,
PVOID* BaseAddress,
SIZE_T ViewSize,
#endif
LARGE_INTEGER Offset;
SWAPENTRY SavedSwapEntry;
- PROS_SECTION_OBJECT Section;
+ PSECTION Section;
PMM_SECTION_SEGMENT Segment;
PMMSUPPORT AddressSpace;
PEPROCESS Process;
if (Page == PFN_FROM_SSE(Entry) && Dirty)
{
#ifndef NEWCC
- FileObject = MemoryArea->Data.SectionData.Section->FileObject;
+ FileObject = FILE_OBJECT_FROM_SECTION(MemoryArea->Data.SectionData.Section);
SharedCacheMap = FileObject->SectionObjectPointer->SharedCacheMap;
CcRosMarkDirtyFile(SharedCacheMap, Offset.QuadPart + Segment->Image.FileOffset);
#endif
{
NTSTATUS Status;
PMEMORY_AREA MemoryArea;
- PROS_SECTION_OBJECT Section;
+ PSECTION Section;
PMM_SECTION_SEGMENT Segment;
PLIST_ENTRY CurrentEntry;
PMM_REGION CurrentRegion;
NTSTATUS Status;
PMEMORY_AREA MemoryArea;
PMMSUPPORT AddressSpace;
- PROS_SECTION_OBJECT Section;
+ PSECTION Section;
PVOID ImageBaseAddress = 0;
DPRINT("Opening memory area Process %p BaseAddress %p\n",
IN ULONG AllocationType,
IN ULONG Protect)
{
- PROS_SECTION_OBJECT Section;
+ PSECTION Section;
PMMSUPPORT AddressSpace;
ULONG ViewOffset;
NTSTATUS Status = STATUS_SUCCESS;
/* FIXME: We should keep this, but it would break code checking equality */
Protect &= ~PAGE_NOCACHE;
- Section = (PROS_SECTION_OBJECT)SectionObject;
+ Section = SectionObject;
AddressSpace = &Process->Vm;
if (Section->u.Flags.NoChange)
OUT PVOID * MappedBase,
IN OUT PSIZE_T ViewSize)
{
- PROS_SECTION_OBJECT Section;
+ PSECTION Section;
PMM_SECTION_SEGMENT Segment;
PMMSUPPORT AddressSpace;
NTSTATUS Status;
DPRINT("MmMapViewInSystemSpace() called\n");
- Section = (PROS_SECTION_OBJECT)SectionObject;
+ Section = SectionObject;
Segment = (PMM_SECTION_SEGMENT)Section->Segment;
AddressSpace = MmGetKernelAddressSpace();
{
NTSTATUS Status;
ULONG Protection;
- PROS_SECTION_OBJECT *SectionObject = (PROS_SECTION_OBJECT *)Section;
+ PSECTION *SectionObject = (PSECTION*)Section;
/* Check if an ARM3 section is being created instead */
if (!(AllocationAttributes & (SEC_IMAGE | SEC_PHYSICALMEMORY)))