MiInitializeSessionIds

VOID __stdcall MiInitializeSessionIds(){
  _QWORD *Pool; 
  NTSTATUS v1; 
  _UNICODE_STRING TypeName; 
  _OBJECT_TYPE_INITIALIZER ObjectTypeInitializer; 

  stru_140C4DAF8._bf_0 = 0i64;
  TypeName.Buffer = L"Session";
  *(_QWORD *)&TypeName.Length = 1048590i64;
  Pool = MiAllocatePool(256i64, 0x20ui64, 0x20206D4Dui64);
  *(&stru_140C4DB30 + 548) = Pool;
  if( !Pool || (*(_DWORD *)Pool = 128, Pool[1] = Pool + 2, !*(&stru_140C4DB30 + 548)) )
    KeBugCheckEx(0x7Du, *(&stru_140C50B28 + 853), *(&stru_140C50B28 + 851), *(&stru_140C50B28 + 852), (PVOID)0x200);
  memset(
    *(VOID **)(*(&stru_140C4DB30 + 548) + 8i64),
    0i64,
    4 * ((**(&stru_140C4DB30 + 548) >> 5) + ((**(&stru_140C4DB30 + 548) & 0x1F) != 0)));
  Tree.Root = 0i64;
  stru_140C4DB30 = 0;
  *(&stru_140C4DB30 + 1) = 0;
  *(&stru_140C4DB30 + 2) = (char *)&stru_140C4DB30 + 8;
  *(&stru_140C4DB30 + 1) = (char *)&stru_140C4DB30 + 8;
  *(&stru_140C4DB30 + 2) = 6;
  memset(&ObjectTypeInitializer, 0i64, sizeof(ObjectTypeInitializer));
  ObjectTypeInitializer.InvalidAttributes = 0;
  ObjectTypeInitializer._bf_0 |= 0xCu;
  ObjectTypeInitializer.Length = 120;
  ObjectTypeInitializer.PoolType = NonPagedPoolNx;
  ObjectTypeInitializer.DefaultNonPagedPoolCharge = 40;
  ObjectTypeInitializer.GenericMapping = (_GENERIC_MAPPING)MiSessionMapping;
  ObjectTypeInitializer.ValidAccessMask = 983043;
  ObjectTypeInitializer.DeleteProcedure = (void(__fastcall *)(void *))MiSessionObjectDelete;
  v1 = ObCreateObjectType(&TypeName, &ObjectTypeInitializer, 0i64, &MmSessionObjectType);
  if( v1 < 0 )
    KeBugCheckEx(0x1Au, (PVOID)0x1237, (PVOID)v1, &ObjectTypeInitializer, 0i64);
}

Referenced by:

MiInitSystem