WmipGetSMBiosTableData
NTSTATUS __stdcall WmipGetSMBiosTableData(VOID *Buffer, UINT64 *BufferSize, SMBIOSVERSIONINFO *SMBiosVersionInfo){
_ETHREAD *CurrentThread;
NTSTATUS v7;
VOID *v9;
VOID *v10;
unsigned int v11;
if( !BufferSize )
return -1073741811;
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
--CurrentThread->Tcb.KernelApcDisable;
ExAcquireResourceSharedLite((UINT64)&ExBootDevicesRemovedEvent + 3328, 1);
if( SMBiosVersionInfo )
*SMBiosVersionInfo = (SMBIOSVERSIONINFO)WmipSMBiosVersionInfo;
if( *(_DWORD *)BufferSize >= (unsigned int)WmipSMBiosTableLength )
{
if( WmipSMBiosTablePhysicalAddress.QuadPart )
{
v9 = MmMapIoSpaceEx(WmipSMBiosTablePhysicalAddress, (unsigned int)WmipSMBiosTableLength, 4ui64);
v10 = v9;
if( v9 )
{
v11 = WmipSMBiosTableLength;
memmove(Buffer, v9, WmipSMBiosTableLength);
MmUnmapIoSpace(v10, v11);
v7 = 0;
}
else
{
v7 = -1073741670;
}
}
else
{
v7 = -1073741808;
}
}
else
{
v7 = -1073741789;
}
*(_DWORD *)BufferSize = WmipSMBiosTableLength;
if( WmipGetRegistryHideMachine() )
{
if( v7 >= 0 )
WmipSMBiosHideMachine(Buffer, *(unsigned int *)BufferSize);
}
ExReleaseResourceLite((PERESOURCE)&ExBootDevicesRemovedEvent + 32);
KeLeaveCriticalRegionThread(KeGetCurrentThread());
return v7;
}Referenced by:
WmipQueryWmiDataBlock
WmipRawSMBiosTableHandler