TtmInit

VOID __stdcall TtmInit(){
  __int64 v0; 
  const wchar_t *v1; 
  __int64 v2; 
  NTSTATUS v3; 
  __int64 v4; 
  const wchar_t *v5; 
  __int64 v6; 
  NTSTATUS v7; 
  _UNICODE_STRING TypeName; 
  _OBJECT_TYPE_INITIALIZER ObjectTypeInitializer; 

  if( TtmpEnabled == 1 )
  {
    memset(&ObjectTypeInitializer, 0i64, sizeof(ObjectTypeInitializer));
    ObjectTypeInitializer.Length = 120;
    ObjectTypeInitializer.InvalidAttributes = 400;
    ObjectTypeInitializer._bf_0 = ObjectTypeInitializer._bf_0 & 0xF1 | 2;
    v0 = 0x7FFFi64;
    ObjectTypeInitializer.ValidAccessMask = 2031619;
    ObjectTypeInitializer.OpenProcedure = (int(__fastcall *)(_OB_OPEN_REASON, char, _EPROCESS *, void *, unsigned int *, unsigned int))TtmpOpenQueueHandle;
    ObjectTypeInitializer.PoolType = NonPagedPoolNx;
    ObjectTypeInitializer.CloseProcedure = (void(__fastcall *)(_EPROCESS *, void *, unsigned __int64, unsigned __int64))TtmpCloseQueueHandle;
    ObjectTypeInitializer.GenericMapping = (_GENERIC_MAPPING)TtmpQueueMapping;
    ObjectTypeInitializer.DeleteProcedure = (void(__fastcall *)(void *))TtmpDeleteQueue;
    v1 = L"TerminalEventQueue";
    ObjectTypeInitializer.DefaultNonPagedPoolCharge = 176;
    TypeName = 0i64;
    do
    {
      if( !*v1 )
        break;
      ++v1;
      --v0;
    }
    while( v0 );
    v2 = (0x7FFF - v0) & ((unsigned __int128)-(__int128)(unsigned __int64)v0 >> 64);
    if( v0 )
    {
      TypeName.Buffer = L"TerminalEventQueue";
      TypeName.Length = 2 * v2;
      TypeName.MaximumLength = 2 * v2 + 2;
    }
    v3 = ObCreateObjectTypeEx(&TypeName, &ObjectTypeInitializer, 0i64, 128i64, &TtmpQueueObjectType);
    if( v3 < 0 )
      KeBugCheckEx(0x19Bu, (PVOID)2, (PVOID)v3, 0i64, 0i64);
  }
  else
  {
    TtmpQueueObjectType = 0i64;
  }
  ExInitializeResourceLite((INT64)&TtmpSessionLock);
  TtmpSession = 0i64;
  if( TtmpEnabled == 1 )
  {
    if( !TtmpProximityEscapeMsec )
      TtmpProximityEscapeMsec = 3000;
    memset(&ObjectTypeInitializer, 0i64, sizeof(ObjectTypeInitializer));
    ObjectTypeInitializer.Length = 120;
    ObjectTypeInitializer.InvalidAttributes = 400;
    ObjectTypeInitializer._bf_0 = ObjectTypeInitializer._bf_0 & 0xF1 | 6;
    v4 = 0x7FFFi64;
    ObjectTypeInitializer.ValidAccessMask = 2031619;
    ObjectTypeInitializer.OpenProcedure = (int(__fastcall *)(_OB_OPEN_REASON, char, _EPROCESS *, void *, unsigned int *, unsigned int))TtmpOpenTerminalHandle;
    ObjectTypeInitializer.CloseProcedure = (void(__fastcall *)(_EPROCESS *, void *, unsigned __int64, unsigned __int64))TtmpCloseTerminalHandle;
    ObjectTypeInitializer.GenericMapping = (_GENERIC_MAPPING)TtmpTerminalMapping;
    ObjectTypeInitializer.DeleteProcedure = (void(__fastcall *)(void *))TtmpDeleteTerminal;
    v5 = L"Terminal";
    ObjectTypeInitializer.PoolType = NonPagedPoolNx;
    ObjectTypeInitializer.DefaultNonPagedPoolCharge = 288;
    TypeName = 0i64;
    do
    {
      if( !*v5 )
        break;
      ++v5;
      --v4;
    }
    while( v4 );
    v6 = (0x7FFF - v4) & -(__int64)(v4 != 0);
    if( v4 )
    {
      TypeName.Buffer = L"Terminal";
      TypeName.Length = 2 * v6;
      TypeName.MaximumLength = 2 * v6 + 2;
    }
    v7 = ObCreateObjectTypeEx(&TypeName, &ObjectTypeInitializer, 0i64, 0i64, &TtmpTerminalObjectType);
    if( v7 < 0 )
      KeBugCheckEx(0x19Bu, (PVOID)1, (PVOID)v7, 0i64, 0i64);
  }
  else
  {
    TtmpTerminalObjectType = 0i64;
  }
  TraceLoggingRegisterEx_EtwRegister_EtwSetInformation(&dword_140D2C8E8);
  TraceLoggingRegisterEx_EtwRegister_EtwSetInformation(&dword_140D2C8B0);
}

Referenced by:

PoInitSystem