From: Donat Enikeev Subject: [PATCH 3/9] user32: moving EnumDisplayDevices to drivers Message-Id: <1493066965-23464-1-git-send-email-donat@enikeev.net> Date: Mon, 24 Apr 2017 23:49:25 +0300 Based on Ken Thomases staging patches Signed-off-by: Donat Enikeev --- dlls/user32/driver.c | 15 +++++++++++++++ dlls/user32/misc.c | 34 +++++++++------------------------- dlls/user32/user_private.h | 1 + 3 files changed, 25 insertions(+), 25 deletions(-) diff --git a/dlls/user32/driver.c b/dlls/user32/driver.c index d59a2ea..bcc57a2 100644 --- a/dlls/user32/driver.c +++ b/dlls/user32/driver.c @@ -126,6 +126,7 @@ static const USER_DRIVER *load_driver(void) GET_USER_FUNC(UpdateClipboard); GET_USER_FUNC(ChangeDisplaySettingsEx); GET_USER_FUNC(EnumDisplayMonitors); + GET_USER_FUNC(EnumDisplayDevices); GET_USER_FUNC(EnumDisplaySettingsEx); GET_USER_FUNC(GetMonitorInfo); GET_USER_FUNC(CreateDesktopWindow); @@ -357,6 +358,12 @@ static BOOL CDECL nulldrv_EnumDisplayMonitors( HDC hdc, LPRECT rect, MONITORENUM return FALSE; } +static BOOL CDECL nulldrv_EnumDisplayDevices( LPCWSTR lpDevice, DWORD iDevNum, LPDISPLAY_DEVICEW lpDisplayDevice, + DWORD dwFlags ) +{ + return FALSE; +} + static BOOL CDECL nulldrv_EnumDisplaySettingsEx( LPCWSTR name, DWORD num, LPDEVMODEW mode, DWORD flags ) { return FALSE; @@ -527,6 +534,7 @@ static USER_DRIVER null_driver = /* display modes */ nulldrv_ChangeDisplaySettingsEx, nulldrv_EnumDisplayMonitors, + nulldrv_EnumDisplayDevices, nulldrv_EnumDisplaySettingsEx, nulldrv_GetMonitorInfo, /* windowing functions */ @@ -673,6 +681,12 @@ static BOOL CDECL loaderdrv_EnumDisplayMonitors( HDC hdc, LPRECT rect, MONITOREN return load_driver()->pEnumDisplayMonitors( hdc, rect, proc, lp ); } +static BOOL CDECL loaderdrv_EnumDisplayDevices( LPCWSTR lpDevice, DWORD iDevNum, + LPDISPLAY_DEVICEW lpDisplayDevice, DWORD dwFlags ) +{ + return load_driver()->pEnumDisplayDevices( lpDevice, iDevNum, lpDisplayDevice, dwFlags ); +} + static BOOL CDECL loaderdrv_EnumDisplaySettingsEx( LPCWSTR name, DWORD num, LPDEVMODEW mode, DWORD flags ) { return load_driver()->pEnumDisplaySettingsEx( name, num, mode, flags ); @@ -748,6 +762,7 @@ static USER_DRIVER lazy_load_driver = /* display modes */ loaderdrv_ChangeDisplaySettingsEx, loaderdrv_EnumDisplayMonitors, + loaderdrv_EnumDisplayDevices, loaderdrv_EnumDisplaySettingsEx, loaderdrv_GetMonitorInfo, /* windowing functions */ diff --git a/dlls/user32/misc.c b/dlls/user32/misc.c index fa0502e..c8cb2e8 100644 --- a/dlls/user32/misc.c +++ b/dlls/user32/misc.c @@ -243,12 +243,6 @@ DWORD WINAPI SetLogonNotifyWindow(HWINSTA hwinsta,HWND hwnd) return 1; } -static const WCHAR primary_device_name[] = {'\\','\\','.','\\','D','I','S','P','L','A','Y','1',0}; -static const WCHAR primary_device_string[] = {'X','1','1',' ','W','i','n','d','o','w','i','n','g',' ', - 'S','y','s','t','e','m',0}; -static const WCHAR primary_device_deviceid[] = {'P','C','I','\\','V','E','N','_','0','0','0','0','&', - 'D','E','V','_','0','0','0','0',0}; - /*********************************************************************** * EnumDisplayDevicesA (USER32.@) */ @@ -285,28 +279,18 @@ BOOL WINAPI EnumDisplayDevicesA( LPCSTR lpDevice, DWORD i, LPDISPLAY_DEVICEA lpD /*********************************************************************** * EnumDisplayDevicesW (USER32.@) */ -BOOL WINAPI EnumDisplayDevicesW( LPCWSTR lpDevice, DWORD i, LPDISPLAY_DEVICEW lpDisplayDevice, +BOOL WINAPI EnumDisplayDevicesW( LPCWSTR lpDevice, DWORD iDevNum, LPDISPLAY_DEVICEW lpDisplayDevice, DWORD dwFlags ) { - FIXME("(%s,%d,%p,0x%08x), stub!\n",debugstr_w(lpDevice),i,lpDisplayDevice,dwFlags); - - if (i) - return FALSE; - - memcpy(lpDisplayDevice->DeviceName, primary_device_name, sizeof(primary_device_name)); - memcpy(lpDisplayDevice->DeviceString, primary_device_string, sizeof(primary_device_string)); - - lpDisplayDevice->StateFlags = - DISPLAY_DEVICE_ATTACHED_TO_DESKTOP | - DISPLAY_DEVICE_PRIMARY_DEVICE | - DISPLAY_DEVICE_VGA_COMPATIBLE; - - if(lpDisplayDevice->cb >= offsetof(DISPLAY_DEVICEW, DeviceID) + sizeof(lpDisplayDevice->DeviceID)) - memcpy(lpDisplayDevice->DeviceID, primary_device_deviceid, sizeof(primary_device_deviceid)); - if(lpDisplayDevice->cb >= offsetof(DISPLAY_DEVICEW, DeviceKey) + sizeof(lpDisplayDevice->DeviceKey)) - lpDisplayDevice->DeviceKey[0] = 0; + BOOL ret; + TRACE("%s %d %p 0x%08x\n",debugstr_w(lpDevice),iDevNum,lpDisplayDevice,dwFlags); - return TRUE; + ret = USER_Driver->pEnumDisplayDevices( lpDevice, iDevNum, lpDisplayDevice, dwFlags ); + if (ret) + TRACE("StateFlags %04x, DeviceName '%s', DeviceString '%s'\n", lpDisplayDevice->StateFlags, + debugstr_w(lpDisplayDevice->DeviceName), + debugstr_w(lpDisplayDevice->DeviceString)); + return ret; } struct monitor_enum_info diff --git a/dlls/user32/user_private.h b/dlls/user32/user_private.h index 0b5b2ac..70773e3 100644 --- a/dlls/user32/user_private.h +++ b/dlls/user32/user_private.h @@ -84,6 +84,7 @@ typedef struct tagUSER_DRIVER { /* display modes */ LONG (CDECL *pChangeDisplaySettingsEx)(LPCWSTR,LPDEVMODEW,HWND,DWORD,LPVOID); BOOL (CDECL *pEnumDisplayMonitors)(HDC,LPRECT,MONITORENUMPROC,LPARAM); + BOOL (CDECL *pEnumDisplayDevices)(LPCWSTR,DWORD,LPDISPLAY_DEVICEW,DWORD); BOOL (CDECL *pEnumDisplaySettingsEx)(LPCWSTR,DWORD,LPDEVMODEW,DWORD); BOOL (CDECL *pGetMonitorInfo)(HMONITOR,MONITORINFO*); /* windowing functions */ -- 2.7.4