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.