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