ExEnumerateSystemFirmwareTables

NTSTATUS __stdcall ExEnumerateSystemFirmwareTables(
        UINT64 FirmwareTableProviderSignature,
        VOID *FirmwareTableBuffer,
        UINT64 BufferLength,
        UINT64 *ReturnLength){
  int v5; 
  int v7; 
  unsigned int v9; 
  VOID **PoolWithTag; 
  VOID **v11; 
  int SystemFirmwareTableInformation; 
  UINT64 ReturnedLength; 

  LODWORD(ReturnedLength) = 0;
  v5 = BufferLength;
  v7 = FirmwareTableProviderSignature;
  if( !FirmwareTableBuffer && (_DWORD)BufferLength )
    return -1073741811;
  v9 = BufferLength + 16;
  PoolWithTag = ExAllocatePoolWithTag(1ui64, (unsigned int)(BufferLength + 16), 1413894721i64);
  v11 = PoolWithTag;
  if( !PoolWithTag )
    return -1073741670;
  *((_DWORD *)PoolWithTag + 1) = 0;
  *((_DWORD *)PoolWithTag + 2) = 0;
  *((_DWORD *)PoolWithTag + 3) = v5;
  *(_DWORD *)PoolWithTag = v7;
  SystemFirmwareTableInformation = ExpGetSystemFirmwareTableInformation(PoolWithTag, 0, v9, &ReturnedLength);
  if( ((int)(SystemFirmwareTableInformation + 0x80000000) < 0 || SystemFirmwareTableInformation == -1073741789)
    && ReturnLength )
  {
    *(_DWORD *)ReturnLength = *((_DWORD *)v11 + 3);
  }
  if( SystemFirmwareTableInformation >= 0 )
  {
    if( FirmwareTableBuffer )
      memmove(FirmwareTableBuffer, v11 + 2, ReturnedLength - 16);
  }
  ExFreePoolWithTag(v11, 0x54465241u);
  return SystemFirmwareTableInformation;
}

Referenced by:

No references.