WmipGetSMBiosEventlog
INT64 __fastcall WmipGetSMBiosEventlog(UINT8 *Buffer, UINT64 *BufferSize){
INT64 result;
unsigned __int8 *v5;
int v6;
UINT8 *v7;
UINT64 v8;
int v9;
unsigned int v10;
UINT8 v11;
unsigned __int16 v12;
unsigned int v13;
UINT8 *v14;
__int128 v15;
UINT8 *v16;
UINT8 *v17;
VOID *StructPtr;
SIZE_T NumberOfBytes;
PVOID BaseAddress;
BaseAddress = 0i64;
StructPtr = 0i64;
LODWORD(NumberOfBytes) = 0;
result = WmipFindSMBiosStructure(0xFu, &StructPtr, &BaseAddress, &NumberOfBytes);
if( (int)result < 0 )
return result;
v5 = (unsigned __int8 *)StructPtr;
v6 = *((unsigned __int8 *)StructPtr + 1);
v7 = (UINT8 *)StructPtr + 4;
v8 = *((unsigned __int16 *)StructPtr + 2);
v9 = *((unsigned __int8 *)StructPtr + 10);
v10 = *((_DWORD *)StructPtr + 4);
if( (unsigned __int8)v6 < 0x17u )
{
v12 = 0;
v11 = 0;
}
else
{
v11 = 1;
v12 = *((unsigned __int8 *)StructPtr + 21) * *((unsigned __int8 *)StructPtr + 22);
if( v6 != v12 + 23 )
{
if( BaseAddress )
MmUnmapIoSpace(BaseAddress, (unsigned int)NumberOfBytes);
ExReleaseResourceLite(&WmipSMBiosLock);
KeLeaveCriticalRegionThread((__int64)KeGetCurrentThread());
return 3221225473i64;
}
}
v13 = v12 + v8 + 23;
if( *(_DWORD *)BufferSize < v13 )
{
if( BaseAddress )
MmUnmapIoSpace(BaseAddress, (unsigned int)NumberOfBytes);
ExReleaseResourceLite(&WmipSMBiosLock);
KeLeaveCriticalRegionThread((__int64)KeGetCurrentThread());
result = 3221225507i64;
}
else
{
Buffer[3] = 0;
v14 = &Buffer[v12 + 23];
*(_WORD *)Buffer = v12;
Buffer[2] = v11;
if( v11 == 1 )
{
memmove(Buffer + 4, v7, v5[1] - 4i64);
}
else
{
v15 = *(_OWORD *)v7;
*((_WORD *)Buffer + 10) = 0;
*(_OWORD *)(Buffer + 4) = v15;
Buffer[22] = 0;
}
if( BaseAddress )
MmUnmapIoSpace(BaseAddress, (unsigned int)NumberOfBytes);
ExReleaseResourceLite(&WmipSMBiosLock);
KeLeaveCriticalRegionThread((__int64)KeGetCurrentThread());
if( v9
&& v9 != 1
&& v9 != 2
&& v9 == 3
&& (NumberOfBytes = v10, MmMapIoSpaceEx((_LARGE_INTEGER)v10, v8, 4ui64), v17 = v16, v14)
&& v16 )
{
memmove(v14, v16, v8);
MmUnmapIoSpace(v17, v8);
result = 0i64;
}
else
{
result = 3221225473i64;
}
}
*(_DWORD *)BufferSize = v13;
return result;
}Referenced by:
WmipQueryWmiDataBlock