KdpSysReadControlSpace
NTSTATUS __stdcall KdpSysReadControlSpace(
UINT64 Processor,
UINT64 Address,
PVOID Buffer,
UINT64 Request,
UINT64 *Actual){
UINT64 *ActualSize;
unsigned int v6;
__int64 v8;
__int64 v10;
int v11;
int v12;
UINT64 **p_Buffera;
UINT64 v14;
UINT64 Flags;
__int64 Buffera;
ActualSize = Actual;
v6 = Request;
Buffera = 0i64;
v8 = (unsigned int)Processor;
*(_DWORD *)Actual = 0;
if( (unsigned int)Processor >= (unsigned int)KeQueryActiveProcessorCountEx(0xFFFFu) )
return -1073741823;
v10 = (__int64)*(&KiProcessorBlock + v8);
if( !v10 )
return -1073741823;
Actual = (UINT64 *)*(&KiProcessorBlock + v8);
if( Address > 3 )
return -1073741823;
if( !(_DWORD)Address )
{
p_Buffera = (UINT64 **)&Buffera;
Buffera = v10 - 384;
goto LABEL_12;
}
v11 = Address - 1;
if( !v11 )
{
p_Buffera = &Actual;
goto LABEL_12;
}
v12 = v11 - 1;
if( v12 )
{
if( v12 == 1 )
{
p_Buffera = (UINT64 **)(v10 + 8);
LABEL_12:
v14 = 8i64;
goto LABEL_13;
}
return -1073741823;
}
p_Buffera = (UINT64 **)(v10 + 256);
v14 = 240i64;
LABEL_13:
LODWORD(Flags) = 5;
if( (unsigned int)v14 > v6 )
v14 = v6;
return KdpCopyMemoryChunks((UINT64)Buffer, p_Buffera, v14, 0i64, Flags, ActualSize);
}Referenced by:
KdSystemDebugControl
KdpReadControlSpace