[VIDEOPRT] Allow conflicting resources if this is the video base driver

CORE-18960
This commit is contained in:
Hervé Poussineau 2024-09-30 18:23:39 +02:00
parent 84f423f030
commit 08a6834075

View file

@ -24,8 +24,18 @@
#define NDEBUG #define NDEBUG
#include <debug.h> #include <debug.h>
extern BOOLEAN VpBaseVideo;
/* PRIVATE FUNCTIONS **********************************************************/ /* PRIVATE FUNCTIONS **********************************************************/
static BOOLEAN
IntIsVgaSaveDriver(
IN PVIDEO_PORT_DEVICE_EXTENSION DeviceExtension)
{
UNICODE_STRING VgaSave = RTL_CONSTANT_STRING(L"\\Driver\\VgaSave");
return RtlEqualUnicodeString(&VgaSave, &DeviceExtension->DriverObject->DriverName, TRUE);
}
NTSTATUS NTAPI NTSTATUS NTAPI
IntVideoPortGetLegacyResources( IntVideoPortGetLegacyResources(
IN PVIDEO_PORT_DRIVER_EXTENSION DriverExtension, IN PVIDEO_PORT_DRIVER_EXTENSION DriverExtension,
@ -994,6 +1004,16 @@ VideoPortVerifyAccessRanges(
ExFreePoolWithTag(ResourceList, TAG_VIDEO_PORT); ExFreePoolWithTag(ResourceList, TAG_VIDEO_PORT);
/* If VgaSave driver is conflicting and we don't explicitely want
* to use it, ignore the problem (because win32k will try to use
* this driver only if all other ones are failing). */
if (Status == STATUS_CONFLICTING_ADDRESSES &&
IntIsVgaSaveDriver(DeviceExtension) &&
!VpBaseVideo)
{
return NO_ERROR;
}
if (!NT_SUCCESS(Status) || ConflictDetected) if (!NT_SUCCESS(Status) || ConflictDetected)
return ERROR_INVALID_PARAMETER; return ERROR_INVALID_PARAMETER;
else else