From 61012eb544ebb12ffe878376af8c700ed6577cf0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herm=C3=A8s=20B=C3=A9lusca-Ma=C3=AFto?= Date: Fri, 9 Jun 2023 23:17:13 +0200 Subject: [PATCH] [XBOXVMP] Fix in VideoPortGetAccessRanges call: missing Slot parameter. Contrary to what is (badly) written on MSDN, this parameter is *mandatory* when the ranges looked for are on a PCI adapter. Detected when testing with MS Windows' videoprt.sys on XBOX emulator; thanks to Simone Lombardo for assistance! --- win32ss/drivers/miniport/xboxvmp/xboxvmp.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/win32ss/drivers/miniport/xboxvmp/xboxvmp.c b/win32ss/drivers/miniport/xboxvmp/xboxvmp.c index 3ead664dda109..5cf76e08b129a 100644 --- a/win32ss/drivers/miniport/xboxvmp/xboxvmp.c +++ b/win32ss/drivers/miniport/xboxvmp/xboxvmp.c @@ -61,18 +61,20 @@ XboxVmpFindAdapter( OUT PUCHAR Again) { PXBOXVMP_DEVICE_EXTENSION XboxVmpDeviceExtension; - VIDEO_ACCESS_RANGE AccessRanges[3]; VP_STATUS Status; + VIDEO_ACCESS_RANGE AccessRanges[2]; USHORT VendorId = 0x10DE; /* NVIDIA Corporation */ USHORT DeviceId = 0x02A0; /* NV2A XGPU */ + ULONG Slot = 0; TRACE_(IHVVIDEO, "XboxVmpFindAdapter\n"); XboxVmpDeviceExtension = (PXBOXVMP_DEVICE_EXTENSION)HwDeviceExtension; - Status = VideoPortGetAccessRanges(HwDeviceExtension, 0, NULL, 3, AccessRanges, - &VendorId, &DeviceId, NULL); - + VideoPortZeroMemory(&AccessRanges, sizeof(AccessRanges)); + Status = VideoPortGetAccessRanges(HwDeviceExtension, 0, NULL, + RTL_NUMBER_OF(AccessRanges), AccessRanges, + &VendorId, &DeviceId, &Slot); if (Status == NO_ERROR) { XboxVmpDeviceExtension->PhysControlStart = AccessRanges[0].RangeStart;