Update DEVICE_NODE structure but some ReactOS specific components still remain.

svn path=/trunk/; revision=11398
This commit is contained in:
Eric Kohl 2004-10-23 14:48:16 +00:00
parent f0497fdefd
commit dbc9b1b7dd
3 changed files with 175 additions and 147 deletions

View file

@ -16,7 +16,7 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
/* $Id: io.h,v 1.45 2004/10/22 10:55:35 ekohl Exp $
/* $Id: io.h,v 1.46 2004/10/23 14:46:04 ekohl Exp $
*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS kernel
@ -65,24 +65,82 @@ typedef struct _PRIVATE_DRIVER_EXTENSIONS {
typedef struct _DEVICE_NODE
{
/* A tree structure. */
struct _DEVICE_NODE *Parent;
struct _DEVICE_NODE *PrevSibling;
struct _DEVICE_NODE *NextSibling;
struct _DEVICE_NODE *Child;
PDEVICE_OBJECT Pdo;
UNICODE_STRING InstancePath;
UNICODE_STRING ServiceName;
//TargetDeviceNotifyList?
PDEVICE_CAPABILITIES CapabilityFlags;
/* The level of deepness in the tree. */
UINT Level;
/* */
// PPO_DEVICE_NOTIFY Notify;
/* State machine. */
// PNP_DEVNODE_STATE State;
// PNP_DEVNODE_STATE PreviousState;
// PNP_DEVNODE_STATE StateHistory[20];
UINT StateHistoryEntry;
/* ? */
INT CompletionStatus;
/* ? */
PIRP PendingIrp;
/* See DNF_* flags below (WinDBG documentation has WRONG values) */
ULONG Flags;
/* See DNUF_* flags below */
ULONG UserFlags;
ULONG DisableableDepends;
/* See CM_PROB_* values are defined in cfg.h */
ULONG Problem;
PCM_RESOURCE_LIST CmResourceList;
PCM_RESOURCE_LIST BootResourceList;
PIO_RESOURCE_REQUIREMENTS_LIST ResourceRequirementsList;
/* Pointer to the PDO corresponding to the device node. */
PDEVICE_OBJECT PhysicalDeviceObject;
/* Resource list as assigned by the PnP arbiter. See IRP_MN_START_DEVICE
and ARBITER_INTERFACE (not documented in DDK, but present in headers). */
PCM_RESOURCE_LIST ResourceList;
/* Resource list as assigned by the PnP arbiter (translated version). */
PCM_RESOURCE_LIST ResourceListTranslated;
/* Instance path relative to the Enum key in registry. */
UNICODE_STRING InstancePath;
/* Name of the driver service. */
UNICODE_STRING ServiceName;
/* ? */
PDEVICE_OBJECT DuplicatePDO;
/* See IRP_MN_QUERY_RESOURCE_REQUIREMENTS. */
PIO_RESOURCE_REQUIREMENTS_LIST ResourceRequirements;
/* Information about bus for bus drivers. */
INTERFACE_TYPE InterfaceType;
ULONG BusNumber;
/* Information about underlying bus for child devices. */
INTERFACE_TYPE ChildInterfaceType;
ULONG ChildBusNumber;
USHORT ChildBusTypeIndex;
/* ? */
UCHAR RemovalPolicy;
UCHAR HardwareRemovalPolicy;
LIST_ENTRY TargetDeviceNotify;
LIST_ENTRY DeviceArbiterList;
LIST_ENTRY DeviceTranslatorList;
USHORT NoTranslatorMask;
USHORT QueryTranslatorMask;
USHORT NoArbiterMask;
USHORT QueryArbiterMask;
ULONG OverUsed1;
ULONG OverUsed2;
/* See IRP_MN_QUERY_RESOURCES. */
PCM_RESOURCE_LIST BootResources;
/* See the bitfields in DEVICE_CAPABILITIES structure. */
ULONG CapabilityFlags;
struct
{
ULONG DockStatus;
LIST_ENTRY ListEntry;
WCHAR *SerialNumber;
} DockInfo;
ULONG DisableableDepends;
LIST_ENTRY PendedSetInterfaceState;
LIST_ENTRY LegacyBusListEntry;
ULONG DriverUnloadRetryCount;
/* Not NT's */
PPNP_BUS_INFORMATION BusInformation;
GUID BusTypeGuid;
ULONG Address;
} DEVICE_NODE, *PDEVICE_NODE;
/* For Flags field */

View file

@ -1,4 +1,4 @@
/* $Id: device.c,v 1.79 2004/10/22 20:25:53 ekohl Exp $
/* $Id: device.c,v 1.80 2004/10/23 14:48:15 ekohl Exp $
*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS kernel
@ -42,16 +42,16 @@ IopInitializeDevice(
DriverObject->DriverExtension->AddDevice);
Status = DriverObject->DriverExtension->AddDevice(
DriverObject, DeviceNode->Pdo);
DriverObject, DeviceNode->PhysicalDeviceObject);
if (!NT_SUCCESS(Status))
{
return Status;
}
Fdo = IoGetAttachedDeviceReference(DeviceNode->Pdo);
Fdo = IoGetAttachedDeviceReference(DeviceNode->PhysicalDeviceObject);
if (Fdo == DeviceNode->Pdo)
if (Fdo == DeviceNode->PhysicalDeviceObject)
{
/* FIXME: What do we do? Unload the driver or just disable the device? */
DbgPrint("An FDO was not attached\n");
@ -63,7 +63,7 @@ IopInitializeDevice(
DPRINT("Sending IRP_MN_START_DEVICE to driver\n");
Stack.Parameters.StartDevice.AllocatedResources = DeviceNode->BootResourceList;
Stack.Parameters.StartDevice.AllocatedResources = DeviceNode->BootResources;
/* FIXME: Translate the resource list */
Stack.Parameters.StartDevice.AllocatedResourcesTranslated = NULL;

View file

@ -1,4 +1,4 @@
/* $Id: pnpmgr.c,v 1.44 2004/10/22 20:44:48 navaraf Exp $
/* $Id: pnpmgr.c,v 1.45 2004/10/23 14:48:16 ekohl Exp $
*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS kernel
@ -76,54 +76,46 @@ IoGetDeviceProperty(
switch (DeviceProperty)
{
case DevicePropertyBusNumber:
if (DeviceNode->BusInformation == NULL)
return STATUS_INVALID_DEVICE_REQUEST;
Length = sizeof(ULONG);
Data = &DeviceNode->BusInformation->BusNumber;
Data = &DeviceNode->BusNumber;
break;
/* Complete, untested */
case DevicePropertyBusTypeGuid:
if (DeviceNode->BusInformation == NULL)
return STATUS_INVALID_DEVICE_REQUEST;
*ResultLength = 39 * sizeof(WCHAR);
if (BufferLength < (39 * sizeof(WCHAR)))
return STATUS_BUFFER_TOO_SMALL;
swprintf((PWSTR)PropertyBuffer,
L"{%08lX-%04X-%04X-%02X%02X-%02X%02X%02X%02X%02X%02X}",
DeviceNode->BusInformation->BusTypeGuid.Data1,
DeviceNode->BusInformation->BusTypeGuid.Data2,
DeviceNode->BusInformation->BusTypeGuid.Data3,
DeviceNode->BusInformation->BusTypeGuid.Data4[0],
DeviceNode->BusInformation->BusTypeGuid.Data4[1],
DeviceNode->BusInformation->BusTypeGuid.Data4[2],
DeviceNode->BusInformation->BusTypeGuid.Data4[3],
DeviceNode->BusInformation->BusTypeGuid.Data4[4],
DeviceNode->BusInformation->BusTypeGuid.Data4[5],
DeviceNode->BusInformation->BusTypeGuid.Data4[6],
DeviceNode->BusInformation->BusTypeGuid.Data4[7]);
DeviceNode->BusTypeGuid.Data1,
DeviceNode->BusTypeGuid.Data2,
DeviceNode->BusTypeGuid.Data3,
DeviceNode->BusTypeGuid.Data4[0],
DeviceNode->BusTypeGuid.Data4[1],
DeviceNode->BusTypeGuid.Data4[2],
DeviceNode->BusTypeGuid.Data4[3],
DeviceNode->BusTypeGuid.Data4[4],
DeviceNode->BusTypeGuid.Data4[5],
DeviceNode->BusTypeGuid.Data4[6],
DeviceNode->BusTypeGuid.Data4[7]);
return STATUS_SUCCESS;
case DevicePropertyLegacyBusType:
if (DeviceNode->BusInformation == NULL)
return STATUS_INVALID_DEVICE_REQUEST;
Length = sizeof(INTERFACE_TYPE);
Data = &DeviceNode->BusInformation->LegacyBusType;
Data = &DeviceNode->InterfaceType;
break;
case DevicePropertyAddress:
if (DeviceNode->CapabilityFlags == NULL)
return STATUS_INVALID_DEVICE_REQUEST;
Length = sizeof(ULONG);
Data = &DeviceNode->CapabilityFlags->Address;
Data = &DeviceNode->Address;
break;
case DevicePropertyUINumber:
if (DeviceNode->CapabilityFlags == NULL)
return STATUS_INVALID_DEVICE_REQUEST;
Length = sizeof(ULONG);
Data = &DeviceNode->CapabilityFlags->UINumber;
break;
// case DevicePropertyUINumber:
// if (DeviceNode->CapabilityFlags == NULL)
// return STATUS_INVALID_DEVICE_REQUEST;
// Length = sizeof(ULONG);
// Data = &DeviceNode->CapabilityFlags->UINumber;
// break;
case DevicePropertyClassName:
case DevicePropertyClassGuid:
@ -134,6 +126,7 @@ IoGetDeviceProperty(
case DevicePropertyCompatibleIDs:
case DevicePropertyDeviceDescription:
case DevicePropertyLocationInformation:
case DevicePropertyUINumber:
{
LPWSTR RegistryPropertyName, KeyNameBuffer;
UNICODE_STRING KeyName, ValueName;
@ -163,6 +156,8 @@ IoGetDeviceProperty(
RegistryPropertyName = L"DeviceDesc"; break;
case DevicePropertyLocationInformation:
RegistryPropertyName = L"LocationInformation"; break;
case DevicePropertyUINumber:
RegistryPropertyName = L"UINumber"; break;
default:
RegistryPropertyName = NULL; break;
}
@ -224,23 +219,23 @@ IoGetDeviceProperty(
case DevicePropertyBootConfiguration:
Length = 0;
if (DeviceNode->BootResourceList->Count != 0)
if (DeviceNode->BootResources->Count != 0)
{
Length = sizeof(CM_RESOURCE_LIST) +
((DeviceNode->BootResourceList->Count - 1) * sizeof(CM_FULL_RESOURCE_DESCRIPTOR));
((DeviceNode->BootResources->Count - 1) * sizeof(CM_FULL_RESOURCE_DESCRIPTOR));
}
Data = &DeviceNode->BootResourceList;
Data = &DeviceNode->BootResources;
break;
/* FIXME: use a translated boot configuration instead */
case DevicePropertyBootConfigurationTranslated:
Length = 0;
if (DeviceNode->BootResourceList->Count != 0)
if (DeviceNode->BootResources->Count != 0)
{
Length = sizeof(CM_RESOURCE_LIST) +
((DeviceNode->BootResourceList->Count - 1) * sizeof(CM_FULL_RESOURCE_DESCRIPTOR));
((DeviceNode->BootResources->Count - 1) * sizeof(CM_FULL_RESOURCE_DESCRIPTOR));
}
Data = &DeviceNode->BootResourceList;
Data = &DeviceNode->BootResources;
break;
case DevicePropertyEnumeratorName:
@ -395,7 +390,7 @@ IopGetSystemPowerDeviceObject(PDEVICE_OBJECT *DeviceObject)
if (PopSystemPowerDeviceNode)
{
KeAcquireSpinLock(&IopDeviceTreeLock, &OldIrql);
*DeviceObject = PopSystemPowerDeviceNode->Pdo;
*DeviceObject = PopSystemPowerDeviceNode->PhysicalDeviceObject;
KeReleaseSpinLock(&IopDeviceTreeLock, OldIrql);
return STATUS_SUCCESS;
@ -452,7 +447,7 @@ IopCreateDeviceNode(PDEVICE_NODE ParentNode,
IopDeviceNodeSetFlag(Node, DNF_LEGACY_DRIVER);
}
Node->Pdo = PhysicalDeviceObject;
Node->PhysicalDeviceObject = PhysicalDeviceObject;
PhysicalDeviceObject->DeviceObjectExtension->DeviceNode = Node;
@ -484,9 +479,9 @@ IopFreeDeviceNode(PDEVICE_NODE DeviceNode)
KeAcquireSpinLock(&IopDeviceTreeLock, &OldIrql);
ASSERT(DeviceNode->Pdo);
ASSERT(DeviceNode->PhysicalDeviceObject);
ObDereferenceObject(DeviceNode->Pdo);
ObDereferenceObject(DeviceNode->PhysicalDeviceObject);
/* Unlink from parent if it exists */
@ -513,29 +508,24 @@ IopFreeDeviceNode(PDEVICE_NODE DeviceNode)
RtlFreeUnicodeString(&DeviceNode->ServiceName);
if (DeviceNode->CapabilityFlags)
if (DeviceNode->ResourceList)
{
ExFreePool(DeviceNode->CapabilityFlags);
ExFreePool(DeviceNode->ResourceList);
}
if (DeviceNode->CmResourceList)
if (DeviceNode->ResourceListTranslated)
{
ExFreePool(DeviceNode->CmResourceList);
ExFreePool(DeviceNode->ResourceListTranslated);
}
if (DeviceNode->BootResourceList)
if (DeviceNode->ResourceRequirements)
{
ExFreePool(DeviceNode->BootResourceList);
ExFreePool(DeviceNode->ResourceRequirements);
}
if (DeviceNode->ResourceRequirementsList)
if (DeviceNode->BootResources)
{
ExFreePool(DeviceNode->ResourceRequirementsList);
}
if (DeviceNode->BusInformation)
{
ExFreePool(DeviceNode->BusInformation);
ExFreePool(DeviceNode->BootResources);
}
ExFreePool(DeviceNode);
@ -607,52 +597,6 @@ IopInitiatePnpIrp(
}
NTSTATUS
IopQueryCapabilities(
PDEVICE_OBJECT Pdo,
PDEVICE_CAPABILITIES *Capabilities)
{
IO_STATUS_BLOCK IoStatusBlock;
PDEVICE_CAPABILITIES Caps;
IO_STACK_LOCATION Stack;
NTSTATUS Status;
DPRINT("Sending IRP_MN_QUERY_CAPABILITIES to device stack\n");
*Capabilities = NULL;
Caps = ExAllocatePool(PagedPool, sizeof(DEVICE_CAPABILITIES));
if (!Caps)
{
return STATUS_INSUFFICIENT_RESOURCES;
}
RtlZeroMemory(Caps, sizeof(DEVICE_CAPABILITIES));
Caps->Size = sizeof(DEVICE_CAPABILITIES);
Caps->Version = 1;
Caps->Address = -1;
Caps->UINumber = -1;
Stack.Parameters.DeviceCapabilities.Capabilities = Caps;
Status = IopInitiatePnpIrp(
Pdo,
&IoStatusBlock,
IRP_MN_QUERY_CAPABILITIES,
&Stack);
if (NT_SUCCESS(Status))
{
*Capabilities = Caps;
}
else
{
DPRINT("IopInitiatePnpIrp() failed (Status %x)\n", Status);
}
return Status;
}
NTSTATUS
IopTraverseDeviceTreeNode(
PDEVICETREE_TRAVERSE_CONTEXT Context)
@ -826,9 +770,9 @@ IopSetDeviceInstanceData(HANDLE InstanceKey,
if (NT_SUCCESS(Status))
{
/* Set 'BootConfig' value */
if (DeviceNode->BootResourceList != NULL)
if (DeviceNode->BootResources != NULL)
{
ResCount = DeviceNode->BootResourceList->Count;
ResCount = DeviceNode->BootResources->Count;
if (ResCount != 0)
{
ListSize = sizeof(CM_RESOURCE_LIST) +
@ -840,14 +784,14 @@ IopSetDeviceInstanceData(HANDLE InstanceKey,
&KeyName,
0,
REG_RESOURCE_LIST,
&DeviceNode->BootResourceList,
&DeviceNode->BootResources,
ListSize);
}
}
/* Set 'BasicConfigVector' value */
if (DeviceNode->ResourceRequirementsList != NULL &&
DeviceNode->ResourceRequirementsList->ListSize != 0)
if (DeviceNode->ResourceRequirements != NULL &&
DeviceNode->ResourceRequirements->ListSize != 0)
{
RtlInitUnicodeString(&KeyName,
L"BasicConfigVector");
@ -855,8 +799,8 @@ IopSetDeviceInstanceData(HANDLE InstanceKey,
&KeyName,
0,
REG_RESOURCE_REQUIREMENTS_LIST,
&DeviceNode->ResourceRequirementsList,
DeviceNode->ResourceRequirementsList->ListSize);
&DeviceNode->ResourceRequirements,
DeviceNode->ResourceRequirements->ListSize);
}
NtClose(LogConfKey);
@ -903,9 +847,10 @@ IopActionInterrogateDeviceStack(
USHORT TotalLength;
HANDLE InstanceKey = NULL;
UNICODE_STRING ValueName;
DEVICE_CAPABILITIES DeviceCapabilities;
DPRINT("IopActionInterrogateDeviceStack(%p, %p)\n", DeviceNode, Context);
DPRINT("PDO %x\n", DeviceNode->Pdo);
DPRINT("PDO %x\n", DeviceNode->PhysicalDeviceObject);
ParentDeviceNode = (PDEVICE_NODE)Context;
@ -941,7 +886,7 @@ IopActionInterrogateDeviceStack(
Stack.Parameters.QueryId.IdType = BusQueryDeviceID;
Status = IopInitiatePnpIrp(
DeviceNode->Pdo,
DeviceNode->PhysicalDeviceObject,
&IoStatusBlock,
IRP_MN_QUERY_ID,
&Stack);
@ -964,7 +909,7 @@ IopActionInterrogateDeviceStack(
Stack.Parameters.QueryId.IdType = BusQueryInstanceID;
Status = IopInitiatePnpIrp(
DeviceNode->Pdo,
DeviceNode->PhysicalDeviceObject,
&IoStatusBlock,
IRP_MN_QUERY_ID,
&Stack);
@ -984,16 +929,30 @@ IopActionInterrogateDeviceStack(
DPRINT("IopInitiatePnpIrp() failed (Status %x)\n", Status);
}
Status = IopQueryCapabilities(DeviceNode->Pdo, &DeviceNode->CapabilityFlags);
RtlZeroMemory(&DeviceCapabilities, sizeof(DEVICE_CAPABILITIES));
DeviceCapabilities.Size = sizeof(DEVICE_CAPABILITIES);
DeviceCapabilities.Version = 1;
DeviceCapabilities.Address = -1;
DeviceCapabilities.UINumber = -1;
Stack.Parameters.DeviceCapabilities.Capabilities = &DeviceCapabilities;
Status = IopInitiatePnpIrp(
DeviceNode->PhysicalDeviceObject,
&IoStatusBlock,
IRP_MN_QUERY_CAPABILITIES,
&Stack);
if (NT_SUCCESS(Status))
{
}
else
{
DPRINT("IopInitiatePnpIrp() failed (Status %x)\n", Status);
}
if (DeviceNode->CapabilityFlags != NULL &&
!DeviceNode->CapabilityFlags->UniqueID)
DeviceNode->CapabilityFlags = *(PULONG)((ULONG_PTR)&DeviceCapabilities + 4);
DeviceNode->Address = DeviceCapabilities.Address;
if (!DeviceCapabilities.UniqueID)
{
DPRINT("Instance ID is not unique\n");
/* FIXME: Add information from parent bus driver to InstancePath */
@ -1024,7 +983,6 @@ IopActionInterrogateDeviceStack(
}
if (DeviceNode->CapabilityFlags != NULL)
{
/* Set 'Capabilities' value */
RtlInitUnicodeString(&ValueName,
@ -1033,11 +991,11 @@ IopActionInterrogateDeviceStack(
&ValueName,
0,
REG_DWORD,
(PVOID)((ULONG_PTR)&DeviceNode->CapabilityFlags + 4),
(PVOID)&DeviceNode->CapabilityFlags,
sizeof(ULONG));
/* Set 'UINumber' value */
if (DeviceNode->CapabilityFlags->UINumber != (ULONG)-1)
if (DeviceCapabilities.UINumber != (ULONG)-1)
{
RtlInitUnicodeString(&ValueName,
L"UINumber");
@ -1045,7 +1003,7 @@ IopActionInterrogateDeviceStack(
&ValueName,
0,
REG_DWORD,
&DeviceNode->CapabilityFlags->UINumber,
&DeviceCapabilities.UINumber,
sizeof(ULONG));
}
}
@ -1054,7 +1012,7 @@ IopActionInterrogateDeviceStack(
Stack.Parameters.QueryId.IdType = BusQueryHardwareIDs;
Status = IopInitiatePnpIrp(
DeviceNode->Pdo,
DeviceNode->PhysicalDeviceObject,
&IoStatusBlock,
IRP_MN_QUERY_ID,
&Stack);
@ -1100,7 +1058,7 @@ IopActionInterrogateDeviceStack(
Stack.Parameters.QueryId.IdType = BusQueryCompatibleIDs;
Status = IopInitiatePnpIrp(
DeviceNode->Pdo,
DeviceNode->PhysicalDeviceObject,
&IoStatusBlock,
IRP_MN_QUERY_ID,
&Stack);
@ -1148,7 +1106,7 @@ IopActionInterrogateDeviceStack(
Stack.Parameters.QueryDeviceText.DeviceTextType = DeviceTextDescription;
Stack.Parameters.QueryDeviceText.LocaleId = 0; /* FIXME */
Status = IopInitiatePnpIrp(
DeviceNode->Pdo,
DeviceNode->PhysicalDeviceObject,
&IoStatusBlock,
IRP_MN_QUERY_DEVICE_TEXT,
&Stack);
@ -1177,7 +1135,7 @@ IopActionInterrogateDeviceStack(
Stack.Parameters.QueryDeviceText.DeviceTextType = DeviceTextLocationInformation;
Stack.Parameters.QueryDeviceText.LocaleId = 0; // FIXME
Status = IopInitiatePnpIrp(
DeviceNode->Pdo,
DeviceNode->PhysicalDeviceObject,
&IoStatusBlock,
IRP_MN_QUERY_DEVICE_TEXT,
&Stack);
@ -1205,56 +1163,68 @@ IopActionInterrogateDeviceStack(
DPRINT("Sending IRP_MN_QUERY_BUS_INFORMATION to device stack\n");
Status = IopInitiatePnpIrp(
DeviceNode->Pdo,
DeviceNode->PhysicalDeviceObject,
&IoStatusBlock,
IRP_MN_QUERY_BUS_INFORMATION,
NULL);
if (NT_SUCCESS(Status))
{
DeviceNode->BusInformation =
PPNP_BUS_INFORMATION BusInformation =
(PPNP_BUS_INFORMATION)IoStatusBlock.Information;
DeviceNode->BusNumber = BusInformation->BusNumber;
DeviceNode->InterfaceType = BusInformation->LegacyBusType;
memcpy(&DeviceNode->BusTypeGuid,
&BusInformation->BusTypeGuid,
sizeof(GUID));
ExFreePool(BusInformation);
}
else
{
DPRINT("IopInitiatePnpIrp() failed (Status %x)\n", Status);
DeviceNode->BusInformation = NULL;
DeviceNode->BusNumber = -1;
DeviceNode->InterfaceType = -1;
memset(&DeviceNode->BusTypeGuid,
0,
sizeof(GUID));
}
DPRINT("Sending IRP_MN_QUERY_RESOURCES to device stack\n");
Status = IopInitiatePnpIrp(
DeviceNode->Pdo,
DeviceNode->PhysicalDeviceObject,
&IoStatusBlock,
IRP_MN_QUERY_RESOURCES,
NULL);
if (NT_SUCCESS(Status))
{
DeviceNode->BootResourceList =
DeviceNode->BootResources =
(PCM_RESOURCE_LIST)IoStatusBlock.Information;
DeviceNode->Flags |= DNF_HAS_BOOT_CONFIG;
}
else
{
DPRINT("IopInitiatePnpIrp() failed (Status %x)\n", Status);
DeviceNode->BootResourceList = NULL;
DeviceNode->BootResources = NULL;
}
DPRINT("Sending IRP_MN_QUERY_RESOURCE_REQUIREMENTS to device stack\n");
Status = IopInitiatePnpIrp(
DeviceNode->Pdo,
DeviceNode->PhysicalDeviceObject,
&IoStatusBlock,
IRP_MN_QUERY_RESOURCE_REQUIREMENTS,
NULL);
if (NT_SUCCESS(Status))
{
DeviceNode->ResourceRequirementsList =
DeviceNode->ResourceRequirements =
(PIO_RESOURCE_REQUIREMENTS_LIST)IoStatusBlock.Information;
}
else
{
DPRINT("IopInitiatePnpIrp() failed (Status %x)\n", Status);
DeviceNode->ResourceRequirementsList = NULL;
DeviceNode->ResourceRequirements = NULL;
}
@ -1574,7 +1544,7 @@ IopInvalidateDeviceRelations(
Stack.Parameters.QueryDeviceRelations.Type = Type/*BusRelations*/;
Status = IopInitiatePnpIrp(
DeviceNode->Pdo,
DeviceNode->PhysicalDeviceObject,
&IoStatusBlock,
IRP_MN_QUERY_DEVICE_RELATIONS,
&Stack);
@ -1733,11 +1703,11 @@ PnpInit(VOID)
KEBUGCHECKEX(PHASE1_INITIALIZATION_FAILED, Status, 0, 0, 0);
}
IopRootDeviceNode->Pdo->Flags |= DO_BUS_ENUMERATED_DEVICE;
IopRootDeviceNode->PhysicalDeviceObject->Flags |= DO_BUS_ENUMERATED_DEVICE;
PnpRootDriverEntry(IopRootDriverObject, NULL);
IopRootDriverObject->DriverExtension->AddDevice(
IopRootDriverObject,
IopRootDeviceNode->Pdo);
IopRootDeviceNode->PhysicalDeviceObject);
}
/* EOF */