PnpSetDeviceInterfacePropertyData

__int64 __fastcall PnpSetDeviceInterfacePropertyData(
        __int64 a1,
        UINT64 a2,
        unsigned int a3,
        __int64 a4,
        int a5,
        __int64 a6,
        UINT64 PropertySize){
  INT64 v10; 
  _ETHREAD *CurrentThread; 
  int v12; 
  UINT8 *PropertyBuffer; 
  PNP_OBJECT_TYPE ObjectType[2]; 
  _UNICODE_STRING String; 
  char v17[176]; 

  memset(v17, 0i64, 0xAAu);
  *(_QWORD *)&String.Length = 0i64;
  *(_QWORD *)ObjectType = 0i64;
  if( !a1 || !*(_QWORD *)(a1 + 8) || !*(_WORD *)a1 )
    return(unsigned int)-1073741811;
  if( a3 )
  {
    String.MaximumLength = 170;
    String.Buffer = (wchar_t *)v17;
    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);
  v12 = PnpUnicodeStringToWstr((__int16 **)ObjectType, 0i64, (unsigned __int16 *)a1);
  if( v12 >= 0 )
  {
    LODWORD(PropertyBuffer) = a5;
    v12 = PiPnpRtlSetObjectProperty(
            *(&stru_140CF2E80 + 607),
            ObjectType[0],
            (VOID *)3,
            0i64,
            (_DEVPROPKEY *)String.Buffer,
            a2,
            PropertyBuffer,
            PropertySize);
  }
  PnpUnicodeStringToWstrFree(*(void **)ObjectType, a1);
  ExReleaseResourceLite((PERESOURCE)((char *)&PnpReplaceEvent + 7968));
  KeLeaveCriticalRegionThread(KeGetCurrentThread());
  if( v12 == -1073741275 )
    return(unsigned int)-1073741772;
  return(unsigned int)v12;
}

Referenced by:

IoSetDeviceInterfacePropertyData