From 9bcd5e12e8f3ab582e4f618b6c0288d5ff7ccdc8 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Wed, 3 Nov 2010 12:20:07 +0000 Subject: [PATCH] [WIN32K] - Make InitVideo return NTSTATUS and properly handle failure - Silence a DPRINT, improve a DPRINT svn path=/trunk/; revision=49458 --- reactos/subsystems/win32/win32k/eng/device.c | 4 ++-- .../subsystems/win32/win32k/ntuser/display.c | 22 ++++++++++++++----- .../subsystems/win32/win32k/ntuser/ntuser.c | 14 ++++++++---- 3 files changed, 28 insertions(+), 12 deletions(-) diff --git a/reactos/subsystems/win32/win32k/eng/device.c b/reactos/subsystems/win32/win32k/eng/device.c index a6c0e72a75c..730b2ffaa3a 100644 --- a/reactos/subsystems/win32/win32k/eng/device.c +++ b/reactos/subsystems/win32/win32k/eng/device.c @@ -52,7 +52,7 @@ EngpRegisterGraphicsDevice( PDEVMODEW pdm, pdmEnd; PLDEVOBJ pldev; - DPRINT1("EngpRegisterGraphicsDevice(%S)\n", pustrDeviceName->Buffer); + DPRINT("EngpRegisterGraphicsDevice(%wZ)\n", pustrDeviceName); /* Allocate a GRAPHICS_DEVICE structure */ pGraphicsDevice = ExAllocatePoolWithTag(PagedPool, @@ -71,7 +71,7 @@ EngpRegisterGraphicsDevice( &pDeviceObject); if (!NT_SUCCESS(Status)) { - DPRINT1("Could not open driver, 0x%lx\n", Status); + DPRINT1("Could not open driver %wZ, 0x%lx\n", pustrDeviceName, Status); ExFreePoolWithTag(pGraphicsDevice, GDITAG_GDEVICE); return NULL; } diff --git a/reactos/subsystems/win32/win32k/ntuser/display.c b/reactos/subsystems/win32/win32k/ntuser/display.c index 95f4aee4e7e..f5770a7ce2c 100644 --- a/reactos/subsystems/win32/win32k/ntuser/display.c +++ b/reactos/subsystems/win32/win32k/ntuser/display.c @@ -147,10 +147,9 @@ InitDisplayDriver( return pGraphicsDevice; } -BOOL -InitVideo( - PUNICODE_STRING pustrRegPath, - FLONG flags) +NTSTATUS +NTAPI +InitVideo() { ULONG iDevNum, iVGACompatible = -1, ulMaxObjectNumber = 0; WCHAR awcDeviceName[20]; @@ -160,8 +159,9 @@ InitVideo( ULONG cbValue; HKEY hkey; - DPRINT1("----------------------------- InitVideo() -------------------------------\n"); + DPRINT("----------------------------- InitVideo() -------------------------------\n"); + /* Open the key for the boot command line */ Status = RegOpenKey(L"\\REGISTRY\\MACHINE\\SYSTEM\\CurrentControlSet\\Control", &hkey); if (NT_SUCCESS(Status)) { @@ -185,7 +185,7 @@ InitVideo( if (!NT_SUCCESS(Status)) { DPRINT1("Could not open device registry key!\n"); - ASSERT(FALSE); + return Status; } /* Read the name of the VGA adapter */ @@ -220,7 +220,9 @@ InitVideo( continue; } + /* Initialize the driver for this device */ pGraphicsDevice = InitDisplayDriver(awcDeviceName, awcBuffer); + if (!pGraphicsDevice) continue; /* Check if this is the VGA adapter */ if (iDevNum == iVGACompatible) @@ -235,8 +237,16 @@ InitVideo( gpPrimaryGraphicsDevice = pGraphicsDevice; } + /* Close the device map registry key */ ZwClose(hkey); + /* Check if we had any success */ + if (!gpPrimaryGraphicsDevice) + { + DPRINT1("No usable display driver was found.\n"); + return STATUS_UNSUCCESSFUL; + } + if (gbBaseVideo) { if (gpVgaGraphicsDevice) diff --git a/reactos/subsystems/win32/win32k/ntuser/ntuser.c b/reactos/subsystems/win32/win32k/ntuser/ntuser.c index d05b893d0c7..d28aa33e2e6 100644 --- a/reactos/subsystems/win32/win32k/ntuser/ntuser.c +++ b/reactos/subsystems/win32/win32k/ntuser/ntuser.c @@ -82,8 +82,9 @@ InitUserImpl(VOID) return STATUS_SUCCESS; } -BOOL -InitVideo(ULONG); +NTSTATUS +NTAPI +InitVideo(); NTSTATUS NTAPI @@ -91,11 +92,16 @@ UserInitialize( HANDLE hPowerRequestEvent, HANDLE hMediaRequestEvent) { + NTSTATUS Status; + // Set W32PF_Flags |= (W32PF_READSCREENACCESSGRANTED | W32PF_IOWINSTA) // Create Object Directory,,, Looks like create workstation. "\\Windows\\WindowStations" // Create Event for Diconnect Desktop. - InitVideo(0); -// Initialize Video. + + /* Initialize Video. */ + Status = InitVideo(); + if (!NT_SUCCESS(Status)) return Status; + // { // DrvInitConsole. // DrvChangeDisplaySettings.