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