91 if (ParentNode->LastChild ==
NULL)
117 if (prevState != NewState)
127 DPRINT(
"%wZ Changed state 0x%x => 0x%x\n", &
DeviceNode->InstancePath, prevState, NewState);
179 DPRINT(
"ParentNode 0x%p PhysicalDeviceObject 0x%p ServiceName %wZ\n",
192 ServiceName1 = &UnknownDeviceName;
199 FullServiceName.
Length = 0;
201 if (!FullServiceName.
Buffer)
214 DPRINT1(
"PnpRootCreateDevice() failed with status 0x%08X\n",
Status);
230 Node->ServiceName.Length = 0;
232 if (!
Node->ServiceName.Buffer)
256 ZwSetValueKey(InstanceHandle, &
KeyName, 0,
REG_DWORD, &LegacyValue,
sizeof(LegacyValue));
302 Node->Parent = ParentNode;
304 if (ParentNode->LastChild ==
NULL)
306 ParentNode->Child =
Node;
307 ParentNode->LastChild =
Node;
311 ParentNode->LastChild->Sibling =
Node;
312 ParentNode->LastChild =
Node;
315 Node->Level = ParentNode->Level + 1;
348 PrevSibling = PrevSibling->
Sibling;
443 DPRINT(
"IopTraverseDeviceTree(DeviceNode 0x%p FirstDeviceNode 0x%p Action %p Context 0x%p)\n",
#define InterlockedIncrement
static WCHAR ServiceName[]
PDEVICE_OBJECT PhysicalDeviceObject
VOID PiInsertDevNode(_In_ PDEVICE_NODE DeviceNode, _In_ PDEVICE_NODE ParentNode)
static NTSTATUS IopFindNextDeviceNodeForTraversal(_In_ PDEVICETREE_TRAVERSE_CONTEXT Context)
VOID PiClearDevNodeProblem(_In_ PDEVICE_NODE DeviceNode)
PDEVICE_NODE PipAllocateDeviceNode(_In_opt_ PDEVICE_OBJECT PhysicalDeviceObject)
KSPIN_LOCK IopDeviceTreeLock
PDEVICE_NODE FASTCALL IopGetDeviceNode(_In_ PDEVICE_OBJECT DeviceObject)
VOID PiSetDevNodeProblem(_In_ PDEVICE_NODE DeviceNode, _In_ UINT32 Problem)
PNP_DEVNODE_STATE PiSetDevNodeState(_In_ PDEVICE_NODE DeviceNode, _In_ PNP_DEVNODE_STATE NewState)
NTSTATUS IopFreeDeviceNode(_In_ PDEVICE_NODE DeviceNode)
Creates a device node.
PDEVICE_NODE IopRootDeviceNode
LONG IopNumberDeviceNodes
NTSTATUS IopTraverseDeviceTree(_In_ PDEVICETREE_TRAVERSE_CONTEXT Context)
#define NT_SUCCESS(StatCode)
static const WCHAR ClassGUID[]
#define ExAllocatePoolWithTag(hernya, size, tag)
#define IsListEmpty(ListHead)
#define KeReleaseSpinLock(sl, irql)
NTSTATUS RtlUpcaseUnicodeString(PUNICODE_STRING dst, PUNICODE_STRING src, BOOLEAN Alloc)
#define KeAcquireSpinLock(sl, irql)
#define InitializeListHead(ListHead)
#define ExAllocatePool(type, size)
#define ExFreePoolWithTag(_P, _T)
enum _PNP_DEVNODE_STATE PNP_DEVNODE_STATE
#define DNF_LEGACY_DRIVER
@ DeviceNodeUninitialized
struct _EXTENDED_DEVOBJ_EXTENSION * PEXTENDED_DEVOBJ_EXTENSION
#define DEVNODE_HISTORY_SIZE
NTSYSAPI NTSTATUS NTAPI ZwClose(_In_ HANDLE Handle)
NTSYSAPI VOID NTAPI RtlCopyUnicodeString(PUNICODE_STRING DestinationString, PUNICODE_STRING SourceString)
NTSYSAPI NTSTATUS NTAPI RtlAppendUnicodeStringToString(PUNICODE_STRING Destination, PUNICODE_STRING Source)
NTSYSAPI VOID NTAPI RtlInitUnicodeString(PUNICODE_STRING DestinationString, PCWSTR SourceString)
NTSYSAPI VOID NTAPI RtlFreeUnicodeString(PUNICODE_STRING UnicodeString)
#define REG_OPTION_VOLATILE
NTSTATUS NTAPI IopCreateDeviceKeyPath(IN PCUNICODE_STRING RegistryPath, IN ULONG CreateOptions, OUT PHANDLE Handle)
#define IopDeviceNodeSetFlag(DeviceNode, Flag)
NTSTATUS PnpRootCreateDevice(IN PUNICODE_STRING ServiceName, IN OPTIONAL PDRIVER_OBJECT DriverObject, OUT PDEVICE_OBJECT *PhysicalDeviceObject, OUT OPTIONAL PUNICODE_STRING FullInstancePath)
struct _DEVICE_NODE * Sibling
#define RTL_CONSTANT_STRING(s)
#define RtlZeroMemory(Destination, Length)
#define STATUS_UNSUCCESSFUL
#define STATUS_INSUFFICIENT_RESOURCES
_In_ PDEVICE_OBJECT DeviceObject
_Must_inspect_result_ _In_ WDFDEVICE _In_ PCUNICODE_STRING KeyName
_Requires_lock_held_ Interrupt _Releases_lock_ Interrupt _In_ _IRQL_restores_ KIRQL OldIrql
#define ObDereferenceObject
#define ObReferenceObject