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