mirror of
https://github.com/reactos/reactos.git
synced 2025-08-05 07:32:57 +00:00
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 svn path=/trunk/; revision=19054
This commit is contained in:
parent
1608efe156
commit
a485607cfc
2 changed files with 15 additions and 38 deletions
|
@ -68,6 +68,8 @@ IntVideoPortAddDevice(
|
||||||
IN PDEVICE_OBJECT PhysicalDeviceObject)
|
IN PDEVICE_OBJECT PhysicalDeviceObject)
|
||||||
{
|
{
|
||||||
PVIDEO_PORT_DRIVER_EXTENSION DriverExtension;
|
PVIDEO_PORT_DRIVER_EXTENSION DriverExtension;
|
||||||
|
PDEVICE_OBJECT DeviceObject;
|
||||||
|
NTSTATUS Status;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Get the initialization data we saved in VideoPortInitialize.
|
* Get the initialization data we saved in VideoPortInitialize.
|
||||||
|
@ -79,11 +81,20 @@ IntVideoPortAddDevice(
|
||||||
* Create adapter device object.
|
* Create adapter device object.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
return IntVideoPortCreateAdapterDeviceObject(
|
Status = IntVideoPortCreateAdapterDeviceObject(
|
||||||
DriverObject,
|
DriverObject,
|
||||||
DriverExtension,
|
DriverExtension,
|
||||||
PhysicalDeviceObject,
|
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;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -27,6 +27,7 @@
|
||||||
|
|
||||||
ULONG CsrssInitialized = FALSE;
|
ULONG CsrssInitialized = FALSE;
|
||||||
PKPROCESS Csrss = NULL;
|
PKPROCESS Csrss = NULL;
|
||||||
|
ULONG VideoPortDeviceNumber = 0;
|
||||||
|
|
||||||
/* PRIVATE FUNCTIONS **********************************************************/
|
/* PRIVATE FUNCTIONS **********************************************************/
|
||||||
|
|
||||||
|
@ -128,41 +129,6 @@ IntVideoPortDeferredRoutine(
|
||||||
((PMINIPORT_DPC_ROUTINE)SystemArgument1)(HwDeviceExtension, SystemArgument2);
|
((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
|
NTSTATUS NTAPI
|
||||||
IntVideoPortCreateAdapterDeviceObject(
|
IntVideoPortCreateAdapterDeviceObject(
|
||||||
IN PDRIVER_OBJECT DriverObject,
|
IN PDRIVER_OBJECT DriverObject,
|
||||||
|
@ -186,7 +152,7 @@ IntVideoPortCreateAdapterDeviceObject(
|
||||||
* object names and symlinks.
|
* object names and symlinks.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
DeviceNumber = IntVideoPortAllocateDeviceNumber();
|
DeviceNumber = VideoPortDeviceNumber++;
|
||||||
if (DeviceNumber == 0xFFFFFFFF)
|
if (DeviceNumber == 0xFFFFFFFF)
|
||||||
{
|
{
|
||||||
DPRINT("Can't find free device number\n");
|
DPRINT("Can't find free device number\n");
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue