PipCheckSystemFirmwareUpdated
VOID __stdcall PipCheckSystemFirmwareUpdated(UINT8 *SystemFirmwareUpdated){
_KEY_VALUE_FULL_INFORMATION *v1;
_KEY_VALUE_FULL_INFORMATION *v3;
VOID **v4;
NTSTATUS v5;
NTSTATUS RegistryValue;
ULONG DataLength;
UINT64 DataSize;
_UNICODE_STRING ValueName;
_KEY_VALUE_FULL_INFORMATION *Information;
VOID *Handle;
_KEY_VALUE_FULL_INFORMATION *v12;
Handle = 0i64;
v1 = 0i64;
*SystemFirmwareUpdated = 0;
Information = 0i64;
v3 = 0i64;
v12 = 0i64;
ValueName = 0i64;
if( IopOpenRegistryKeyEx(&Handle, 0i64, &CmRegistryMachineHardwareDescriptionSystemName, 0xF003Fui64) >= 0 )
{
if( IopGetRegistryValue(Handle, (PWCHAR)L"SystemBiosVersion", 0i64, &Information) < 0 )
{
v1 = Information;
}
else
{
v5 = PipHardwareConfigOpenKey(v4);
v1 = Information;
if( v5 >= 0 )
{
RegistryValue = IopGetRegistryValue(0i64, (PWCHAR)L"SystemBiosVersion", 0i64, &v12);
v3 = v12;
if( RegistryValue == -1073741772
|| RegistryValue >= 0
&& (v1->Type != v12->Type
|| (DataLength = v1->DataLength, DataLength != v12->DataLength)
|| memcmp((char *)v1 + v1->DataOffset, (char *)v12 + v12->DataOffset, DataLength)) )
{
*(_DWORD *)&ValueName.Length = 2359330;
ValueName.Buffer = (wchar_t *)L"SystemBiosVersion";
LODWORD(DataSize) = v1->DataLength;
if( ZwSetValueKey(0i64, &ValueName, 0i64, v1->Type, (char *)v1 + v1->DataOffset, DataSize) >= 0 )
*SystemFirmwareUpdated = 1;
}
}
}
}
if( Handle )
ZwClose((_HANDLE)Handle);
if( v1 )
ExFreePoolWithTag(v1, 0);
if( v3 )
ExFreePoolWithTag(v3, 0);
}Referenced by:
IopInitializePlugPlayServices