PiCMSetRegistryProperty

NTSTATUS __stdcall PiCMSetRegistryProperty(
        VOID *IoctlInputBuffer,
        UINT64 IoctlInputBufferSize,
        VOID *IoctlOutputBuffer,
        UINT64 IoctlOutputBufferSize,
        UINT64 *BytesUsed){
  UINT64 *v5; 
  unsigned int v6; 
  int v8; 
  NTSTATUS v9; 
  UINT64 PropertySize; 
  UINT8 *PropertyBuffer; 
  INT64 v13; 
  UINT64 v14; 
  _UNICODE_STRING DestinationString; 
  _CMAPI_INPUT_REGISTRY_PROPERTY_DATA RegistryPropertyData[4]; 
  _CMAPI_REG_PROP CmapiRegistryProperty[4]; 
  UINT64 v18[2]; 
  INT64 v19; 
  UINT64 *PnpRtlRegistryProperty; 

  v5 = PnpRtlRegistryProperty;
  v6 = IoctlOutputBufferSize;
  LODWORD(PnpRtlRegistryProperty) = 0;
  v19 = 0i64;
  *(_DWORD *)v5 = 0;
  *(_OWORD *)RegistryPropertyData = 0i64;
  *(_OWORD *)CmapiRegistryProperty = 0i64;
  *(_OWORD *)v18 = 0i64;
  v8 = PiCMCaptureRegistryPropertyInputData(
         IoctlInputBuffer,
         IoctlInputBufferSize,
         (unsigned int)BytesUsed,
         RegistryPropertyData);
  if( v8 >= 0 )
  {
    if( PiAuDoesClientHaveAccess(CmapiRegistryProperty[3] == CMAPI_REG_PROP_FRIENDLYNAME ? 64 : 2) )
    {
      if( *(_QWORD *)CmapiRegistryProperty && !RegistryPropertyData[1] && IoctlOutputBuffer && v6 >= 8 )
      {
        v9 = PiCMConvertRegistryProperty(CmapiRegistryProperty[3], (_CM_REG_PROP *)&PnpRtlRegistryProperty);
        if( v9 >= 0 )
        {
          if( RegistryPropertyData[2] == 1 )
          {
            LODWORD(v14) = 0;
            LODWORD(v13) = v19;
            LODWORD(PropertySize) = v18[0];
            v9 = PiPnpRtlSetDeviceRegProperty(
                   *(&stru_140CF2E80 + 607),
                   *(const WCHAR **)CmapiRegistryProperty,
                   0i64,
                   (_CM_REG_PROP)PnpRtlRegistryProperty,
                   PropertySize,
                   (UINT8 *)v18[1],
                   v13,
                   v14);
            if( v9 >= 0 )
            {
              DestinationString = 0i64;
              if( RtlInitUnicodeStringEx(&DestinationString, *(WCHAR **)CmapiRegistryProperty) >= 0 )
                PnpSetDeviceInstancePropertyChangeEventFromDeviceInstance(&DestinationString.Length);
            }
          }
          else if( RegistryPropertyData[2] == 2 )
          {
            LODWORD(v13) = v19;
            LODWORD(PropertySize) = v18[0];
            v9 = CmSetInstallerClassRegProp(
                   *(&stru_140CF2E80 + 607),
                   *(const WCHAR **)CmapiRegistryProperty,
                   0i64,
                   (unsigned int)PnpRtlRegistryProperty,
                   PropertySize,
                   (UINT8 *)v18[1],
                   v13,
                   v14);
          }
          else
          {
            v9 = -1073741811;
          }
          if( v9 == -1073741790 )
            v9 = -1073741264;
        }
      }
      else
      {
        v9 = -1073741811;
      }
    }
    else
    {
      v9 = -1073741790;
    }
    v8 = PiCMReturnBasicResultData(
           (unsigned int)v9,
           HIDWORD(v19),
           IoctlOutputBuffer,
           v6,
           v5,
           (INT64)PropertyBuffer,
           v13,
           v14);
  }
  PiCMReleaseRegistryPropertyInputData(RegistryPropertyData);
  return v8;
}

Referenced by:

PiCMHandleIoctl