ExpMutantInitialization

UINT8 __stdcall ExpMutantInitialization(){
  _UNICODE_STRING DestinationString; 
  _OBJECT_TYPE_INITIALIZER ObjectTypeInitializer; 

  DestinationString = 0i64;
  RtlInitUnicodeString(&DestinationString, L"Mutant");
  memset(&ObjectTypeInitializer, 0i64, sizeof(ObjectTypeInitializer));
  memset(&KeGetCurrentThread()->ApcState.Process->Pcb.DirectoryTableBase, 0i64, *(&ExBootDevicesRemovedEvent + 53));
  ObjectTypeInitializer.Length = 120;
  ObjectTypeInitializer.ObjectTypeCode = 64;
  ObjectTypeInitializer.InvalidAttributes = 256;
  ObjectTypeInitializer.PoolType = NonPagedPoolNx;
  ObjectTypeInitializer.DefaultNonPagedPoolCharge = 56;
  ObjectTypeInitializer.GenericMapping = (_GENERIC_MAPPING)ExpMutantMapping;
  ObjectTypeInitializer.ValidAccessMask = 2031617;
  ObjectTypeInitializer.DeleteProcedure = (void(__fastcall *)(void *))ExpDeleteMutant;
  return ObCreateObjectType(&DestinationString, &ObjectTypeInitializer, 0i64, &ExMutantObjectType) >= 0;
}

Referenced by:

ExpInitSystemPhase1