CmpSetSystemRegistryString

INT64 __stdcall CmpSetSystemRegistryString(HANDLE KeyHandle, PUNICODE_STRING ValueName){
  INT64 v2; 
  wchar_t *Buffer; 
  BOOL UnicodeStringFromAsciiz; 
  unsigned int v7; 
  UINT64 DataSize; 
  _UNICODE_STRING UnicodeString; 

  *(_QWORD *)&UnicodeString.Length = 0i64;
  Buffer = 0i64;
  UnicodeString.Buffer = 0i64;
  if( v2 )
  {
    UnicodeStringFromAsciiz = RtlCreateUnicodeStringFromAsciiz((INT64)&UnicodeString, v2);
    Buffer = UnicodeString.Buffer;
    if( UnicodeStringFromAsciiz )
    {
      LODWORD(DataSize) = UnicodeString.Length + 2;
      v7 = ZwSetValueKey(KeyHandle, ValueName, 0i64, 1ui64, UnicodeString.Buffer, DataSize);
    }
    else
    {
      v7 = -1073741823;
    }
  }
  else
  {
    v7 = ZwDeleteValueKey(KeyHandle, ValueName, 0i64);
    if( v7 != -1073741772 )
      return v7;
    v7 = 0;
  }
  if( Buffer )
    RtlFreeAnsiString(&UnicodeString);
  return v7;
}

Referenced by:

CmpSetSystemValues