PnpCopyDevProperty

NTSTATUS __stdcall PnpCopyDevProperty(DEVPROPERTY *InProperty, UINT64 Tag, DEVPROPERTY *OutProperty){
  NTSTATUS PWSTR; 
  WCHAR *LocaleName; 
  ULONG BufferSize; 
  void *PoolWithTag; 
  PWSTR = 0;
  *OutProperty = *InProperty;
  OutProperty->CompKey.LocaleName = 0i64;
  OutProperty->Buffer = 0i64;
  LocaleName = (WCHAR *)InProperty->CompKey.LocaleName;
  if( LocaleName )
  {
    PWSTR = PnpAllocatePWSTR(LocaleName, 0x7FFFFFFFui64, 0x57706E50ui64, (WCHAR **)&OutProperty->CompKey.LocaleName);
    if( PWSTR < 0 )
      goto LABEL_9;
  }
  BufferSize = OutProperty->BufferSize;
  if( BufferSize )
  {
    PoolWithTag = ExAllocatePoolWithTag(PagedPool, BufferSize, 0x57706E50ui64);
    OutProperty->Buffer = PoolWithTag;
    if( !PoolWithTag )
    {
      PWSTR = -1073741670;
LABEL_9:
      PnpFreeDevProperty(OutProperty, 0x57706E50ui64);
      OutProperty->CompKey.Key.fmtid = 0i64;
      *(_OWORD *)&OutProperty->CompKey.Key.pid = 0i64;
      *(_OWORD *)&OutProperty->Type = 0i64;
      return PWSTR;
    }
  }
  memmove((UINT8 *)OutProperty->Buffer, (UINT8 *)InProperty->Buffer, OutProperty->BufferSize);
  return PWSTR;
}

Referenced by:

PnpCopyDevPropertyArray