RtlFileMapMapView
NTSTATUS __stdcall RtlFileMapMapView(_RTL_FILE_MAP *FileMap, UINT8 MapAsImage){
int Section;
VOID *v5;
INT64 FileInformationClass;
INT64 AllocationAttributes;
VOID *FileHandle;
UINT64 AllocationType;
UINT64 Win32Protect;
VOID *SectionHandle;
VOID *BaseAddress;
UINT64 ViewSize;
_OBJECT_ATTRIBUTES ObjectAttributes;
_IO_STATUS_BLOCK IoStatusBlock;
__int128 FileInformation;
__int64 v18;
SectionHandle = 0i64;
BaseAddress = 0i64;
ViewSize = 0i64;
memset(&ObjectAttributes, 0, sizeof(ObjectAttributes));
v18 = 0i64;
IoStatusBlock = 0i64;
FileInformation = 0i64;
if( *((_QWORD *)FileMap + 3) )
return -1073741554;
Section = ZwQueryInformationFile(
*(VOID **)FileMap,
&IoStatusBlock,
&FileInformation,
0x18ui64,
FileStandardInformation);
if( Section >= 0 )
{
ObjectAttributes.RootDirectory = 0i64;
ObjectAttributes.ObjectName = 0i64;
ObjectAttributes.Length = 48;
FileHandle = *(VOID **)FileMap;
ObjectAttributes.Attributes = 512;
LODWORD(AllocationAttributes) = MapAsImage != 0 ? 285212672 : 0x8000000;
LODWORD(FileInformationClass) = 2;
*(_OWORD *)&ObjectAttributes.SecurityDescriptor = 0i64;
Section = ZwCreateSection(
(UINT64)&SectionHandle,
0xF0005ui64,
(INT64)&ObjectAttributes,
0i64,
FileInformationClass,
AllocationAttributes,
(UINT64)FileHandle);
if( Section >= 0 )
{
LODWORD(Win32Protect) = 2;
LODWORD(AllocationType) = 5242880;
Section = ZwMapViewOfSection(
SectionHandle,
(VOID *)0xFFFFFFFFFFFFFFFFi64,
&BaseAddress,
0i64,
0i64,
0i64,
&ViewSize,
ViewUnmap,
AllocationType,
Win32Protect);
if( Section >= 0 )
{
v5 = MmSecureVirtualMemory(BaseAddress, ViewSize, 2ui64);
if( v5 )
{
Section = 0;
*((_QWORD *)FileMap + 1) = SectionHandle;
*((_QWORD *)FileMap + 3) = BaseAddress;
*((_QWORD *)FileMap + 4) = ViewSize;
*((_QWORD *)FileMap + 2) = *((_QWORD *)&FileInformation + 1);
*(_WORD *)((char *)FileMap + 49) = 257;
*((_BYTE *)FileMap + 51) = MapAsImage;
*((_QWORD *)FileMap + 5) = v5;
return Section;
}
Section = -1073741823;
}
}
}
if( SectionHandle )
ZwClose((_HANDLE)SectionHandle);
if( BaseAddress )
ZwUnmapViewOfSection((VOID *)0xFFFFFFFFFFFFFFFFi64, BaseAddress);
return Section;
}Referenced by:
AslFileMappingEnsure
AslFileMappingEnsureMappedAs
AslpFileGetChecksumAttributes
AslpFileGetVersionBlock