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.