Author: tkreuzer Date: Sat Oct 23 21:59:21 2010 New Revision: 49245
URL: http://svn.reactos.org/svn/reactos?rev=49245&view=rev Log: [WIN32K] - Remove a wrong ASSERT - Improve EngLoadImageEx to correctly handle the path and optional dll extension. - Get rid of EngLoadDriver
Modified: branches/reactos-yarotows/subsystems/win32/win32k/eng/device.c branches/reactos-yarotows/subsystems/win32/win32k/eng/ldevobj.c branches/reactos-yarotows/subsystems/win32/win32k/eng/pdevobj.c branches/reactos-yarotows/subsystems/win32/win32k/eng/surface.c branches/reactos-yarotows/subsystems/win32/win32k/include/ldevobj.h
Modified: branches/reactos-yarotows/subsystems/win32/win32k/eng/device.c URL: http://svn.reactos.org/svn/reactos/branches/reactos-yarotows/subsystems/win3... ============================================================================== --- branches/reactos-yarotows/subsystems/win32/win32k/eng/device.c [iso-8859-1] (original) +++ branches/reactos-yarotows/subsystems/win32/win32k/eng/device.c [iso-8859-1] Sat Oct 23 21:59:21 2010 @@ -122,7 +122,7 @@ { DPRINT1("trying driver: %ls\n", pwsz); /* Try to load the display driver */ - pldev = EngLoadDriver(pwsz, LDEV_DEVICE_DISPLAY); + pldev = EngLoadImageEx(pwsz, LDEV_DEVICE_DISPLAY); if (!pldev) { DPRINT1("Could not load driver: '%ls'\n", pwsz);
Modified: branches/reactos-yarotows/subsystems/win32/win32k/eng/ldevobj.c URL: http://svn.reactos.org/svn/reactos/branches/reactos-yarotows/subsystems/win3... ============================================================================== --- branches/reactos-yarotows/subsystems/win32/win32k/eng/ldevobj.c [iso-8859-1] (original) +++ branches/reactos-yarotows/subsystems/win32/win32k/eng/ldevobj.c [iso-8859-1] Sat Oct 23 21:59:21 2010 @@ -185,8 +185,9 @@
if (!NT_SUCCESS(Status)) { - DPRINT1("Failed to load a GDI driver: '%S'\n", pstrPathName->Buffer); - ASSERT(FALSE); + DPRINT1("Failed to load a GDI driver: '%S', Status = 0x%lx\n", + pstrPathName->Buffer, Status); + /* Free the allocated memory */ ExFreePoolWithTag(pDriverInfo, TAG_LDEV); return FALSE; @@ -322,13 +323,47 @@ LPWSTR pwszDriverName, ULONG ldevtype) { + WCHAR acwBuffer[MAX_PATH]; PLDEVOBJ pldev; UNICODE_STRING strDriverName; + ULONG cwcLength; + LPWSTR pwsz;
DPRINT("EngLoadImageEx(%ls, %ld)\n", pwszDriverName, ldevtype); - - /* Initialize the driver name */ - RtlInitUnicodeString(&strDriverName, pwszDriverName); + ASSERT(pwszDriverName); + + /* Initialize buffer for the the driver name */ + RtlInitEmptyUnicodeString(&strDriverName, acwBuffer, sizeof(acwBuffer)); + + /* Start path with systemroot */ + RtlAppendUnicodeToString(&strDriverName, L"\SystemRoot\System32\"); + + /* Get Length of given string */ + cwcLength = wcslen(pwszDriverName); + + /* Check if we have a system32 path given */ + pwsz = pwszDriverName + cwcLength; + while (pwsz > pwszDriverName) + { + if (_wcsnicmp(pwsz, L"\system32\", 10) == 0) + { + /* Driver name starts after system32 */ + pwsz += 10; + break; + } + pwsz--; + } + + /* Append the driver name */ + RtlAppendUnicodeToString(&strDriverName, pwsz); + + /* MSDN says "The driver must include this suffix in the pwszDriver string." + But in fact it's optional. */ + if (_wcsnicmp(pwszDriverName + cwcLength - 4, L".dll", 4) != 0) + { + /* Append the .dll suffix */ + RtlAppendUnicodeToString(&strDriverName, L".dll"); + }
/* Lock loader */ EngAcquireSemaphore(ghsemLDEVList); @@ -339,7 +374,7 @@ /* Check if the ldev is associated with a file */ if (pldev->pGdiDriverInfo) { - /* Check for match */ + /* Check for match (case insensative) */ if (RtlEqualUnicodeString(&pldev->pGdiDriverInfo->DriverName, &strDriverName, 1)) { /* Image found in LDEV list */ @@ -399,25 +434,6 @@ return pldev; }
-PLDEVOBJ -APIENTRY -EngLoadDriver( - LPWSTR pwszDriverName, - ULONG ldevtype) -{ - WCHAR acwBuffer[MAX_PATH]; - PLDEVOBJ pldev; - - ASSERT(pwszDriverName); - DPRINT("EngLoadDriver(%ls, %ld)\n", pwszDriverName, ldevtype); - - /* Create a full file name */ // FIXME: do better than that - swprintf(acwBuffer, L"\SystemRoot\System32\%ls.dll", pwszDriverName); - - pldev = EngLoadImageEx(acwBuffer, ldevtype); - - return pldev; -}
/** Exported functions ********************************************************/
Modified: branches/reactos-yarotows/subsystems/win32/win32k/eng/pdevobj.c URL: http://svn.reactos.org/svn/reactos/branches/reactos-yarotows/subsystems/win3... ============================================================================== --- branches/reactos-yarotows/subsystems/win32/win32k/eng/pdevobj.c [iso-8859-1] (original) +++ branches/reactos-yarotows/subsystems/win32/win32k/eng/pdevobj.c [iso-8859-1] Sat Oct 23 21:59:21 2010 @@ -261,7 +261,7 @@ }
/* Try to get a diplay driver */ - ppdev->pldev = EngLoadDriver(pdm->dmDeviceName, LDEV_DEVICE_DISPLAY); + ppdev->pldev = EngLoadImageEx(pdm->dmDeviceName, LDEV_DEVICE_DISPLAY); if (!ppdev->pldev) { DPRINT1("Could not load display driver '%ls'\n",
Modified: branches/reactos-yarotows/subsystems/win32/win32k/eng/surface.c URL: http://svn.reactos.org/svn/reactos/branches/reactos-yarotows/subsystems/win3... ============================================================================== --- branches/reactos-yarotows/subsystems/win32/win32k/eng/surface.c [iso-8859-1] (original) +++ branches/reactos-yarotows/subsystems/win32/win32k/eng/surface.c [iso-8859-1] Sat Oct 23 21:59:21 2010 @@ -173,7 +173,7 @@ pso->iType = iType; pso->iUniq = InterlockedIncrement((PLONG)&giUniqueSurface);
- /* Assign a default palette amd increment its reference count */ + /* Assign a default palette and increment its reference count */ psurf->ppal = appalSurfaceDefault[iFormat]; GDIOBJ_IncrementShareCount(&psurf->ppal->BaseObject); }
Modified: branches/reactos-yarotows/subsystems/win32/win32k/include/ldevobj.h URL: http://svn.reactos.org/svn/reactos/branches/reactos-yarotows/subsystems/win3... ============================================================================== --- branches/reactos-yarotows/subsystems/win32/win32k/include/ldevobj.h [iso-8859-1] (original) +++ branches/reactos-yarotows/subsystems/win32/win32k/include/ldevobj.h [iso-8859-1] Sat Oct 23 21:59:21 2010 @@ -69,7 +69,7 @@
PLDEVOBJ APIENTRY -EngLoadDriver( +EngLoadImageEx( LPWSTR pwszDriverName, ULONG ldevtype);