WmipGetSysIds
NTSTATUS __stdcall WmipGetSysIds(
_SYSID_UUID **SysIdUuid,
UINT64 *SysIdUuidCount,
_SYSID_1394 **SysId1394,
UINT64 *SysId1394Count){
_SYSID_UUID **v7;
NTSTATUS SMBiosStructure;
__int64 v9;
unsigned int v10;
VOID **v11;
VOID **v12;
NTSTATUS result;
_SYSID_1394 *v14;
char *v15;
VOID **PoolWithTag;
UINT64 SysIdUuidCounta;
NTSTATUS v18;
char SysIdBiosRevision[4];
UINT64 NumberEntries;
_LARGE_INTEGER SysidTablePhysicalAddress;
VOID *StructPtr;
VOID *MapPtr;
v7 = SysIdUuid;
SysidTablePhysicalAddress.QuadPart = 0i64;
LODWORD(NumberEntries) = 0;
KeWaitForSingleObject((UINT64)&ExBootDevicesRemovedEvent + 3072, 0, 0, 0, 0i64);
if( !*(&ExBootDevicesRemovedEvent + 3272) )
{
if( WmipFindSysIdTable(&SysidTablePhysicalAddress, (UINT8 *)SysIdBiosRevision, &NumberEntries) < 0 )
{
MapPtr = 0i64;
StructPtr = 0i64;
HIDWORD(NumberEntries) = 0;
SMBiosStructure = WmipFindSMBiosStructure(1u, &StructPtr, &MapPtr, (UINT64 *)((char *)&NumberEntries + 4));
v18 = SMBiosStructure;
if( SMBiosStructure >= 0 )
{
*(&ExBootDevicesRemovedEvent + 412) = 0i64;
*(&ExBootDevicesRemovedEvent + 826) = 0;
v15 = (char *)StructPtr;
if( *((_BYTE *)StructPtr + 1) <= 8u )
{
*(&ExBootDevicesRemovedEvent + 410) = 0i64;
*(&ExBootDevicesRemovedEvent + 822) = 0;
}
else
{
PoolWithTag = ExAllocatePoolWithTag(1ui64, 0x10ui64, 1936289111i64);
if( PoolWithTag )
{
*(_OWORD *)PoolWithTag = *(_OWORD *)(v15 + 8);
*(&ExBootDevicesRemovedEvent + 822) = 1;
*(&ExBootDevicesRemovedEvent + 410) = PoolWithTag;
v18 = 0;
}
else
{
ExFreePoolWithTag(0i64, 0);
v18 = -1073741823;
}
}
if( MapPtr )
MmUnmapIoSpace(MapPtr, HIDWORD(NumberEntries));
ExReleaseResourceLite((PERESOURCE)&ExBootDevicesRemovedEvent + 32);
KeLeaveCriticalRegionThread(KeGetCurrentThread());
SMBiosStructure = v18;
}
}
else
{
SysIdUuidCounta = 0i64;
SMBiosStructure = WmipParseSysIdTable(
SysidTablePhysicalAddress,
(unsigned int)NumberEntries,
0i64,
&SysIdUuidCounta,
0i64,
(UINT64 *)((char *)&SysIdUuidCounta + 4));
if( SMBiosStructure >= 0 )
{
v9 = (unsigned int)(16 * SysIdUuidCounta);
v10 = v9 + 8 * HIDWORD(SysIdUuidCounta);
if( v10 )
{
v11 = ExAllocatePoolWithTag(1ui64, v10, 1936289111i64);
v12 = v11;
if( !v11 )
{
KeReleaseMutex((_KMUTANT *)((char *)&ExBootDevicesRemovedEvent + 3072), 0);
return -1073741670;
}
v14 = (_SYSID_1394 *)((char *)v11 + v9);
SMBiosStructure = WmipParseSysIdTable(
SysidTablePhysicalAddress,
(unsigned int)NumberEntries,
(_SYSID_UUID *)v11,
&SysIdUuidCounta,
v14,
(UINT64 *)((char *)&SysIdUuidCounta + 4));
if( SMBiosStructure < 0 )
{
ExFreePoolWithTag(v12, 0);
}
else
{
*(&ExBootDevicesRemovedEvent + 410) = v12;
*(&ExBootDevicesRemovedEvent + 822) = SysIdUuidCounta;
*(&ExBootDevicesRemovedEvent + 412) = v14;
*(&ExBootDevicesRemovedEvent + 826) = HIDWORD(SysIdUuidCounta);
}
}
}
}
*(&ExBootDevicesRemovedEvent + 3272) = SMBiosStructure != -1073741670;
*(&ExBootDevicesRemovedEvent + 823) = SMBiosStructure;
v7 = SysIdUuid;
}
KeReleaseMutex((_KMUTANT *)((char *)&ExBootDevicesRemovedEvent + 3072), 0);
result = *(&ExBootDevicesRemovedEvent + 823);
if( *(&ExBootDevicesRemovedEvent + 823) >= 0 )
{
*v7 = (_SYSID_UUID *)*(&ExBootDevicesRemovedEvent + 410);
*(_DWORD *)SysIdUuidCount = *(&ExBootDevicesRemovedEvent + 822);
*SysId1394 = (_SYSID_1394 *)*(&ExBootDevicesRemovedEvent + 412);
*(_DWORD *)SysId1394Count = *(&ExBootDevicesRemovedEvent + 826);
}
return result;
}Referenced by:
WmipQueryWmiDataBlock