ExpWin32Initialization

UINT8 __stdcall ExpWin32Initialization(){
  NTSTATUS v0; 
  _UNICODE_STRING DestinationString; 
  _OBJECT_TYPE_INITIALIZER ObjectTypeInitializer; 

  DestinationString = 0i64;
  RtlInitUnicodeString(&DestinationString, L"WindowStation");
  memset(&ObjectTypeInitializer, 0i64, sizeof(ObjectTypeInitializer));
  ObjectTypeInitializer.Length = 120;
  ObjectTypeInitializer.CloseProcedure = (void(__fastcall *)(_EPROCESS *, void *, unsigned __int64, unsigned __int64))ExpWin32CloseProcedure;
  ObjectTypeInitializer.PoolType = NonPagedPoolNx;
  ObjectTypeInitializer.DeleteProcedure = (void(__fastcall *)(void *))ExpWin32DeleteProcedure;
  ObjectTypeInitializer.InvalidAttributes = 304;
  ObjectTypeInitializer.OkayToCloseProcedure = (unsigned __int8(__fastcall *)(_EPROCESS *, void *, void *, char))ExpWin32OkayToCloseProcedure;
  ObjectTypeInitializer.ValidAccessMask = 983040;
  ObjectTypeInitializer.ParseProcedure = (int(__fastcall *)(void *, void *, _ACCESS_STATE *, char, unsigned int, _UNICODE_STRING *, _UNICODE_STRING *, void *, _SECURITY_QUALITY_OF_SERVICE *, void **))ExpWin32ParseProcedure;
  ObjectTypeInitializer.OpenProcedure = (int(__fastcall *)(_OB_OPEN_REASON, char, _EPROCESS *, void *, unsigned int *, unsigned int))ExpWin32OpenProcedure;
  ObjectTypeInitializer._bf_0 = ObjectTypeInitializer._bf_0 & 0xA7 | 0x18;
  ObjectTypeInitializer.GenericMapping = (_GENERIC_MAPPING)ExpWindowStationMapping;
  if( ObCreateObjectType(&DestinationString, &ObjectTypeInitializer, 0i64, &ExWindowStationObjectType) < 0 )
    return 0;
  RtlInitUnicodeString(&DestinationString, L"Desktop");
  ObjectTypeInitializer._bf_0 |= 0x40u;
  ObjectTypeInitializer.ParseProcedure = 0i64;
  ObjectTypeInitializer.GenericMapping = (_GENERIC_MAPPING)ExpDesktopMapping;
  if( ObCreateObjectType(&DestinationString, &ObjectTypeInitializer, 0i64, (_OBJECT_TYPE **)&ExDesktopObjectType) < 0 )
    return 0;
  RtlInitUnicodeString(&DestinationString, L"Composition");
  ObjectTypeInitializer.ParseProcedure = 0i64;
  ObjectTypeInitializer.ObjectTypeCode = 1024;
  ObjectTypeInitializer._bf_0 = ObjectTypeInitializer._bf_0 & 0xBD | 2;
  ObjectTypeInitializer.GenericMapping = (_GENERIC_MAPPING)ExpCompositionMapping;
  v0 = ObCreateObjectType(&DestinationString, &ObjectTypeInitializer, 0i64, &ExCompositionObjectType);
  ObjectTypeInitializer.ObjectTypeCode = 0;
  if( v0 < 0 )
    return 0;
  RtlInitUnicodeString(&DestinationString, L"RawInputManager");
  ObjectTypeInitializer.ParseProcedure = 0i64;
  ObjectTypeInitializer._bf_0 = ObjectTypeInitializer._bf_0 & 0xBD | 2;
  ObjectTypeInitializer.GenericMapping = (_GENERIC_MAPPING)ExpRawInputManagerMapping;
  if( ObCreateObjectType(&DestinationString, &ObjectTypeInitializer, 0i64, &ExRawInputManagerObjectType) < 0 )
    return 0;
  RtlInitUnicodeString(&DestinationString, L"CoreMessaging");
  ObjectTypeInitializer.ParseProcedure = 0i64;
  ObjectTypeInitializer._bf_0 = ObjectTypeInitializer._bf_0 & 0xBD | 2;
  ObjectTypeInitializer.GenericMapping = (_GENERIC_MAPPING)ExpCoreMessagingMapping;
  if( ObCreateObjectType(&DestinationString, &ObjectTypeInitializer, 0i64, &ExCoreMessagingObjectType) < 0 )
    return 0;
  RtlInitUnicodeString(&DestinationString, L"ActivationObject");
  ObjectTypeInitializer.ParseProcedure = 0i64;
  ObjectTypeInitializer.PoolType = NonPagedPoolSessionNx|PagedPool;
  ObjectTypeInitializer._bf_0 = ObjectTypeInitializer._bf_0 & 0xB9 | 6;
  ObjectTypeInitializer.GenericMapping = (_GENERIC_MAPPING)ExpActivationObjectMapping;
  return ObCreateObjectType(&DestinationString, &ObjectTypeInitializer, 0i64, &ExActivationObjectType) >= 0;
}

Referenced by:

ExpInitSystemPhase1