Patch by Filip Navara/Hervé Poussineau:
- Simplify device number allocation
- Check the case of a NULL Pdo if we're called by a legacy driver
Modified: trunk/reactos/drivers/video/videoprt/dispatch.c
Modified: trunk/reactos/drivers/video/videoprt/videoprt.c
_____
Modified: trunk/reactos/drivers/video/videoprt/dispatch.c
--- trunk/reactos/drivers/video/videoprt/dispatch.c 2005-11-08
08:56:41 UTC (rev 19053)
+++ trunk/reactos/drivers/video/videoprt/dispatch.c 2005-11-08
16:24:58 UTC (rev 19054)
@@ -68,6 +68,8 @@
IN PDEVICE_OBJECT PhysicalDeviceObject)
{
PVIDEO_PORT_DRIVER_EXTENSION DriverExtension;
+ PDEVICE_OBJECT DeviceObject;
+ NTSTATUS Status;
/*
* Get the initialization data we saved in VideoPortInitialize.
@@ -79,11 +81,20 @@
* Create adapter device object.
*/
- return IntVideoPortCreateAdapterDeviceObject(
+ Status = IntVideoPortCreateAdapterDeviceObject(
DriverObject,
DriverExtension,
PhysicalDeviceObject,
- NULL);
+ &DeviceObject);
+ if (!NT_SUCCESS(Status))
+ return Status;
+
+ if (PhysicalDeviceObject == NULL)
+ {
+ /* We will never have a IRP_MJ_PNP/IRP_MN_START_DEVICE Irp */
+ Status = IntVideoPortFindAdapter(DriverObject, DriverExtension,
DeviceObject);
+ }
+ return Status;
}
/*
_____
Modified: trunk/reactos/drivers/video/videoprt/videoprt.c
--- trunk/reactos/drivers/video/videoprt/videoprt.c 2005-11-08
08:56:41 UTC (rev 19053)
+++ trunk/reactos/drivers/video/videoprt/videoprt.c 2005-11-08
16:24:58 UTC (rev 19054)
@@ -27,6 +27,7 @@
ULONG CsrssInitialized = FALSE;
PKPROCESS Csrss = NULL;
+ULONG VideoPortDeviceNumber = 0;
/* PRIVATE FUNCTIONS
**********************************************************/
@@ -128,41 +129,6 @@
((PMINIPORT_DPC_ROUTINE)SystemArgument1)(HwDeviceExtension,
SystemArgument2);
}
-ULONG NTAPI
-IntVideoPortAllocateDeviceNumber(VOID)
-{
- NTSTATUS Status;
- ULONG DeviceNumber;
- WCHAR SymlinkBuffer[20];
- UNICODE_STRING SymlinkName;
-
- for (DeviceNumber = 0;;)
- {
- OBJECT_ATTRIBUTES Obj;
- HANDLE ObjHandle;
-
- swprintf(SymlinkBuffer, L"\\??\\DISPLAY%lu", DeviceNumber + 1);
- RtlInitUnicodeString(&SymlinkName, SymlinkBuffer);
- InitializeObjectAttributes(&Obj, &SymlinkName, 0, NULL, NULL);
- Status = ZwOpenSymbolicLinkObject(&ObjHandle, GENERIC_READ,
&Obj);
- if (NT_SUCCESS(Status))
- {
- ZwClose(ObjHandle);
- DeviceNumber++;
- continue;
- }
- else if (Status == STATUS_OBJECT_NAME_NOT_FOUND)
- break;
- else
- {
- DPRINT1("ZwOpenSymbolicLinkObject() returned unexpected
status: 0x%08lx\n", Status);
- return 0xFFFFFFFF;
- }
- }
-
- return DeviceNumber;
-}
-
NTSTATUS NTAPI
IntVideoPortCreateAdapterDeviceObject(
IN PDRIVER_OBJECT DriverObject,
@@ -186,7 +152,7 @@
* object names and symlinks.
*/
- DeviceNumber = IntVideoPortAllocateDeviceNumber();
+ DeviceNumber = VideoPortDeviceNumber++;
if (DeviceNumber == 0xFFFFFFFF)
{
DPRINT("Can't find free device number\n");
Show replies by date