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