TtmDispatchApi
VOID __stdcall TtmDispatchApi(INT64 *InternalLevel, VOID *InputBuffer, UINT64 InputBufferLength, VOID *OutputBuffer){
unsigned int v5;
int v7;
VOID **PoolWithTag;
int v9;
UINT64 v10;
unsigned int v11;
unsigned int v12;
int Terminal;
unsigned int v14;
VOID ***v15;
unsigned int *v16;
_BYTE *v17;
v5 = InputBufferLength;
v7 = (int)InternalLevel;
TtmiLogDispatchApiStart((POWER_INFORMATION_LEVEL_INTERNAL)InternalLevel);
PoolWithTag = 0i64;
*v15 = 0i64;
*v16 = 0;
*v17 = 0;
if( TtmpEnabled != 1 )
{
v9 = -1073741637;
v10 = 1062i64;
LABEL_3:
TtmiLogError((INT8 *)"TtmDispatchApi", v10, 0xFFFFFFFFi64, (unsigned int)v9);
goto LABEL_59;
}
if( v7 > 4101 )
{
if( v7 != 4102 && v7 != 4103 && v7 != 4104 && v7 != 4105 && v7 != 4106 )
goto LABEL_22;
goto LABEL_23;
}
switch( v7 )
{
case 4101:
LABEL_23:
v11 = 24;
goto LABEL_24;
case 4096:
v11 = 12;
LABEL_13:
v12 = 8;
goto LABEL_25;
case 4097:
v11 = 24;
v12 = 16;
goto LABEL_25;
}
if( v7 != 4098 )
{
if( v7 != 4099 )
{
if( v7 == 4100 )
{
v11 = 16;
v12 = 544;
goto LABEL_25;
}
LABEL_22:
v9 = -1073741811;
v10 = 1128i64;
goto LABEL_3;
}
v11 = 16;
goto LABEL_13;
}
v11 = 16;
LABEL_24:
v12 = 0;
LABEL_25:
if( v5 < v11 || !OutputBuffer && v12 || v14 < v12 )
{
v9 = -1073741789;
TtmiLogError((INT8 *)"TtmDispatchApi", 0x473ui64, 0xFFFFFFFFi64, 3221225507i64);
}
else
{
if( v12 )
{
PoolWithTag = ExAllocatePoolWithTag(1ui64, v12, 544040269i64);
if( !PoolWithTag )
{
v9 = -1073741801;
v10 = 1154i64;
goto LABEL_3;
}
}
if( v7 > 4101 )
{
switch( v7 )
{
case 4102:
Terminal = TtmpDispatchAssignDevice((_TTM_API_ASSIGN_DEVICE_INPUT *)InputBuffer);
break;
case 4103:
Terminal = TtmpDispatchSetDisplayState((_TTM_API_SET_DISPLAY_STATE_INPUT *)InputBuffer);
break;
case 4104:
Terminal = TtmpDispatchSetDisplayTimeouts((_TTM_API_SET_DISPLAY_TIMEOUTS_INPUT *)InputBuffer);
break;
case 4105:
Terminal = TtmpDispatchSetDisplayPowerRequest((INT64)InputBuffer);
break;
default:
Terminal = TtmpDispatchSetInputWakeCapability((INT64)InputBuffer);
break;
}
}
else
{
switch( v7 )
{
case 4101:
Terminal = TtmpDispatchSetDefaultDeviceAssignment((__int64)InputBuffer);
break;
case 4096:
Terminal = TtmpDispatchOpenTerminal((__int64)InputBuffer, PoolWithTag);
break;
case 4097:
Terminal = TtmpDispatchCreateTerminal((_TTM_API_CREATE_TERMINAL_INPUT *)InputBuffer, PoolWithTag);
break;
case 4098:
Terminal = TtmpDispatchEvacuateDevices((_TTM_API_EVACUATE_DEVICES_INPUT *)InputBuffer);
break;
case 4099:
Terminal = TtmpDispatchCreateEventQueue((__int64)InputBuffer, PoolWithTag);
break;
default:
TtmpDispatchGetTerminalEvent(
(_PNP_DEPENDENCY_NODE *)InputBuffer,
(_PNP_DEPENDENCY_NODE *)PoolWithTag,
(_PNP_BINDING_REQUEST *)0x1005);
break;
}
}
v9 = Terminal;
}
if( PoolWithTag )
{
if( v9 < 0 )
{
ExFreePoolWithTag(PoolWithTag, 0x206D654Du);
}
else
{
*v15 = PoolWithTag;
*v16 = v12;
*v17 = 1;
}
}
LABEL_59:
TtmiLogDispatchApiStop((POWER_INFORMATION_LEVEL_INTERNAL)v7, (unsigned int)v9);
}Referenced by:
NtPowerInformation