18#define TAG_PNP_PROPERTY 'rPpP'
21#define PIP_PROP_REG_TYPE_MARK 0xFFFF0000UL
23#define PIP_PROP_FMTID_CHARS (38 + 1)
24#define PIP_PROP_PID_CHARS (8 + 1)
25#define PIP_PROP_PATH_CHARS (10 + 1 + 38 + 1 + 8 + 1)
26#define PIP_PROP_MAX_QUERY_SIZE 0x10000
28#define PIP_PROP_READ_ONLY 0x00000001
29#define PIP_PROP_ROOT_ENUM_WRITE 0x00000002
31#define PIP_PROP_OBJECT_PROTECTED 0x00000001
142 { 0xF0E20F09, 0xD97A, 0x49A9, { 0x80, 0x46, 0xBB, 0x6E, 0x22, 0xE6, 0xBB, 0x2E } },
154 return (Key1->pid == Key2->pid) &&
278 if (
Index == EntryStart)
279 return (
Index == Chars - 1);
284 EntryStart =
Index + 1;
307 switch (
Type - BaseType)
317 Valid = (
Size != 0) &&
347 RtlInitEmptyUnicodeString(&
Name->Locale,
349 sizeof(
Name->LocaleBuffer));
367 const GUID *Fmtid = &
Key->fmtid;
378 L"{%08lx-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x}",
379 Fmtid->Data1, Fmtid->Data2, Fmtid->Data3,
380 Fmtid->Data4[0], Fmtid->Data4[1],
381 Fmtid->Data4[2], Fmtid->Data4[3],
382 Fmtid->Data4[4], Fmtid->Data4[5],
383 Fmtid->Data4[6], Fmtid->Data4[7]);
406 (
Name->Locale.Length == 0) &&
461 if (LinkName->Length %
sizeof(
WCHAR))
470 Chars = LinkName->Length /
sizeof(
WCHAR);
472 while ((
Index < Chars) && (LinkName->Buffer[
Index] !=
L'\\'))
475 if (
Index < 4 + 1 + 38)
495 Chars = LinkName->Length /
sizeof(
WCHAR);
497 while ((
Start < Chars) && (LinkName->Buffer[
Start] !=
L'\\'))
504 for (End =
Start; End < Chars; End++)
506 if ((LinkName->Buffer[End] ==
L'\\') || (LinkName->Buffer[End] ==
L'/'))
510 Reference->Buffer = &LinkName->Buffer[
Start];
511 Reference->Length = (End -
Start) *
sizeof(
WCHAR);
512 Reference->MaximumLength = Reference->Length;
598 InfoSize =
sizeof(Small);
610 if (
Info != &Small.Info)
636 DPRINT1(
"Unexpected value type 0x%lx for %wZ\\%wZ\n",
657 return ZwSetValueKey(ValueKey,
752 (
Buffer.Info.SubKeys == 0) &&
753 (
Buffer.Info.Values == 0);
785 ZwDeleteKey(Keys[
Depth]);
866 *Replaced = (Stale !=
NULL);
965 if (!IsList || !InEntry)
972 if (!IsList || InEntry)
1001 RawSize =
Info->DataLength;
1004 if ((
Info->Type != RegType) &&
1024 if (RawSize !=
sizeof(
ULONG))
1030 *BlobSize = RawSize;
1047 *BlobSize =
sizeof(
Guid);
1183 *BlobSize =
sizeof(Boolean);
1215 *BlobSize =
sizeof(Boolean);
1223 *BlobSize =
sizeof(
Value);
1236 HANDLE DeviceKey, InstanceKey, ControlKey;
1249 *BlobSize =
sizeof(
GUID);
1306 switch (Builtin->Source)
1379 Status = ZwSetValueKey(ObjectKey,
1427 if (
Name->Locale.Length)
1493 return (Saved !=
NULL);
1562 if (!
Name->Locale.Length)
1749IoSetDevicePropertyData(
1787IoGetDevicePropertyData(
1819IoSetDeviceInterfacePropertyData(
1856IoGetDeviceInterfacePropertyData(
#define ALIGN_UP_BY(size, align)
static _Out_opt_ PULONGLONG Start
PRTL_UNICODE_STRING_BUFFER Path
ACPI_PHYSICAL_ADDRESS ACPI_SIZE BOOLEAN Warn UINT32 *TableIdx UINT32 ACPI_TABLE_HEADER *OutTableHeader ACPI_TABLE_HEADER **OutTable ACPI_HANDLE UINT32 ACPI_WALK_CALLBACK ACPI_WALK_CALLBACK void void **ReturnValue UINT32 ACPI_BUFFER *RetPathPtr ACPI_OBJECT_HANDLER void *Data ACPI_OBJECT_HANDLER void **Data ACPI_STRING ACPI_OBJECT_LIST ACPI_BUFFER *ReturnObjectBuffer ACPI_DEVICE_INFO **ReturnBuffer ACPI_HANDLE Parent
DECLSPEC_NORETURN VOID NTAPI KeBugCheckEx(IN ULONG BugCheckCode, IN ULONG_PTR BugCheckParameter1, IN ULONG_PTR BugCheckParameter2, IN ULONG_PTR BugCheckParameter3, IN ULONG_PTR BugCheckParameter4)
#define STATUS_OBJECT_TYPE_MISMATCH
#define DEVPROP_TYPE_EMPTY
#define DEVPROP_TYPEMOD_LIST
#define DEVPROP_TYPEMOD_ARRAY
#define DEVPROP_TYPE_BOOLEAN
#define DEVPROP_TYPE_GUID
#define DEVPROP_TYPE_NULL
#define DEVPROP_TYPE_UINT32
#define DEVPROP_TYPE_STRING_INDIRECT
struct _DEVPROPKEY DEVPROPKEY
#define DEVPROP_TYPE_STRING_LIST
#define DEVPROP_MASK_TYPE
#define DEVPROP_TYPE_STRING
_Check_return_ _In_ D3DDDI_VIDEO_PRESENT_TARGET_ID _In_ PDXGKARG_SYSTEM_DISPLAY_ENABLE_FLAGS _Out_ UINT * Width
_In_ D3DDDI_VIDEO_PRESENT_TARGET_ID _In_ ULONG _In_ ULONG Flags
#define NT_SUCCESS(StatCode)
#define RTL_CONSTANT_STRING(s)
#define _IRQL_requires_max_(irql)
#define RemoveEntryList(Entry)
#define InsertTailList(ListHead, Entry)
#define ExAllocatePoolWithTag(hernya, size, tag)
#define ExAcquireResourceExclusiveLite(res, wait)
FORCEINLINE VOID ExAcquirePushLockExclusive(PEX_PUSH_LOCK PushLock)
FORCEINLINE VOID ExAcquirePushLockShared(PEX_PUSH_LOCK PushLock)
FORCEINLINE VOID ExReleasePushLockShared(PEX_PUSH_LOCK PushLock)
FORCEINLINE VOID ExReleasePushLockExclusive(PEX_PUSH_LOCK PushLock)
NTSYSAPI NTSTATUS NTAPI ZwDeleteValueKey(__in IN HANDLE Key, __in IN PUNICODE_STRING ValueName)
_In_ PUNICODE_STRING SymbolicLinkName
_In_ UCXUSBDEVICE _In_ PDEVICE_OBJECT Pdo
#define RtlEqualMemory(dst, src, len)
#define KeLeaveCriticalRegion()
#define KeEnterCriticalRegion()
static LONG WINAPI EnumKey(HANDLE hcKey, DWORD dwIndex, LPWSTR pszName, PDWORD pcchName, PFILETIME pftLastWriteTime, HANDLE hSpooler)
#define ExFreePoolWithTag(_P, _T)
static PLARGE_INTEGER Time
#define _Outptr_result_bytebuffer_maybenull_(size)
_In_ UINT _In_ UINT _In_ PNDIS_PACKET Source
_Must_inspect_result_ _Out_ PNDIS_STATUS _In_ NDIS_HANDLE _In_ ULONG _Out_ PNDIS_STRING _Out_ PNDIS_HANDLE KeyHandle
_In_ ACCESS_MASK _In_ POBJECT_ATTRIBUTES _Reserved_ ULONG _In_opt_ PUNICODE_STRING _In_ ULONG _Out_opt_ PULONG Disposition
@ DeviceNodeUninitialized
#define DNF_LEGACY_RESOURCE_DEVICENODE
NTSYSAPI NTSTATUS NTAPI ZwClose(_In_ HANDLE Handle)
#define _In_reads_bytes_(s)
#define _Must_inspect_result_
#define _Out_writes_bytes_to_opt_(s, c)
#define _In_reads_bytes_opt_(s)
@ KeyValuePartialInformation
NTSYSAPI VOID NTAPI RtlInitUnicodeString(PUNICODE_STRING DestinationString, PCWSTR SourceString)
#define KEY_CREATE_SUB_KEY
#define REG_OPTION_NON_VOLATILE
#define REG_CREATED_NEW_KEY
NTSYSAPI VOID NTAPI RtlFreeUnicodeString(PUNICODE_STRING UnicodeString)
NTSYSAPI BOOLEAN NTAPI RtlPrefixUnicodeString(IN PUNICODE_STRING String1, IN PUNICODE_STRING String2, IN BOOLEAN CaseInSensitive)
#define REG_OPTION_VOLATILE
#define LOCALE_NAME_MAX_LENGTH
#define UNICODE_STRING_MAX_BYTES
#define UNREFERENCED_PARAMETER(P)
_In_ ULONG _In_ ULONG _In_ ULONG Length
VOID FASTCALL ExReleaseResourceLite(IN PERESOURCE Resource)
NTSTATUS NTAPI IopOpenRegistryKeyEx(PHANDLE KeyHandle, HANDLE ParentKey, PUNICODE_STRING Name, ACCESS_MASK DesiredAccess)
PDEVICE_NODE FASTCALL IopGetDeviceNode(IN PDEVICE_OBJECT DeviceObject)
ULONG IopGetDeviceNodeStatus(_In_ PDEVICE_NODE DeviceNode)
NTSTATUS IopQueueDevicePropertyChangeEvent(_In_ PCUNICODE_STRING DeviceId)
NTSTATUS IopOpenDeviceInterfaceKeys(_In_ PCUNICODE_STRING SymbolicLinkName, _In_ ACCESS_MASK DesiredAccess, _Out_opt_ PHANDLE DeviceKey, _Out_opt_ PHANDLE InstanceKey)
NTSTATUS NTAPI IopGetRegistryValue(IN HANDLE Handle, IN PWSTR ValueName, OUT PKEY_VALUE_FULL_INFORMATION *Information)
NTSTATUS NTAPI IopCreateRegistryKeyEx(OUT PHANDLE Handle, IN HANDLE BaseHandle OPTIONAL, IN PUNICODE_STRING KeyName, IN ACCESS_MASK DesiredAccess, IN ULONG CreateOptions, OUT PULONG Disposition OPTIONAL)
ERESOURCE PpRegistryDeviceResource
PDEVICE_NODE IopRootDeviceNode
#define STATUS_INTERNAL_ERROR
#define STATUS_KEY_DELETED
#define STATUS_OBJECT_PATH_INVALID
#define STATUS_CHILD_MUST_BE_VOLATILE
NTSTRSAFEVAPI RtlUnicodeStringPrintf(_In_ PUNICODE_STRING DestinationString, _In_ NTSTRSAFE_PCWSTR pszFormat,...)
NTSTRSAFEVAPI RtlStringCchPrintfW(_Out_writes_(cchDest) _Always_(_Post_z_) NTSTRSAFE_PWSTR pszDest, _In_ size_t cchDest, _In_ _Printf_format_string_ NTSTRSAFE_PCWSTR pszFormat,...)
NTSTATUS NTAPI IoGetDeviceProperty(IN PDEVICE_OBJECT DeviceObject, IN DEVICE_REGISTRY_PROPERTY DeviceProperty, IN ULONG BufferLength, OUT PVOID PropertyBuffer, OUT PULONG ResultLength)
static NTSTATUS PiPropAllocateBlob(_In_reads_bytes_(Size) PVOID Source, _In_ ULONG Size, _Outptr_result_bytebuffer_maybenull_(Size) PVOID *Blob)
static NTSTATUS PiPropCheckPayload(_In_ DEVPROPTYPE Type, _In_reads_bytes_opt_(Size) PVOID Data, _In_ ULONG Size)
static NTSTATUS PiPropWriteBuiltin(_In_ PPIP_PROP_OBJECT Object, _In_ const PIP_BUILTIN_PROPERTY *Builtin, _In_ DEVPROPTYPE Type, _In_reads_bytes_opt_(Size) PVOID Data, _In_ ULONG Size)
static BOOLEAN PiPropIsValidStringList(_In_reads_bytes_(Size) PCWSTR List, _In_ ULONG Size)
static NTSTATUS PiPropInitInterfaceObject(_In_ PCUNICODE_STRING SymbolicLinkName, _Out_ PPIP_PROP_OBJECT Object)
#define PIP_PROP_PID_CHARS
static NTSTATUS PiPropInitName(_Out_ PPIP_PROP_NAME Name, _In_ const DEVPROPKEY *Key, _In_ LCID Lcid)
static BOOLEAN PiPropIsSameKey(_In_ const DEVPROPKEY *Key1, _In_ const DEVPROPKEY *Key2)
static BOOLEAN PiPropIsKeyEmpty(_In_ HANDLE KeyHandle)
static NTSTATUS PiPropReplaceSaved(_In_ PDEVICE_OBJECT Pdo, _In_ DEVPROPTYPE Type, _In_reads_bytes_opt_(Size) PVOID Data, _In_ ULONG Size, _Out_opt_ PBOOLEAN Replaced)
struct _PIP_BUILTIN_PROPERTY * PPIP_BUILTIN_PROPERTY
enum _PIP_PROP_FIELD PIP_PROP_FIELD
enum _PIP_PROP_TARGET PIP_PROP_TARGET
static const DEVPROPKEY PiPropInterruptKey
static NTSTATUS NTAPI PiPropGetInterfaceReference(_In_ PCUNICODE_STRING LinkName, _Out_ PUNICODE_STRING Reference)
#define PIP_PROP_REG_TYPE_MARK
static NTSTATUS PiPropNormalizeStatus(_In_ NTSTATUS Status)
static BOOLEAN PiPropReadFromBuiltin(_In_ PPIP_PROP_OBJECT Object, _In_ PPIP_PROP_NAME Name, _Inout_ PPIP_PROP_OUTPUT Out, _Out_ PNTSTATUS Status)
struct _PIP_PROP_NAME PIP_PROP_NAME
static NTSTATUS PiPropCreateBranch(_In_ HANDLE Parent, _In_reads_(Depth) PCUNICODE_STRING *Parts, _In_ ULONG Depth, _In_ PPIP_PROP_NAME Name, _In_ DEVPROPTYPE Type, _In_reads_bytes_opt_(Size) PVOID Data, _In_ ULONG Size)
#define PIP_PROP_MAX_QUERY_SIZE
static BOOLEAN PiPropReadFromSaved(_In_ PPIP_PROP_OBJECT Object, _In_ PPIP_PROP_NAME Name, _Inout_ PPIP_PROP_OUTPUT Out, _Out_ PNTSTATUS Status)
BOOLEAN(* PIP_PROP_READER)(_In_ PPIP_PROP_OBJECT Object, _In_ PPIP_PROP_NAME Name, _Inout_ PPIP_PROP_OUTPUT Out, _Out_ PNTSTATUS Status)
static NTSTATUS PiPropStoreWrite(_In_ HANDLE ObjectKey, _In_ PPIP_PROP_NAME Name, _In_ DEVPROPTYPE Type, _In_reads_bytes_opt_(Size) PVOID Data, _In_ ULONG Size)
struct _PIP_PROP_OBJECT * PPIP_PROP_OBJECT
@ PipFieldInterfaceEnabled
@ PipFieldInterfaceDevice
@ PipFieldInterfaceReference
#define PIP_PROP_ROOT_ENUM_WRITE
static NTSTATUS PiPropGet(_In_ PPIP_PROP_OBJECT Object, _In_ const DEVPROPKEY *PropertyKey, _In_ LCID Lcid, _In_ ULONG Size, _Out_writes_bytes_to_opt_(Size, *RequiredSize) PVOID Data, _Out_ PULONG RequiredSize, _Out_ PDEVPROPTYPE Type)
static const PIP_PROP_READER PiPropReaders[]
static NTSTATUS PiPropOpenObjectKey(_In_ PPIP_PROP_OBJECT Object, _In_ ACCESS_MASK DesiredAccess, _Out_ PHANDLE ObjectKey)
static BOOLEAN PiPropParseInterfaceName(_In_ PCUNICODE_STRING LinkName, _Out_ LPGUID ClassGuid)
static NTSTATUS PiPropReadKeyValue(_In_ PPIP_PROP_OBJECT Object, _In_ PCWSTR ValueName, _In_ ULONG RegType, _In_ DEVPROPTYPE Type, _Outptr_result_bytebuffer_maybenull_(*BlobSize) PVOID *Blob, _Out_ PULONG BlobSize)
static const PIP_BUILTIN_PROPERTY PipDeviceBuiltins[]
static NTSTATUS PiPropReadBuiltin(_In_ PPIP_PROP_OBJECT Object, _In_ const PIP_BUILTIN_PROPERTY *Builtin, _Outptr_result_bytebuffer_maybenull_(*BlobSize) PVOID *Blob, _Out_ PULONG BlobSize)
static NTSTATUS PiPropInitLocale(_Out_ PPIP_PROP_NAME Name, _In_ LCID Lcid)
enum _PIP_PROP_OBJECT_KIND PIP_PROP_OBJECT_KIND
#define PIP_PROP_OBJECT_PROTECTED
static BOOLEAN PiPropIsInterruptKey(_In_ PPIP_PROP_OBJECT Object, _In_ PPIP_PROP_NAME Name)
#define PIP_PROP_FMTID_CHARS
static PIP_PROP_TARGET PiPropPickTarget(_In_ PPIP_PROP_OBJECT Object, _In_ PPIP_PROP_NAME Name, _Out_ const PIP_BUILTIN_PROPERTY **Builtin)
enum _PIP_PROP_SOURCE PIP_PROP_SOURCE
static NTSTATUS PiPropStoreApply(_In_ PPIP_PROP_OBJECT Object, _In_ PPIP_PROP_NAME Name, _In_ DEVPROPTYPE Type, _In_reads_bytes_opt_(Size) PVOID Data, _In_ ULONG Size)
static NTSTATUS PiPropCopyOut(_In_ DEVPROPTYPE SourceType, _In_reads_bytes_opt_(SourceSize) PVOID Source, _In_ ULONG SourceSize, _Out_ PDEVPROPTYPE Type, _Out_writes_bytes_to_opt_(Size, *RequiredSize) PVOID Data, _In_ ULONG Size, _Out_ PULONG RequiredSize)
static PPIP_PROP_SAVED_VALUE PiPropFindSaved(_In_ PDEVICE_OBJECT Pdo)
static const PIP_PROP_TYPE_RULE PiPropTypeRules[MAX_DEVPROP_TYPE+1]
static NTSTATUS PiPropStoreDelete(_In_ HANDLE ObjectKey, _In_ PPIP_PROP_NAME Name)
static BOOLEAN PiPropIsValidString(_In_reads_bytes_(Size) PCWSTR String, _In_ ULONG Size)
#define PIP_PROP_READ_ONLY
static BOOLEAN PiPropCheckElements(_In_ UCHAR Check, _In_reads_bytes_(Width *Count) PUCHAR Data, _In_ ULONG Width, _In_ ULONG Count)
static NTSTATUS PiPropSet(_In_ PPIP_PROP_OBJECT Object, _In_ const DEVPROPKEY *PropertyKey, _In_ LCID Lcid, _In_ DEVPROPTYPE Type, _In_ ULONG Size, _In_reads_bytes_opt_(Size) PVOID Data)
static const PIP_BUILTIN_PROPERTY PipInterfaceBuiltins[]
static const PIP_BUILTIN_PROPERTY * PiPropBuiltinTable(_In_ PIP_PROP_OBJECT_KIND Kind, _Out_ PULONG Count)
static NTSTATUS PiPropReadInterfaceField(_In_ PPIP_PROP_OBJECT Object, _In_ PIP_PROP_FIELD Field, _Outptr_result_bytebuffer_maybenull_(*BlobSize) PVOID *Blob, _Out_ PULONG BlobSize)
static BOOLEAN PiPropShouldAnnounce(_In_ PDEVICE_NODE DeviceNode)
struct _PIP_PROP_OBJECT PIP_PROP_OBJECT
static NTSTATUS PiPropInitDeviceObject(_In_ PDEVICE_OBJECT Pdo, _Out_ PPIP_PROP_OBJECT Object)
struct _PIP_PROP_SAVED_VALUE PIP_PROP_SAVED_VALUE
struct _PIP_BUILTIN_PROPERTY PIP_BUILTIN_PROPERTY
#define PIP_PROP_PATH_CHARS
static BOOLEAN PiPropReadFromStore(_In_ PPIP_PROP_OBJECT Object, _In_ PPIP_PROP_NAME Name, _Inout_ PPIP_PROP_OUTPUT Out, _Out_ PNTSTATUS Status)
static NTSTATUS PiPropStoreQuery(_In_ HANDLE ObjectKey, _In_ PPIP_PROP_NAME Name, _Out_ PDEVPROPTYPE Type, _Out_writes_bytes_to_opt_(Size, *RequiredSize) PVOID Data, _In_ ULONG Size, _Out_ PULONG RequiredSize)
struct _PIP_PROP_OUTPUT * PPIP_PROP_OUTPUT
static const PIP_BUILTIN_PROPERTY * PiPropFindBuiltin(_In_ PPIP_PROP_OBJECT Object, _In_ const DEVPROPKEY *Key)
static NTSTATUS PiPropBuildValuePath(_In_ PPIP_PROP_NAME Name, _Out_ PUNICODE_STRING Path, _Out_writes_(PIP_PROP_PATH_CHARS) PWCHAR Buffer)
static EX_PUSH_LOCK PiPropSavedLock
struct _PIP_PROP_SAVED_VALUE * PPIP_PROP_SAVED_VALUE
struct _PIP_PROP_TYPE_RULE PIP_PROP_TYPE_RULE
static NTSTATUS PiPropPutValue(_In_ HANDLE ValueKey, _In_ PPIP_PROP_NAME Name, _In_ DEVPROPTYPE Type, _In_reads_bytes_opt_(Size) PVOID Data, _In_ ULONG Size)
struct _PIP_PROP_NAME * PPIP_PROP_NAME
enum _PIP_PROP_CHECK PIP_PROP_CHECK
static NTSTATUS PiPropReadDeviceRegistryProperty(_In_ PPIP_PROP_OBJECT Object, _In_ const PIP_BUILTIN_PROPERTY *Builtin, _Outptr_result_bytebuffer_maybenull_(*BlobSize) PVOID *Blob, _Out_ PULONG BlobSize)
struct _PIP_PROP_OUTPUT PIP_PROP_OUTPUT
VOID PiPropReleaseDevice(_In_ PDEVICE_OBJECT DeviceObject)
@ PipSourceRegistryProperty
static NTSTATUS PiPropCaptureString(_In_reads_bytes_(RawSize) PCWSTR Raw, _In_ ULONG RawSize, _In_ BOOLEAN IsList, _Outptr_result_bytebuffer_maybenull_(*BlobSize) PVOID *Blob, _Out_ PULONG BlobSize)
static NTSTATUS PiPropReadDeviceNodeField(_In_ PPIP_PROP_OBJECT Object, _In_ PIP_PROP_FIELD Field, _Outptr_result_bytebuffer_maybenull_(*BlobSize) PVOID *Blob, _Out_ PULONG BlobSize)
static NTSTATUS PiPropReadRegistryValue(_In_ HANDLE KeyHandle, _In_ PCWSTR ValueName, _In_ ULONG RegType, _In_ DEVPROPTYPE Type, _Outptr_result_bytebuffer_maybenull_(*BlobSize) PVOID *Blob, _Out_ PULONG BlobSize)
#define REGSTR_VAL_LOWERFILTERS
#define REGSTR_KEY_DEVICE_PROPERTIES
#define REGSTR_VAL_UI_NUMBER
#define REGSTR_VAL_CAPABILITIES
#define REGSTR_VAL_DEVDESC
#define REGSTR_VAL_CLASSGUID
#define REGSTR_VAL_COMPATIBLEIDS
#define REGSTR_VAL_DRIVER
#define REGSTR_VAL_FRIENDLYNAME
#define REGSTR_VAL_SERVICE
#define REGSTR_VAL_HARDWAREID
#define REGSTR_VAL_LOCATION_INFORMATION
#define REGSTR_VAL_CONFIGFLAGS
#define REGSTR_VAL_UPPERFILTERS
_In_ PSP_DEVINFO_DATA _In_ const DEVPROPKEY * PropertyKey
#define STATUS_BUFFER_TOO_SMALL
#define STATUS_BUFFER_OVERFLOW
WCHAR PidBuffer[PIP_PROP_PID_CHARS]
WCHAR FmtidBuffer[PIP_PROP_FMTID_CHARS]
WCHAR LocaleBuffer[LOCALE_NAME_MAX_LENGTH]
PIP_PROP_OBJECT_KIND Kind
UCHAR Data[ANYSIZE_ARRAY]
#define FIELD_OFFSET(t, f)
union _LARGE_INTEGER LARGE_INTEGER
#define RtlCopyMemory(Destination, Source, Length)
#define RtlZeroMemory(Destination, Length)
#define CONTAINING_RECORD(address, type, field)
_In_ PGUID _In_ ULONG _Out_ PULONG ResultLength
#define STATUS_INVALID_DEVICE_REQUEST
#define STATUS_ACCESS_DENIED
#define STATUS_OBJECT_PATH_NOT_FOUND
#define STATUS_INVALID_PARAMETER
#define STATUS_UNSUCCESSFUL
#define STATUS_INSUFFICIENT_RESOURCES
#define STATUS_OBJECT_NAME_NOT_FOUND
static int Link(const char **args)
_Must_inspect_result_ _In_ WDFCHILDLIST _In_ PWDF_CHILD_LIST_ITERATOR _Out_ WDFDEVICE _Inout_opt_ PWDF_CHILD_RETRIEVE_INFO Info
_Must_inspect_result_ _In_ WDFCOLLECTION _In_ WDFOBJECT Object
_In_ WDFCOLLECTION _In_ ULONG Index
_In_ PDEVICE_OBJECT DeviceObject
_Must_inspect_result_ _In_ WDFDEVICE _In_ ULONG _In_ ACCESS_MASK DesiredAccess
_Must_inspect_result_ _In_ WDFDEVICE _In_ PWDF_DEVICE_PROPERTY_DATA _In_ DEVPROPTYPE _In_ ULONG Size
_Must_inspect_result_ _In_ WDFDEVICE _In_ PWDF_DEVICE_PROPERTY_DATA _In_ ULONG _Out_ PVOID _Out_ PULONG RequiredSize
_Must_inspect_result_ _In_ WDFDEVICE _In_ WDFSTRING String
_Must_inspect_result_ _In_ WDFDEVICE _In_ WDFDEVICE Child
_Must_inspect_result_ _In_ WDFOBJECT _In_ CONST GUID * Guid
_Must_inspect_result_ _In_ WDFKEY _In_ PCUNICODE_STRING ValueName
_Must_inspect_result_ _In_ WDFKEY _In_ PCUNICODE_STRING _Out_opt_ PUSHORT _Inout_opt_ PUNICODE_STRING Value
_Must_inspect_result_ _In_ WDFCMRESLIST List
NTSYSAPI ULONG WINAPI RtlLengthSecurityDescriptor(PSECURITY_DESCRIPTOR)
NTSYSAPI NTSTATUS WINAPI RtlGUIDFromString(PUNICODE_STRING, GUID *)
NTSYSAPI NTSTATUS WINAPI RtlStringFromGUID(REFGUID, PUNICODE_STRING)
NTSYSAPI BOOLEAN WINAPI RtlValidRelativeSecurityDescriptor(PSECURITY_DESCRIPTOR, ULONG, SECURITY_INFORMATION)
@ DevicePropertyEnumeratorName
@ DevicePropertyBusNumber
@ DevicePropertyRemovalPolicy
@ DevicePropertyPhysicalDeviceObjectName
@ DevicePropertyLegacyBusType
@ DevicePropertyBusTypeGuid
#define RTL_STATIC_LIST_HEAD(x)