TtmpStartCallout

VOID __stdcall TtmpStartCallout(
        _TTMP_CALLOUT_CONTEXT *Context,
        _TTMI_SESSION *LockedSession,
        _TTMI_DEVICE_ENTRY *Device,
        UINT64 CalloutTag,
        UINT64 Data){
  unsigned int v5; 
  _DWORD *v9; 
  unsigned int v10; 
  unsigned int v11; 
  unsigned int CalloutTagFromCalloutType; 
  unsigned int v13; 

  v5 = CalloutTag;
  if( !TtmpDeviceCalloutTimeoutsSet )
    TtmpDeviceCalloutTimeoutsSet = TtmpInitializeWatchdogTimeouts((INT64)Context);
  *(_QWORD *)Context = LockedSession;
  v9 = &TtmpDeviceWatchdogTimeouts;
  *((_QWORD *)Context + 1) = Device;
  v10 = 0;
  Context[4] = v5;
  while( *v9 != v5 )
  {
    ++v10;
    v9 += 6;
    if( v10 >= 6 )
    {
      v11 = 30000;
      goto LABEL_8;
    }
  }
  v11 = v9[4];
LABEL_8:
  if( v11 && TtmpCalloutCreateWatchdog((__int64)Context) >= 0 && *((_QWORD *)Context + 3) )
    TtmpCalloutArmWatchdog((INT64)Context, (unsigned int)*LockedSession, v11, Data);
  ExReleaseResourceLite(&TtmpSessionLock);
  KeLeaveCriticalRegion();
  CalloutTagFromCalloutType = TtmpGetCalloutTagFromCalloutType(v5);
  TtmiLogCalloutStart((_TERMINAL_DEVICE_PROVIDER)Device[4], *((_QWORD *)Device + 3), CalloutTagFromCalloutType, v13);
  *((_QWORD *)Context + 4) = *(_QWORD *)&KUSER_SHARED_DATA.InterruptTime.LowPart;
}

Referenced by:

TtmiSessionDeviceListWorker
TtmpCallAssignedToTerminal
TtmpCallSetBuiltinPanelState
TtmpCallSetDisplayState
TtmpCallSetInputMode
TtmpUpdatePrimaryDisplayWnf