CmDeleteDeviceMappedPropertyFromInstanceKeyRegValue

NTSTATUS __stdcall CmDeleteDeviceMappedPropertyFromInstanceKeyRegValue(
        HPNPCTX *hPnpCtx,
        WCHAR *DeviceInstanceId,
        VOID *ObjectBaseKey,
        _DEVPROPKEY *PropertyKey){
  VOID *v4; 
  DEVPROPKEY **v5; 
  int v6; 
  unsigned int i; 
  DEVPROPKEY *v11; 
  DEVPROPKEY **v12; 
  __int64 v13; 
  WCHAR *v14; 
  NTSTATUS inited; 
  _OBJECT_TYPE *v16; 
  UINT64 DesiredAccess; 
  VOID *Handle; 
  _UNICODE_STRING DestinationString; 

  v4 = 0i64;
  v5 = &off_140983E70;
  v6 = 0;
  Handle = 0i64;
  for( i = 0; i < 2; ++i )
  {
    v11 = *v5;
    v12 = v5;
    if( PropertyKey->pid == (*v5)->pid )
    {
      v13 = *(_QWORD *)&PropertyKey->fmtid.Data1 - *(_QWORD *)&v11->fmtid.Data1;
      if( *(_QWORD *)&PropertyKey->fmtid.Data1 == *(_QWORD *)&v11->fmtid.Data1 )
        v13 = *(_QWORD *)PropertyKey->fmtid.Data4 - *(_QWORD *)v11->fmtid.Data4;
      if( !v13 )
        break;
    }
    v12 = 0i64;
    v5 += 4;
  }
  if( !v12 )
    return -1073741264;
  if( ObjectBaseKey )
    goto LABEL_8;
  LODWORD(DesiredAccess) = 2;
  v6 = CmOpenDeviceRegKey(hPnpCtx, DeviceInstanceId, CM_KEY_TYPE_DEVICE_INSTANCE, 0i64, DesiredAccess, 0, &Handle, 0i64);
  if( v6 >= 0 )
  {
    v4 = Handle;
LABEL_8:
    v14 = (WCHAR *)v12[2];
    DestinationString = 0i64;
    if( ObjectBaseKey )
      v4 = ObjectBaseKey;
    inited = RtlInitUnicodeStringEx(&DestinationString, v14);
    if( inited >= 0 )
      inited = ZwDeleteValueKey(v4, &DestinationString, v16);
    if( inited != -1073741772 && inited != -1073741444 && inited < 0 )
      v6 = inited;
  }
  if( Handle )
    ZwClose((_HANDLE)Handle);
  return v6;
}

Referenced by:

CmSetDeviceMappedProperty