PnpSetDeviceInterfacePropertyData

INT64 __stdcall PnpSetDeviceInterfacePropertyData(
        UNICODE_STRING *SymbolicLinkName,
        DEVPROPKEY *PropertyKey,
        UINT64 Lcid,
        UINT64 Type,
        UINT64 Size,
        PVOID Data){
  unsigned int v6; 
  _ETHREAD *CurrentThread; 
  int v10; 
  INT64 v12; 
  UINT64 v13; 
  UINT64 v14; 
  WCHAR *OutString; 
  _UNICODE_STRING String; 
  INT64 result[22]; 
  WCHAR *v18; 
  v6 = Lcid;
  memset((INT64)result, 0i64);
  *(_QWORD *)&String.Length = 0i64;
  OutString = 0i64;
  if( !SymbolicLinkName || !SymbolicLinkName->Buffer || !SymbolicLinkName->Length )
    return(unsigned int)-1073741811;
  if( v6 )
  {
    String.MaximumLength = 170;
    String.Buffer = (wchar_t *)result;
    if( !RtlLCIDToCultureName(v6, &String) )
      return(unsigned int)-1073741823;
  }
  else
  {
    String.Buffer = 0i64;
  }
  CurrentThread = (_ETHREAD *)KeGetCurrentThread();
  --*((_WORD *)CurrentThread + 242);
  ExAcquireResourceExclusiveLite(&PnpDevicePropertyLock, 1u);
  v10 = PnpUnicodeStringToWstr(&OutString, 0i64, SymbolicLinkName);
  if( v10 >= 0 )
  {
    LODWORD(v14) = 0;
    LODWORD(v13) = (_DWORD)Data;
    LODWORD(v12) = Size;
    v10 = PiPnpRtlSetObjectProperty(
            PiPnpRtlCtx,
            OutString,
            3ui64,
            0i64,
            (INT64)String.Buffer,
            (INT64)PropertyKey,
            v12,
            v18,
            v13,
            v14);
  }
  PnpUnicodeStringToWstrFree(OutString, SymbolicLinkName);
  ExReleaseResourceLite(&PnpDevicePropertyLock);
  KeLeaveCriticalRegionThread((__int64)KeGetCurrentThread());
  if( v10 == -1073741275 )
    return(unsigned int)-1073741772;
  return(unsigned int)v10;
}

Referenced by:

IoSetDeviceInterfacePropertyData