MiSectionInitialization

NTSTATUS __stdcall MiSectionInitialization(){
  _QWORD *Pool; 
  _QWORD *v1; 
  UINT64 ObjectBodySize; 
  UINT64 PagedPoolCharge; 
  UINT64 v5; 
  _UNICODE_STRING TypeName; 
  __int64 v7[2]; 
  _OBJECT_ATTRIBUTES ObjectAttributes; 
  _OBJECT_TYPE_INITIALIZER ObjectTypeInitializer; 
  PVOID Object; 
  PVOID Handle; 

  *(&ObjectAttributes.Length + 1) = 0;
  *(&ObjectAttributes.Attributes + 1) = 0;
  Object = 0i64;
  Handle = 0i64;
  *(&stru_140C4DB30 + 984) = -1;
  stru_140C4C6C8.Root = 0i64;
  TypeName.Buffer = L"Section";
  v7[1] = (__int64)L"\\Device\\PhysicalMemory";
  *(_QWORD *)&TypeName.Length = 1048590i64;
  v7[0] = 3014700i64;
  memset(&ObjectTypeInitializer, 0i64, sizeof(ObjectTypeInitializer));
  ObjectTypeInitializer._bf_0 |= 4u;
  ObjectTypeInitializer.OpenProcedure = (int(__fastcall *)(_OB_OPEN_REASON, char, _EPROCESS *, void *, unsigned int *, unsigned int))MiSectionOpen;
  ObjectTypeInitializer.Length = 120;
  ObjectTypeInitializer.CloseProcedure = (void(__fastcall *)(_EPROCESS *, void *, unsigned __int64, unsigned __int64))MiSectionClose;
  ObjectTypeInitializer.PoolType = PagedPool;
  ObjectTypeInitializer.DeleteProcedure = (void(__fastcall *)(void *))MiSectionDelete;
  ObjectTypeInitializer.InvalidAttributes = 256;
  ObjectTypeInitializer.DefaultPagedPoolCharge = 64;
  ObjectTypeInitializer.ValidAccessMask = 983071;
  ObjectTypeInitializer.GenericMapping = (_GENERIC_MAPPING)MiSectionMapping;
  ObjectTypeInitializer.ObjectTypeCode = 128;
  if( ObCreateObjectType(&TypeName, &ObjectTypeInitializer, 0i64, &MmSectionObjectType) >= 0 )
  {
    Pool = MiAllocatePool(256i64, 0x48ui64, 0x67536D4Dui64);
    if( Pool )
    {
      memset(&qword_140C4C6F0, 0i64, 0x110u);
      Pool[5] = 0i64;
      dword_140C4C7B8 |= 0x400u;
      ObjectAttributes.RootDirectory = 0i64;
      ObjectAttributes.ObjectName = (_UNICODE_STRING *)v7;
      qword_140C4C6F0 = (__int64)&qword_140C4C780;
      LODWORD(v5) = 0;
      qword_140C4C780 = (__int64)Pool;
      qword_140C4C798 = 1i64;
      LODWORD(PagedPoolCharge) = 64;
      *Pool = &qword_140C4C780;
      LODWORD(ObjectBodySize) = 64;
      ObjectAttributes.Length = 48;
      ObjectAttributes.Attributes = 65552;
      *(_OWORD *)&ObjectAttributes.SecurityDescriptor = 0i64;
      if( ObCreateObject(
             0,
             MmSectionObjectType,
             &ObjectAttributes,
             0,
             0i64,
             ObjectBodySize,
             PagedPoolCharge,
             v5,
             &Object) < 0 )
      {
        ExFreePoolWithTag(Pool, 0);
      }
      else
      {
        v1 = Object;
        *((_QWORD *)Object + 5) = &qword_140C4C780;
        v1[6] = 0xFFFFFFFFFFFFi64;
        *((_DWORD *)v1 + 14) = 0;
        *((_DWORD *)v1 + 15) = *((_DWORD *)v1 + 15) & 0xFFFFF000 | 0x40;
        if( ObInsertObject(v1, 0i64, 4, 0i64, 0i64, &Handle) >= 0 )
        {
          ObCloseHandle(Handle, 0);
          return 1;
        }
      }
    }
  }
  return 0;
}

Referenced by:

MiInitSystem