Bug fixes to win32k

svn path=/trunk/; revision=1246
This commit is contained in:
Phillip Susi 2000-07-07 01:18:04 +00:00
parent 418efd5de8
commit 96e4bf5c1f

View file

@ -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 * GDI Driver support routines
* (mostly swiped from Wine) * (mostly swiped from Wine)
@ -16,8 +16,8 @@
#include <ddk/winddi.h> #include <ddk/winddi.h>
#include <ddk/ntddvid.h> #include <ddk/ntddvid.h>
//#define NDEBUG #define NDEBUG
//#include "../../ntoskrnl/include/internal/debug.h" #include <debug.h>
typedef struct _GRAPHICS_DRIVER typedef struct _GRAPHICS_DRIVER
{ {
@ -28,11 +28,12 @@ typedef struct _GRAPHICS_DRIVER
} GRAPHICS_DRIVER, *PGRAPHICS_DRIVER; } GRAPHICS_DRIVER, *PGRAPHICS_DRIVER;
static PGRAPHICS_DRIVER DriverList; static PGRAPHICS_DRIVER DriverList;
static PGRAPHICS_DRIVER GenericDriver; static PGRAPHICS_DRIVER GenericDriver = 0;
BOOL DRIVER_RegisterDriver(LPCWSTR Name, PGD_ENABLEDRIVER EnableDriver) BOOL DRIVER_RegisterDriver(LPCWSTR Name, PGD_ENABLEDRIVER EnableDriver)
{ {
PGRAPHICS_DRIVER Driver = ExAllocatePool(NonPagedPool, sizeof(*Driver)); PGRAPHICS_DRIVER Driver = ExAllocatePool(NonPagedPool, sizeof(*Driver));
DPRINT( "DRIVER_RegisterDriver( Name: %S )\n", Name );
if (!Driver) if (!Driver)
{ {
return FALSE; return FALSE;
@ -41,7 +42,7 @@ BOOL DRIVER_RegisterDriver(LPCWSTR Name, PGD_ENABLEDRIVER EnableDriver)
Driver->EnableDriver = EnableDriver; Driver->EnableDriver = EnableDriver;
if (Name) if (Name)
{ {
Driver->Name = ExAllocatePool(NonPagedPool, Driver->Name = ExAllocatePool(PagedPool,
(wcslen(Name) + 1) * sizeof(WCHAR)); (wcslen(Name) + 1) * sizeof(WCHAR));
wcscpy(Driver->Name, Name); wcscpy(Driver->Name, Name);
Driver->Next = DriverList; Driver->Next = DriverList;
@ -56,7 +57,6 @@ BOOL DRIVER_RegisterDriver(LPCWSTR Name, PGD_ENABLEDRIVER EnableDriver)
return FALSE; return FALSE;
} }
Driver->Name = NULL;
GenericDriver = Driver; GenericDriver = Driver;
return TRUE; return TRUE;
} }
@ -81,7 +81,7 @@ PGD_ENABLEDRIVER DRIVER_FindDDIDriver(LPCWSTR Name)
RtlInitUnicodeString (&DriverNameW, Name); RtlInitUnicodeString (&DriverNameW, Name);
ModuleObject = EngLoadImage(&DriverNameW); ModuleObject = EngLoadImage(&DriverNameW);
DRIVER_RegisterDriver( L"DISPLAY", ModuleObject->EntryPoint );
return (PGD_ENABLEDRIVER)ModuleObject->EntryPoint; return (PGD_ENABLEDRIVER)ModuleObject->EntryPoint;
} }
@ -208,7 +208,7 @@ HANDLE DRIVER_FindMPDriver(LPCWSTR Name)
DriverObject = ExAllocatePool(NonPagedPool,sizeof(DRIVER_OBJECT)); DriverObject = ExAllocatePool(NonPagedPool,sizeof(DRIVER_OBJECT));
if (DriverObject == NULL) if (DriverObject == NULL)
{ {
return STATUS_INSUFFICIENT_RESOURCES; return NULL;
} }
memset(DriverObject, 0, sizeof(DRIVER_OBJECT)); memset(DriverObject, 0, sizeof(DRIVER_OBJECT));
@ -272,14 +272,16 @@ INT DRIVER_ReferenceDriver (LPCWSTR Name)
while (Driver && Name) while (Driver && Name)
{ {
DPRINT( "Comparting %S to %S\n", Driver->Name, Name );
if (!_wcsicmp( Driver->Name, Name)) if (!_wcsicmp( Driver->Name, Name))
{ {
return ++Driver->ReferenceCount; return ++Driver->ReferenceCount;
} }
Driver = Driver->Next; Driver = Driver->Next;
} }
DPRINT( "Driver %S not found to reference, generic count: %d\n", Name, GenericDriver->ReferenceCount );
return GenericDriver ? ++GenericDriver->ReferenceCount : 0; assert( GenericDriver != 0 );
return ++GenericDriver->ReferenceCount;
} }
INT DRIVER_UnreferenceDriver (LPCWSTR Name) INT DRIVER_UnreferenceDriver (LPCWSTR Name)
@ -288,12 +290,14 @@ INT DRIVER_UnreferenceDriver (LPCWSTR Name)
while (Driver && Name) while (Driver && Name)
{ {
DPRINT( "Comparting %S to %S\n", Driver->Name, Name );
if (!_wcsicmp( Driver->Name, Name)) if (!_wcsicmp( Driver->Name, Name))
{ {
return --Driver->ReferenceCount; return --Driver->ReferenceCount;
} }
Driver = Driver->Next; Driver = Driver->Next;
} }
DPRINT( "Driver '%S' not found to dereference, generic count: %d\n", Name, GenericDriver->ReferenceCount );
return GenericDriver ? --GenericDriver->ReferenceCount : 0; assert( GenericDriver != 0 );
return --GenericDriver->ReferenceCount;
} }