TtmpDispatchCreateEventQueue

__int64 __fastcall TtmpDispatchCreateEventQueue(__int64 a1, PVOID *a2){
  VOID *v2; 
  _ADAPTER_OBJECT *v4; 
  int inserted; 
  __int64 v6; 
  UINT64 v7; 
  unsigned int v8; 
  UINT64 v9; 
  int v10; 
  PVOID NewObject; 
  _TTMI_SESSION *LockedSession; 
  PVOID Object; 
  PVOID Handle; 

  v2 = *(VOID **)(a1 + 8);
  LockedSession = 0i64;
  NewObject = 0i64;
  v4 = 0i64;
  Handle = 0i64;
  Object = 0i64;
  inserted = TtmpAcquireSessionFromTerminalHandle(v2, 1u, 0, &LockedSession, (_TTMI_TERMINAL **)&NewObject);
  v8 = inserted;
  if( inserted < 0 )
  {
    v9 = 307i64;
LABEL_3:
    TtmiLogError((INT8 *)"TtmpDispatchCreateEventQueue", v9, (unsigned int)inserted, (unsigned int)inserted);
    goto LABEL_11;
  }
  v10 = TtmiCreateEventQueue((__int64)LockedSession, &Object, v6, v7);
  v8 = v10;
  if( v10 >= 0 )
  {
    v4 = (_ADAPTER_OBJECT *)Object;
    inserted = TtmiWriteEnumerationEventsToQueue((__int64)LockedSession, (__int64)Object);
    v8 = inserted;
    if( inserted < 0 )
    {
      v9 = 323i64;
      goto LABEL_3;
    }
    inserted = ObInsertObject(v4, 0i64, 2031616, 0i64, 0i64, &Handle);
    v4 = 0i64;
    v8 = inserted;
    if( inserted < 0 )
    {
      v9 = 342i64;
      goto LABEL_3;
    }
    v8 = 0;
    *a2 = Handle;
  }
  else
  {
    TtmiLogError((INT8 *)"TtmpDispatchCreateEventQueue", 0x139ui64, (unsigned int)v10, (unsigned int)v10);
    v4 = (_ADAPTER_OBJECT *)Object;
  }
LABEL_11:
  if( LockedSession )
  {
    ExReleaseResourceLite(&TtmpSessionLock);
    KeLeaveCriticalRegion();
  }
  if( NewObject )
    HalPutDmaAdapter((PADAPTER_OBJECT)NewObject);
  if( v4 )
    HalPutDmaAdapter(v4);
  return v8;
}

Referenced by:

TtmDispatchApi