PnpSetDevicePropertyData

__int64 __fastcall PnpSetDevicePropertyData(
        __int64 a1,
        UINT64 a2,
        unsigned int a3,
        __int64 a4,
        int a5,
        size_t a6,
        const VOID *PropertySize){
  INT64 v10; 
  __int64 v11; 
  _ETHREAD *CurrentThread; 
  int v13; 
  __int64 v15; 
  UINT8 *PropertyBuffer; 
  _UNICODE_STRING String; 
  char v18[176]; 

  memset(v18, 0i64, 0xAAu);
  *(_QWORD *)&String.Length = 0i64;
  if( a1 )
    v11 = *(_QWORD *)(*(_QWORD *)(a1 + 312) + 40i64);
  else
    v11 = 0i64;
  if( !v11 || !*(_QWORD *)(v11 + 48) )
    return(unsigned int)-1073741808;
  if( a3 )
  {
    String.MaximumLength = 170;
    String.Buffer = (wchar_t *)v18;
    if( !RtlLCIDToCultureName(a3, (INT64)&String) )
      return(unsigned int)-1073741823;
  }
  else
  {
    String.Buffer = 0i64;
  }
  CurrentThread = (_ETHREAD *)KeGetCurrentThread();
  --CurrentThread->Tcb.KernelApcDisable;
  ExAcquireResourceExclusiveLite((UINT64)&PnpReplaceEvent + 7968, 1, v10);
  LODWORD(PropertyBuffer) = a5;
  v13 = PiPnpRtlSetObjectProperty(
          *(&stru_140CF2E80 + 607),
          *(_QWORD *)(v11 + 48),
          (VOID *)1,
          0i64,
          (_DEVPROPKEY *)String.Buffer,
          a2,
          PropertyBuffer,
          (UINT64)PropertySize);
  if( v13 >= 0 && *(_DWORD *)(a2 + 16) == 2 )
  {
    v15 = *(_QWORD *)a2 - *(_QWORD *)&INTERRUPT_CONNECTION_DATA_PKEY.fmtid.Data1;
    if( *(_QWORD *)a2 == *(_QWORD *)&INTERRUPT_CONNECTION_DATA_PKEY.fmtid.Data1 )
      v15 = *(_QWORD *)(a2 + 8) - *(_QWORD *)INTERRUPT_CONNECTION_DATA_PKEY.fmtid.Data4;
    if( !v15 )
      v13 = PnpSetInterruptInformation(a1, PropertySize, a6);
  }
  ExReleaseResourceLite((PERESOURCE)((char *)&PnpReplaceEvent + 7968));
  KeLeaveCriticalRegionThread(KeGetCurrentThread());
  if( v13 == -1073741275 )
    v13 = -1073741772;
  if( *(int *)(v11 + 300) >= 771 )
    PnpSetDeviceInstancePropertyChangeEvent(v11);
  return(unsigned int)v13;
}

Referenced by:

IoSetDevicePropertyData