- Remove a wrong ASSERT
- Improve EngLoadImageEx to correctly handle the path and optional dll extension.
- Get rid of EngLoadDriver

svn path=/branches/reactos-yarotows/; revision=49245
This commit is contained in:
Timo Kreuzer 2010-10-23 21:59:21 +00:00
parent b0dd54e446
commit 548559a3d5
5 changed files with 44 additions and 28 deletions

View file

@ -122,7 +122,7 @@ EngpRegisterGraphicsDevice(
{
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);

View file

@ -185,8 +185,9 @@ LDEVOBJ_bLoadImage(
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 @@ EngLoadImageEx(
LPWSTR pwszDriverName,
ULONG ldevtype)
{
WCHAR acwBuffer[MAX_PATH];
PLDEVOBJ pldev;
UNICODE_STRING strDriverName;
ULONG cwcLength;
LPWSTR pwsz;
DPRINT("EngLoadImageEx(%ls, %ld)\n", pwszDriverName, ldevtype);
ASSERT(pwszDriverName);
/* Initialize the driver name */
RtlInitUnicodeString(&strDriverName, 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 @@ EngLoadImageEx(
/* 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 @@ leave:
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 ********************************************************/

View file

@ -261,7 +261,7 @@ EngpCreatePDEV(
}
/* 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",

View file

@ -173,7 +173,7 @@ SURFACE_AllocSurface(
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);
}

View file

@ -69,7 +69,7 @@ InitLDEVImpl();
PLDEVOBJ
APIENTRY
EngLoadDriver(
EngLoadImageEx(
LPWSTR pwszDriverName,
ULONG ldevtype);