From 96e4bf5c1f13f867ff030d457ca1f750f8d7a161 Mon Sep 17 00:00:00 2001 From: Phillip Susi Date: Fri, 7 Jul 2000 01:18:04 +0000 Subject: [PATCH] Bug fixes to win32k svn path=/trunk/; revision=1246 --- reactos/subsys/win32k/misc/driver.c | 28 ++++++++++++++++------------ 1 file changed, 16 insertions(+), 12 deletions(-) diff --git a/reactos/subsys/win32k/misc/driver.c b/reactos/subsys/win32k/misc/driver.c index c497c1ebf9c..e39a151c180 100644 --- a/reactos/subsys/win32k/misc/driver.c +++ b/reactos/subsys/win32k/misc/driver.c @@ -1,4 +1,4 @@ -/* $Id: driver.c,v 1.12 2000/06/29 23:35:53 dwelch Exp $ +/* $Id: driver.c,v 1.13 2000/07/07 01:18:04 phreak Exp $ * * GDI Driver support routines * (mostly swiped from Wine) @@ -16,8 +16,8 @@ #include #include -//#define NDEBUG -//#include "../../ntoskrnl/include/internal/debug.h" +#define NDEBUG +#include typedef struct _GRAPHICS_DRIVER { @@ -28,11 +28,12 @@ typedef struct _GRAPHICS_DRIVER } GRAPHICS_DRIVER, *PGRAPHICS_DRIVER; static PGRAPHICS_DRIVER DriverList; -static PGRAPHICS_DRIVER GenericDriver; +static PGRAPHICS_DRIVER GenericDriver = 0; BOOL DRIVER_RegisterDriver(LPCWSTR Name, PGD_ENABLEDRIVER EnableDriver) { PGRAPHICS_DRIVER Driver = ExAllocatePool(NonPagedPool, sizeof(*Driver)); + DPRINT( "DRIVER_RegisterDriver( Name: %S )\n", Name ); if (!Driver) { return FALSE; @@ -41,7 +42,7 @@ BOOL DRIVER_RegisterDriver(LPCWSTR Name, PGD_ENABLEDRIVER EnableDriver) Driver->EnableDriver = EnableDriver; if (Name) { - Driver->Name = ExAllocatePool(NonPagedPool, + Driver->Name = ExAllocatePool(PagedPool, (wcslen(Name) + 1) * sizeof(WCHAR)); wcscpy(Driver->Name, Name); Driver->Next = DriverList; @@ -56,7 +57,6 @@ BOOL DRIVER_RegisterDriver(LPCWSTR Name, PGD_ENABLEDRIVER EnableDriver) return FALSE; } - Driver->Name = NULL; GenericDriver = Driver; return TRUE; } @@ -81,7 +81,7 @@ PGD_ENABLEDRIVER DRIVER_FindDDIDriver(LPCWSTR Name) RtlInitUnicodeString (&DriverNameW, Name); ModuleObject = EngLoadImage(&DriverNameW); - + DRIVER_RegisterDriver( L"DISPLAY", ModuleObject->EntryPoint ); return (PGD_ENABLEDRIVER)ModuleObject->EntryPoint; } @@ -208,7 +208,7 @@ HANDLE DRIVER_FindMPDriver(LPCWSTR Name) DriverObject = ExAllocatePool(NonPagedPool,sizeof(DRIVER_OBJECT)); if (DriverObject == NULL) { - return STATUS_INSUFFICIENT_RESOURCES; + return NULL; } memset(DriverObject, 0, sizeof(DRIVER_OBJECT)); @@ -272,14 +272,16 @@ INT DRIVER_ReferenceDriver (LPCWSTR Name) while (Driver && Name) { + DPRINT( "Comparting %S to %S\n", Driver->Name, Name ); if (!_wcsicmp( Driver->Name, Name)) { return ++Driver->ReferenceCount; } Driver = Driver->Next; } - - return GenericDriver ? ++GenericDriver->ReferenceCount : 0; + DPRINT( "Driver %S not found to reference, generic count: %d\n", Name, GenericDriver->ReferenceCount ); + assert( GenericDriver != 0 ); + return ++GenericDriver->ReferenceCount; } INT DRIVER_UnreferenceDriver (LPCWSTR Name) @@ -288,12 +290,14 @@ INT DRIVER_UnreferenceDriver (LPCWSTR Name) while (Driver && Name) { + DPRINT( "Comparting %S to %S\n", Driver->Name, Name ); if (!_wcsicmp( Driver->Name, Name)) { return --Driver->ReferenceCount; } Driver = Driver->Next; } - - return GenericDriver ? --GenericDriver->ReferenceCount : 0; + DPRINT( "Driver '%S' not found to dereference, generic count: %d\n", Name, GenericDriver->ReferenceCount ); + assert( GenericDriver != 0 ); + return --GenericDriver->ReferenceCount; }