ExpQueryChannelInformation
INT64 __stdcall ExpQueryChannelInformation(VOID *Buffer, UINT64 BufferSize, UINT64 *ReturnSize){
UINT64 v4;
UINT16 ProcessPartitionId;
int ChannelInformation;
UINT64 v8;
_DWORD a2[9];
void *Src;
v4 = (unsigned int)BufferSize;
*(_QWORD *)&a2[1] = 0i64;
Src = 0i64;
if( (unsigned int)BufferSize < 4 )
{
ChannelInformation = -1073741306;
}
else
{
a2[0] = *(_DWORD *)Buffer;
ProcessPartitionId = MmGetProcessPartitionId(*((_QWORD *)KeGetCurrentThread() + 23));
ChannelInformation = MmGetChannelInformation(ProcessPartitionId, a2[0], (UINT8 **)&Src, (UINT64 *)&a2[1]);
if( ChannelInformation >= 0 )
{
v8 = *(_QWORD *)&a2[1];
*(_DWORD *)ReturnSize = a2[1];
if( v8 > 0xFFFFFFFF )
{
ChannelInformation = -1073741670;
}
else if( v4 < v8 )
{
ChannelInformation = -1073741789;
}
else
{
memmove((UINT8 *)Buffer, (UINT8 *)Src, v8);
ChannelInformation = 0;
}
}
}
if( Src )
ExFreePoolWithTag(Src, 0);
return(unsigned int)ChannelInformation;
}Referenced by:
ExpQuerySystemInformation