WmipGetSMBiosTableData
__int64 __fastcall WmipGetSMBiosTableData(void *a1, int *a2, _DWORD *a3){
int *v4;
_ETHREAD *CurrentThread;
int v7;
UINT8 *v9;
UINT8 *v10;
unsigned int v11;
v4 = a2;
if( !a2 )
return 3221225485i64;
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
--*((_WORD *)CurrentThread + 242);
LOBYTE(a2) = 1;
ExAcquireResourceSharedLite(&WmipSMBiosLock, (BOOL)a2);
if( a3 )
*a3 = WmipSMBiosVersionInfo;
if( *v4 >= (unsigned int)WmipSMBiosTableLength )
{
if( WmipSMBiosTablePhysicalAddress.QuadPart )
{
MmMapIoSpaceEx(WmipSMBiosTablePhysicalAddress, (unsigned int)WmipSMBiosTableLength, 4ui64);
v10 = v9;
if( v9 )
{
v11 = WmipSMBiosTableLength;
memmove((UINT8 *)a1, v9, (unsigned int)WmipSMBiosTableLength);
MmUnmapIoSpace(v10, v11);
v7 = 0;
}
else
{
v7 = -1073741670;
}
}
else
{
v7 = -1073741808;
}
}
else
{
v7 = -1073741789;
}
*v4 = WmipSMBiosTableLength;
if( WmipGetRegistryHideMachine() )
{
if( v7 >= 0 )
WmipSMBiosHideMachine(a1, (unsigned int)*v4);
}
ExReleaseResourceLite(&WmipSMBiosLock);
KeLeaveCriticalRegionThread((__int64)KeGetCurrentThread());
return(unsigned int)v7;
}Referenced by:
WmipQueryWmiDataBlock
WmipRawSMBiosTableHandler