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/win…
==============================================================================
--- 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/win…
==============================================================================
--- 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/win…
==============================================================================
--- 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/win…
==============================================================================
--- 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/win…
==============================================================================
--- 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);