WmipGetSMBiosEventlog
NTSTATUS __stdcall WmipGetSMBiosEventlog(UINT8 *Buffer, UINT64 *BufferSize){
NTSTATUS result;
unsigned __int8 *v5;
int v6;
__int128 *v7;
UINT64 v8;
int v9;
unsigned int v10;
UINT8 v11;
unsigned __int16 v12;
unsigned int v13;
UINT8 *v14;
__int128 v15;
VOID *v16;
VOID *v17;
VOID *StructPtr;
UINT64 MapSize;
VOID *MapPtr;
MapPtr = 0i64;
StructPtr = 0i64;
LODWORD(MapSize) = 0;
result = WmipFindSMBiosStructure(0xFu, &StructPtr, &MapPtr, &MapSize);
if( result < 0 )
return result;
v5 = (unsigned __int8 *)StructPtr;
v6 = *((unsigned __int8 *)StructPtr + 1);
v7 = (__int128 *)((char *)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( MapPtr )
MmUnmapIoSpace(MapPtr, (unsigned int)MapSize);
ExReleaseResourceLite((PERESOURCE)&ExBootDevicesRemovedEvent + 32);
KeLeaveCriticalRegionThread(KeGetCurrentThread());
return -1073741823;
}
}
v13 = v12 + v8 + 23;
if( *(_DWORD *)BufferSize < v13 )
{
if( MapPtr )
MmUnmapIoSpace(MapPtr, (unsigned int)MapSize);
ExReleaseResourceLite((PERESOURCE)&ExBootDevicesRemovedEvent + 32);
KeLeaveCriticalRegionThread(KeGetCurrentThread());
result = -1073741789;
}
else
{
Buffer[3] = 0;
v14 = &Buffer[v12 + 23];
*(_WORD *)Buffer = v12;
Buffer[2] = v11;
if( v11 == 1 )
{
memmove(Buffer + 4, v7, v5[1] - 4);
}
else
{
v15 = *v7;
*((_WORD *)Buffer + 10) = 0;
*(_OWORD *)(Buffer + 4) = v15;
Buffer[22] = 0;
}
if( MapPtr )
MmUnmapIoSpace(MapPtr, (unsigned int)MapSize);
ExReleaseResourceLite((PERESOURCE)&ExBootDevicesRemovedEvent + 32);
KeLeaveCriticalRegionThread(KeGetCurrentThread());
if( v9
&& v9 != 1
&& v9 != 2
&& v9 == 3
&& (MapSize = v10, v16 = MmMapIoSpaceEx((_LARGE_INTEGER)v10, v8, 4ui64), v17 = v16, v14)
&& v16 )
{
memmove(v14, v16, v8);
MmUnmapIoSpace(v17, v8);
result = 0;
}
else
{
result = -1073741823;
}
}
*(_DWORD *)BufferSize = v13;
return result;
}Referenced by:
WmipQueryWmiDataBlock