mirror of
https://github.com/reactos/reactos.git
synced 2025-04-26 00:20:34 +00:00
[WIN32SS] Add missing code parts for monitor handling
- [VIDEOPRT] Add stub for IOCTL_VIDEO_ENUM_MONITOR_PDO.
- [WIN32SS:ENG] Add missing checks and comments.
- [WIN32SS:NTUSER] Add missing monitor handling and comments.
Addendum to 31827c43
. CORE-18197 CORE-11715
This commit is contained in:
parent
31827c43b6
commit
26b88af642
3 changed files with 57 additions and 8 deletions
|
@ -790,6 +790,11 @@ IntVideoPortDispatchDeviceControl(
|
||||||
Status = STATUS_NOT_IMPLEMENTED;
|
Status = STATUS_NOT_IMPLEMENTED;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case IOCTL_VIDEO_ENUM_MONITOR_PDO:
|
||||||
|
WARN_(VIDEOPRT, "- IOCTL_VIDEO_ENUM_MONITOR_PDO is UNIMPLEMENTED!\n");
|
||||||
|
Status = STATUS_NOT_IMPLEMENTED;
|
||||||
|
break;
|
||||||
|
|
||||||
case IOCTL_VIDEO_INIT_WIN32K_CALLBACKS:
|
case IOCTL_VIDEO_INIT_WIN32K_CALLBACKS:
|
||||||
INFO_(VIDEOPRT, "- IOCTL_VIDEO_INIT_WIN32K_CALLBACKS\n");
|
INFO_(VIDEOPRT, "- IOCTL_VIDEO_INIT_WIN32K_CALLBACKS\n");
|
||||||
Status = VideoPortInitWin32kCallbacks(DeviceObject,
|
Status = VideoPortInitWin32kCallbacks(DeviceObject,
|
||||||
|
|
|
@ -351,6 +351,19 @@ EngpRegisterGraphicsDevice(
|
||||||
// if (Win32kCallbacks.DualviewFlags & ???)
|
// if (Win32kCallbacks.DualviewFlags & ???)
|
||||||
pGraphicsDevice->PhysDeviceHandle = Win32kCallbacks.pPhysDeviceObject;
|
pGraphicsDevice->PhysDeviceHandle = Win32kCallbacks.pPhysDeviceObject;
|
||||||
|
|
||||||
|
/* FIXME: Enumerate children monitor devices for this video adapter
|
||||||
|
*
|
||||||
|
* - Force the adapter to re-enumerate its monitors:
|
||||||
|
* IoSynchronousInvalidateDeviceRelations(pdo, BusRelations)
|
||||||
|
*
|
||||||
|
* - Retrieve all monitor PDOs from VideoPrt:
|
||||||
|
* EngDeviceIoControl(0x%p, IOCTL_VIDEO_ENUM_MONITOR_PDO)
|
||||||
|
*
|
||||||
|
* - Initialize these fields and structures accordingly:
|
||||||
|
* pGraphicsDevice->dwMonCnt
|
||||||
|
* pGraphicsDevice->pvMonDev[0..dwMonCnt-1]
|
||||||
|
*/
|
||||||
|
|
||||||
/* Copy the device name */
|
/* Copy the device name */
|
||||||
RtlStringCbCopyNW(pGraphicsDevice->szNtDeviceName,
|
RtlStringCbCopyNW(pGraphicsDevice->szNtDeviceName,
|
||||||
sizeof(pGraphicsDevice->szNtDeviceName),
|
sizeof(pGraphicsDevice->szNtDeviceName),
|
||||||
|
@ -445,7 +458,7 @@ EngpFindGraphicsDevice(
|
||||||
|
|
||||||
if (pustrDevice && pustrDevice->Buffer)
|
if (pustrDevice && pustrDevice->Buffer)
|
||||||
{
|
{
|
||||||
/* Loop through the list of devices */
|
/* Find specified video adapter by name */
|
||||||
for (pGraphicsDevice = gpGraphicsDeviceFirst;
|
for (pGraphicsDevice = gpGraphicsDeviceFirst;
|
||||||
pGraphicsDevice;
|
pGraphicsDevice;
|
||||||
pGraphicsDevice = pGraphicsDevice->pNextGraphicsDevice)
|
pGraphicsDevice = pGraphicsDevice->pNextGraphicsDevice)
|
||||||
|
@ -457,10 +470,21 @@ EngpFindGraphicsDevice(
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (pGraphicsDevice)
|
||||||
|
{
|
||||||
|
/* Validate selected monitor number */
|
||||||
|
#if 0
|
||||||
|
if (iDevNum >= pGraphicsDevice->dwMonCnt)
|
||||||
|
pGraphicsDevice = NULL;
|
||||||
|
#else
|
||||||
|
/* FIXME: dwMonCnt not initialized, see EngpRegisterGraphicsDevice */
|
||||||
|
#endif
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
/* Loop through the list of devices */
|
/* Select video adapter by device number */
|
||||||
for (pGraphicsDevice = gpGraphicsDeviceFirst, i = 0;
|
for (pGraphicsDevice = gpGraphicsDeviceFirst, i = 0;
|
||||||
pGraphicsDevice && i < iDevNum;
|
pGraphicsDevice && i < iDevNum;
|
||||||
pGraphicsDevice = pGraphicsDevice->pNextGraphicsDevice, i++);
|
pGraphicsDevice = pGraphicsDevice->pNextGraphicsDevice, i++);
|
||||||
|
|
|
@ -237,6 +237,7 @@ UserEnumDisplayDevices(
|
||||||
DWORD dwFlags)
|
DWORD dwFlags)
|
||||||
{
|
{
|
||||||
PGRAPHICS_DEVICE pGraphicsDevice;
|
PGRAPHICS_DEVICE pGraphicsDevice;
|
||||||
|
PDEVICE_OBJECT pdo;
|
||||||
PWCHAR pHardwareId;
|
PWCHAR pHardwareId;
|
||||||
ULONG cbSize, dwLength;
|
ULONG cbSize, dwLength;
|
||||||
HKEY hkey;
|
HKEY hkey;
|
||||||
|
@ -284,9 +285,19 @@ UserEnumDisplayDevices(
|
||||||
pdispdev->DeviceID[0] = UNICODE_NULL;
|
pdispdev->DeviceID[0] = UNICODE_NULL;
|
||||||
|
|
||||||
/* Fill in DeviceID */
|
/* Fill in DeviceID */
|
||||||
if (pGraphicsDevice->PhysDeviceHandle != NULL)
|
if (!pustrDevice)
|
||||||
|
pdo = pGraphicsDevice->PhysDeviceHandle;
|
||||||
|
else
|
||||||
|
#if 0
|
||||||
|
pdo = pGraphicsDevice->pvMonDev[iDevNum].pdo;
|
||||||
|
#else
|
||||||
|
/* FIXME: pvMonDev not initialized, see EngpRegisterGraphicsDevice */
|
||||||
|
pdo = NULL;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
if (pdo != NULL)
|
||||||
{
|
{
|
||||||
Status = IoGetDeviceProperty(pGraphicsDevice->PhysDeviceHandle,
|
Status = IoGetDeviceProperty(pdo,
|
||||||
DevicePropertyHardwareID,
|
DevicePropertyHardwareID,
|
||||||
0,
|
0,
|
||||||
NULL,
|
NULL,
|
||||||
|
@ -303,7 +314,7 @@ UserEnumDisplayDevices(
|
||||||
return STATUS_INSUFFICIENT_RESOURCES;
|
return STATUS_INSUFFICIENT_RESOURCES;
|
||||||
}
|
}
|
||||||
|
|
||||||
Status = IoGetDeviceProperty(pGraphicsDevice->PhysDeviceHandle,
|
Status = IoGetDeviceProperty(pdo,
|
||||||
DevicePropertyHardwareID,
|
DevicePropertyHardwareID,
|
||||||
dwLength,
|
dwLength,
|
||||||
pHardwareId,
|
pHardwareId,
|
||||||
|
@ -319,10 +330,19 @@ UserEnumDisplayDevices(
|
||||||
* which usually is the longest one and unique enough */
|
* which usually is the longest one and unique enough */
|
||||||
RtlStringCbCopyW(pdispdev->DeviceID, sizeof(pdispdev->DeviceID), pHardwareId);
|
RtlStringCbCopyW(pdispdev->DeviceID, sizeof(pdispdev->DeviceID), pHardwareId);
|
||||||
|
|
||||||
/* For monitors it should be the first Hardware ID
|
if (pustrDevice)
|
||||||
* concatenated with the unique driver registry key */
|
{
|
||||||
|
/* For monitors it should be the first Hardware ID,
|
||||||
|
* which we already have obtained above,
|
||||||
|
* concatenated with the unique driver registry key */
|
||||||
|
|
||||||
|
RtlStringCbCatW(pdispdev->DeviceID, sizeof(pdispdev->DeviceID), L"\\");
|
||||||
|
|
||||||
|
/* FIXME: DevicePropertyDriverKeyName string should be appended */
|
||||||
|
pHardwareId[0] = UNICODE_NULL;
|
||||||
|
RtlStringCbCatW(pdispdev->DeviceID, sizeof(pdispdev->DeviceID), pHardwareId);
|
||||||
|
}
|
||||||
|
|
||||||
/* FIXME: Handle monitors! */
|
|
||||||
TRACE("Hardware ID: %ls\n", pdispdev->DeviceID);
|
TRACE("Hardware ID: %ls\n", pdispdev->DeviceID);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue