PiCMSetObjectProperty

NTSTATUS __stdcall PiCMSetObjectProperty(
        PVOID IoctlInputBuffer,
        UINT64 IoctlInputBufferSize,
        PVOID IoctlOutputBuffer,
        UINT64 IoctlOutputBufferSize,
        UINT64 *BytesUsed){
  unsigned int v5; 
  unsigned int v8; 
  NTSTATUS v9; 
  int v10; 
  int v11; 
  WCHAR *v12; 
  int v13; 
  int v14; 
  unsigned int v15; 
  int v16; 
  int v18; 
  int v19; 
  int v20; 
  int v21; 
  INT64 v22; 
  int v23; 
  int v24; 
  int v25; 
  INT64 v26; 
  INT64 v27; 
  INT64 v28; 
  INT64 v29; 
  INT64 v30; 
  UINT64 v31; 
  UINT64 v32; 
  int v33; 
  struct _UNICODE_STRING DestinationString; 
  UINT64 *v35; 
  INT64 result; 
  int v37; 
  PCWSTR SourceString; 
  INT64 v39; 
  __int64 v40; 
  int v41; 
  int v42; 
  __int64 v43; 
  int v44; 
  UINT64 ExpectedOutputSize; 
  UINT64 *v46; 
  v5 = IoctlInputBufferSize;
  v35 = v46;
  v8 = IoctlOutputBufferSize;
  memset((INT64)&result, 0i64);
  *(_DWORD *)v46 = 0;
  v9 = PiCMCapturePropertyInputData((UINT64)IoctlInputBuffer, v5, (unsigned int)BytesUsed, (INT64)&result);
  if( v9 >= 0 )
  {
    v10 = v37;
    v11 = v42;
    v12 = (WCHAR *)SourceString;
    *(_QWORD *)&DestinationString.Length = v43;
    v33 = v44;
    if( v41 == 14 )
    {
      v27 = v39 - *(_QWORD *)&DEVPKEY_Device_FriendlyName.fmtid.Data1;
      if( v39 == *(_QWORD *)&DEVPKEY_Device_FriendlyName.fmtid.Data1 )
        v27 = v40 - *(_QWORD *)DEVPKEY_Device_FriendlyName.fmtid.Data4;
      if( !v27 )
        goto LABEL_49;
    }
    if( v41 == 3 )
    {
      v22 = v39 - *(_QWORD *)&DEVPKEY_Device_FriendlyNameAttributes.fmtid.Data1;
      if( v39 == *(_QWORD *)&DEVPKEY_Device_FriendlyNameAttributes.fmtid.Data1 )
        v22 = v40 - *(_QWORD *)DEVPKEY_Device_FriendlyNameAttributes.fmtid.Data4;
      if( !v22 )
        goto LABEL_49;
    }
    if( v41 == 4 )
    {
      v26 = v39 - DEVPKEY_DriverPackage_SourceMediaPath;
      if( v39 == DEVPKEY_DriverPackage_SourceMediaPath )
        v26 = v40 + 0x4524B8338B5D1E6Ci64;
      if( !v26 )
        goto LABEL_49;
    }
    if( v41 != 2 )
      goto LABEL_6;
    v28 = v39 - DEVPKEY_WIA_DeviceType;
    if( v39 == DEVPKEY_WIA_DeviceType )
      v28 = v40 - 0x2F09E22B0008C7BEi64;
    if( v28 )
LABEL_6:
      v13 = 0;
    else
LABEL_49:
      v13 = 1;
    if( !PiAuDoesClientHaveAccess(v13 != 0 ? 64 : 2) )
    {
      v9 = -1073741790;
      goto LABEL_20;
    }
    if( !v12 || HIDWORD(result) || !IoctlOutputBuffer || (v14 = 8, v8 < 8) )
    {
      v9 = -1073741811;
      goto LABEL_20;
    }
    v15 = 0;
    if( v10 > 6 )
    {
      v18 = v10 - 65537;
      if( v18 )
      {
        v19 = v18 - 1;
        if( v19 )
        {
          v20 = v19 - 1;
          if( v20 )
          {
            v21 = v20 - 1;
            if( v21 )
            {
              if( v21 != 1 )
                goto LABEL_29;
              v14 = 11;
            }
            else
            {
              v14 = 10;
            }
          }
          else
          {
            v14 = 9;
          }
        }
      }
      else
      {
        v14 = 7;
      }
      v15 = PiDrvDbCtx != 0 ? v14 : 0;
    }
    else
    {
      if( v10 == 6 )
      {
        v15 = 6;
        goto LABEL_16;
      }
      v16 = v10 - 1;
      if( !v16 )
      {
        v15 = 1;
        goto LABEL_16;
      }
      v23 = v16 - 1;
      if( !v23 )
      {
        v15 = 2;
        goto LABEL_16;
      }
      v24 = v23 - 1;
      if( !v24 )
      {
        v15 = 4;
        goto LABEL_16;
      }
      v25 = v24 - 1;
      if( !v25 )
      {
        v15 = 3;
        goto LABEL_16;
      }
      if( v25 == 1 )
      {
        v15 = 5;
        goto LABEL_16;
      }
    }
LABEL_29:
    if( !v15 )
      v9 = -1073741811;
LABEL_16:
    if( v9 >= 0 )
    {
      LODWORD(v32) = 0;
      LODWORD(v31) = v33;
      LODWORD(v30) = v11;
      v9 = PiPnpRtlSetObjectProperty(
             PiPnpRtlCtx,
             v12,
             v15,
             0i64,
             0i64,
             (INT64)&v39,
             v30,
             *(WCHAR **)&DestinationString.Length,
             v31,
             v32);
      if( v9 == -1073741790 )
      {
        if( v41 != 38 )
          goto LABEL_20;
        v29 = v39 - *(_QWORD *)&DEVPKEY_Device_BaseContainerId.fmtid.Data1;
        if( v39 == *(_QWORD *)&DEVPKEY_Device_BaseContainerId.fmtid.Data1 )
          v29 = v40 - *(_QWORD *)DEVPKEY_Device_BaseContainerId.fmtid.Data4;
        if( v29 )
          goto LABEL_20;
        v9 = -1073741264;
      }
      if( v9 >= 0 && v15 == 1 )
      {
        DestinationString = 0i64;
        if( (int)RtlInitUnicodeStringEx(&DestinationString, v12) >= 0 )
          PnpSetDeviceInstancePropertyChangeEventFromDeviceInstance(&DestinationString);
      }
    }
LABEL_20:
    v9 = PiCMReturnBasicResultData((unsigned int)v9, (unsigned int)ExpectedOutputSize, IoctlOutputBuffer, v8, v35);
  }
  PiCMReleasePropertyInputData((INT64)&result);
  return v9;
}

Referenced by:

No references.