PnpSetDevicePropertyData

NTSTATUS __stdcall PnpSetDevicePropertyData(
        DEVICE_OBJECT *Pdo,
        DEVPROPKEY *PropertyKey,
        UINT64 Lcid,
        UINT64 Type,
        UINT64 Size,
        PVOID Data){
  unsigned int v6; 
  __int64 v9; 
  _ETHREAD *CurrentThread; 
  NTSTATUS v11; 
  __int64 v13; 
  NTSTATUS v14; 
  INT64 v15; 
  UINT64 v16; 
  UINT64 v17; 
  _UNICODE_STRING String; 
  INT64 result[22]; 
  WCHAR *a2; 
  v6 = Lcid;
  memset((INT64)result, 0i64);
  *(_QWORD *)&String.Length = 0i64;
  if( Pdo )
    v9 = *(_QWORD *)(*((_QWORD *)Pdo + 39) + 40i64);
  else
    v9 = 0i64;
  if( !v9 || !*(_QWORD *)(v9 + 48) )
    return -1073741808;
  if( v6 )
  {
    String.MaximumLength = 170;
    String.Buffer = (wchar_t *)result;
    if( !RtlLCIDToCultureName(v6, &String) )
      return -1073741823;
  }
  else
  {
    String.Buffer = 0i64;
  }
  CurrentThread = (_ETHREAD *)KeGetCurrentThread();
  --*((_WORD *)CurrentThread + 242);
  ExAcquireResourceExclusiveLite(&PnpDevicePropertyLock, 1u);
  LODWORD(v17) = 0;
  LODWORD(v16) = (_DWORD)Data;
  LODWORD(v15) = Size;
  v11 = PiPnpRtlSetObjectProperty(
          PiPnpRtlCtx,
          *(WCHAR **)(v9 + 48),
          1ui64,
          0i64,
          (INT64)String.Buffer,
          (INT64)PropertyKey,
          v15,
          a2,
          v16,
          v17);
  if( v11 >= 0 && PropertyKey->pid == 2 )
  {
    v13 = *(_QWORD *)&PropertyKey->fmtid.Data1 - *(_QWORD *)&INTERRUPT_CONNECTION_DATA_PKEY.fmtid.Data1;
    if( *(_QWORD *)&PropertyKey->fmtid.Data1 == *(_QWORD *)&INTERRUPT_CONNECTION_DATA_PKEY.fmtid.Data1 )
      v13 = *(_QWORD *)PropertyKey->fmtid.Data4 - *(_QWORD *)INTERRUPT_CONNECTION_DATA_PKEY.fmtid.Data4;
    if( !v13 )
    {
      LOBYTE(v14) = PnpSetInterruptInformation((UINT16 *)Pdo, (INT64)a2, (EVENT_DESCRIPTOR *)(unsigned int)Data);
      v11 = v14;
    }
  }
  ExReleaseResourceLite(&PnpDevicePropertyLock);
  KeLeaveCriticalRegionThread((__int64)KeGetCurrentThread());
  if( v11 == -1073741275 )
    v11 = -1073741772;
  if( *(int *)(v9 + 300) >= 771 )
    PnpSetDeviceInstancePropertyChangeEvent(v9);
  return v11;
}

Referenced by:

IoSetDevicePropertyData