WmipFirmwareTableHandler
NTSTATUS __stdcall WmipFirmwareTableHandler(_SYSTEM_FIRMWARE_TABLE_INFORMATION *TableInfo){
unsigned int v1;
ULONG v3;
SYSTEM_FIRMWARE_TABLE_ACTION Action;
ULONG TableID;
unsigned int v6;
unsigned int v7;
unsigned int v8;
ULONG TableBufferLength;
size_t v10;
VOID *v11;
VOID *v12;
ULONG v14;
UCHAR *TableBuffer;
__int64 v16;
__int64 v17;
v1 = 0;
v3 = 0;
if( !TableInfo )
return -1073741585;
Action = TableInfo->Action;
if( Action )
{
if( Action == SystemFirmwareTable_Get )
{
TableID = TableInfo->TableID;
v6 = 2;
v7 = 0;
v8 = 0;
while( LODWORD(WmipFirmwareTableArray[v7]) != TableID )
{
++v8;
++v7;
if( v8 >= 2 )
goto LABEL_8;
}
v3 = HIDWORD(WmipFirmwareTableArray[v7]);
TableBufferLength = TableInfo->TableBufferLength;
TableInfo->TableBufferLength = v3;
if( TableBufferLength < v3 )
return -1073741789;
v6 = v7 * 2;
LABEL_8:
if( v8 != 2 )
{
v10 = v3;
v11 = MmMapIoSpaceEx((_LARGE_INTEGER)*((unsigned int *)WmipFirmwareTableArray + v6), v3, 0x204ui64);
v12 = v11;
if( v11 )
{
memmove(TableInfo->TableBuffer, v11, v10);
MmUnmapIoSpace(v12, v10);
return 0;
}
return -1073741275;
}
}
return -1073741585;
}
v14 = TableInfo->TableBufferLength;
TableInfo->TableBufferLength = 8;
if( v14 >= 8 )
{
TableBuffer = TableInfo->TableBuffer;
v16 = 2i64;
do
{
v17 = v1;
v1 += 2;
*(_DWORD *)TableBuffer = *((_DWORD *)WmipFirmwareTableArray + v17);
TableBuffer += 4;
--v16;
}
while( v16 );
return 0;
}
return -1073741789;
}Referenced by:
No references.