25 RegWriteDWORD(hkey,
L"DefaultSettings.XPanning", pdm->dmPanningWidth);
26 RegWriteDWORD(hkey,
L"DefaultSettings.YPanning", pdm->dmPanningHeight);
43 #define READ(field, str, flag) \ 44 if (RegReadDWORD(hkey, L##str, &dwValue)) \ 46 pdm->field = dwValue; \ 47 pdm->dmFields |= flag; \ 59 READ(dmDisplayFixedOutput,
"DefaultSettings.FixedOutput", DM_DISPLAYFIXEDOUTPUT);
71 UNICODE_STRING ustrDeviceName, ustrDisplayDrivers, ustrDescription;
78 TRACE(
"InitDisplayDriver(%S, %S);\n",
85 ERR(
"Failed to open registry key: %ls\n", pwszRegKey);
90 cbSize =
sizeof(awcBuffer) - 10;
92 L"InstalledDisplayDrivers",
98 ERR(
"Didn't find 'InstalledDisplayDrivers', status = 0x%lx\n",
Status);
104 ustrDisplayDrivers.
Buffer = awcBuffer;
109 ustrDescription.
Buffer = awcBuffer + (cbSize /
sizeof(
WCHAR));
110 cbSize =
sizeof(awcBuffer) - cbSize;
114 L"Device Description",
129 cbSize =
sizeof(
DWORD);
141 if (pGraphicsDevice && dwVga)
146 return pGraphicsDevice;
156 TRACE(
"----------------------------- InitVideo() -------------------------------\n");
159 Status =
RegOpenKey(
L"\\Registry\\Machine\\System\\CurrentControlSet\\Control\\GraphicsDrivers\\BaseVideo", &hkey);
164 ERR(
"VGA mode requested.\n");
182 ERR(
"No usable display driver was found.\n");
252 if (!pGraphicsDevice)
255 ERR(
"No GRAPHICS_DEVICE found for '%wZ', iDevNum %lu\n", pustrDevice, iDevNum);
264 ERR(
"Could not open reg key\n");
303 TRACE(
"Enter NtUserEnumDisplayDevices(%wZ, %lu)\n",
304 pustrDevice, iDevNum);
306 dispdev.
cb =
sizeof(dispdev);
311 RtlInitEmptyUnicodeString(&ustrDevice, awcDevice,
sizeof(awcDevice));
329 if (ustrDevice.
Length > 0)
330 pustrDevice = &ustrDevice;
336 if (pustrDevice && iDevNum != 0)
358 if (pDisplayDevice->
cb)
361 pDisplayDevice->
cb =
min(pDisplayDevice->
cb,
sizeof(dispdev));
375 TRACE(
"Leave NtUserEnumDisplayDevices, Status = 0x%lx\n",
Status);
394 ERR(
"No PDEV found!\n");
417 TRACE(
"Enter UserEnumDisplaySettings('%wZ', %lu)\n",
424 if (!pGraphicsDevice || !ppdev)
427 ERR(
"No device found!\n");
451 *ppdm = pdmentry->
pdm;
524 ULONG cbSize, cbExtra;
527 TRACE(
"Enter NtUserEnumDisplaySettings(%wZ, %lu, %p, 0x%lx)\n",
553 RtlInitEmptyUnicodeString(&ustrDevice, awcDevice,
sizeof(awcDevice));
576 pustrDevice = &ustrDevice;
664 ERR(
"Could not load registry settings\n");
678 OrigBC =
gpsi->BitCount;
683 ERR(
"Devmode doesn't specify the resolution.\n");
691 ERR(
"Failed to get PDEV\n");
708 ERR(
"Could not find a matching DEVMODE\n");
734 ERR(
"Could not open registry key\n");
744 ERR(
"DEVMODE matches, nothing to do\n");
769 ERR(
"Failed to set mode\n");
793 gpsi->dmLogPixels = ppdev->gdiinfo.ulLogPixelsY;
794 gpsi->Planes = ppdev->gdiinfo.cPlanes;
795 gpsi->BitsPixel = ppdev->gdiinfo.cBitsPixel;
809 gpsi->tmSysFont = tmw;
836 gpsi->BitCount != OrigBC)
838 ERR(
"Detect settings changed.\n");
849 if (newDevMode && newDevMode != ppdev->
pdmwDev)
866 ERR(
"Failed to restore display mode!\n");
905 RtlInitEmptyUnicodeString(&ustrDevice, awcDevice,
sizeof(awcDevice));
924 pustrDevice = &ustrDevice;
954 ERR(
"lpDevMode->dmDriverExtra is IGNORED!\n");
BOOL NTAPI PDEVOBJ_bSwitchMode(PPDEVOBJ ppdev, PDEVMODEW pdm)
static const PWCHAR KEY_VIDEO
#define ERROR_INVALID_PARAMETER
NTSTRSAFEAPI RtlStringCbCopyW(_Out_writes_bytes_(cbDest) _Always_(_Post_z_) NTSTRSAFE_PWSTR pszDest, _In_ size_t cbDest, _In_ NTSTRSAFE_PCWSTR pszSrc)
VOID FASTCALL UserEnterShared(VOID)
#define WM_SYSCOLORCHANGE
#define READ(field, str, flag)
NTSTATUS NTAPI UserUpdateMonitorSize(IN HDEV hDev)
#define DISP_CHANGE_BADFLAGS
#define DISP_CHANGE_RESTART
BOOL LDEVOBJ_bProbeAndCaptureDevmode(_Inout_ PGRAPHICS_DEVICE pGraphicsDevice, _In_ PDEVMODEW RequestedMode, _Out_ PDEVMODEW *pSelectedMode, _In_ BOOL bSearchClosestMode)
WCHAR szWinDeviceName[CCHDEVICENAME/2]
FORCEINLINE VOID PDEVOBJ_vReference(_In_ PPDEVOBJ ppdev)
WCHAR szNtDeviceName[CCHDEVICENAME/2]
DWORD dmDisplayOrientation
NTSYSAPI NTSTATUS NTAPI ZwClose(_In_ HANDLE Handle)
BOOL FASTCALL UserSendNotifyMessage(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam)
#define DISP_CHANGE_BADMODE
PDEVMODEENTRY pDevModeList
VOID RegWriteDisplaySettings(HKEY hkey, PDEVMODEW pdm)
PGRAPHICS_DEVICE gpVgaGraphicsDevice
NTSTATUS NTAPI UserEnumRegistryDisplaySettings(IN PUNICODE_STRING pustrDevice, OUT LPDEVMODEW pdm)
VOID UserDisplayNotifyShutdown(PPROCESSINFO ppiCurrent)
PGRAPHICS_DEVICE NTAPI InitDisplayDriver(IN PWSTR pwszDeviceName, IN PWSTR pwszRegKey)
PGRAPHICS_DEVICE gpPrimaryGraphicsDevice
VOID NTAPI ProbeForWrite(IN PVOID Address, IN SIZE_T Length, IN ULONG Alignment)
#define ENUM_CURRENT_SETTINGS
NTSYSAPI VOID NTAPI RtlCopyUnicodeString(PUNICODE_STRING DestinationString, PUNICODE_STRING SourceString)
#define STATUS_BUFFER_TOO_SMALL
BOOL NTAPI NtUserEnumDisplayDevices(PUNICODE_STRING pustrDevice, DWORD iDevNum, PDISPLAY_DEVICEW pDisplayDevice, DWORD dwFlags)
NTSTATUS(* NTAPI)(IN PFILE_FULL_EA_INFORMATION EaBuffer, IN ULONG EaLength, OUT PULONG ErrorOffset)
#define CDS_UPDATEREGISTRY
static _In_ DWORD iModeNum
NTSTATUS NTAPI UserEnumDisplayDevices(PUNICODE_STRING pustrDevice, DWORD iDevNum, PDISPLAY_DEVICEW pdispdev, DWORD dwFlags)
DWORD FASTCALL IntGetCharDimensions(HDC hdc, PTEXTMETRICW ptm, PDWORD height)
static PPROCESSINFO gpFullscreen
#define DISP_CHANGE_FAILED
#define DISP_CHANGE_BADPARAM
#define DISP_CHANGE_NOTUPDATED
DWORD dmDisplayFixedOutput
#define STATUS_INVALID_PARAMETER_2
NTSTATUS NTAPI UserEnumCurrentDisplaySettings(PUNICODE_STRING pustrDevice, PDEVMODEW *ppdm)
NTSTATUS NTAPI InitVideo(VOID)
static _In_ DWORD _Inout_ PDEVMODEA lpDevMode
VOID RegReadDisplaySettings(HKEY hkey, PDEVMODEW pdm)
VOID UserUpdateFullscreen(DWORD flags)
BOOL APIENTRY UserClipCursor(RECTL *prcl)
VOID FASTCALL UserEnterExclusive(VOID)
#define NT_SUCCESS(StatCode)
NTSTATUS APIENTRY NtUserEnumDisplaySettings(IN PUNICODE_STRING pustrDevice, IN DWORD iModeNum, OUT LPDEVMODEW lpDevMode, IN DWORD dwFlags)
#define EXCEPTION_EXECUTE_HANDLER
#define CDS_VIDEOPARAMETERS
BOOL NTAPI InitMetrics(VOID)
LRESULT FASTCALL co_IntSendMessageTimeout(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam, UINT uFlags, UINT uTimeout, ULONG_PTR *uResult)
#define DISP_CHANGE_SUCCESSFUL
VOID NTAPI RegWriteDWORD(HKEY hkey, PWSTR pwszValue, DWORD dwData)
LONG APIENTRY UserChangeDisplaySettings(PUNICODE_STRING pustrDevice, LPDEVMODEW pdm, DWORD flags, LPVOID lParam)
#define STATUS_UNSUCCESSFUL
VOID NTAPI ProbeForRead(IN CONST VOID *Address, IN SIZE_T Length, IN ULONG Alignment)
_In_ PCCERT_CONTEXT _In_ DWORD dwFlags
#define STATUS_INVALID_PARAMETER_1
#define DM_DISPLAYFREQUENCY
PGRAPHICS_DEVICE NTAPI EngpFindGraphicsDevice(_In_opt_ PUNICODE_STRING pustrDevice, _In_ ULONG iDevNum)
static _In_ DWORD dwflags
VOID APIENTRY UserRedrawDesktop(VOID)
VOID FASTCALL SetLastNtError(NTSTATUS Status)
_In_ LPWSTR _In_ ULONG _In_ ULONG _In_ ULONG _Out_ DEVINFO _In_ HDEV _In_ LPWSTR pwszDeviceName
VOID FASTCALL UserLeave(VOID)
NTSTATUS EngpUpdateGraphicsDeviceList(VOID)
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
VOID UserRefreshDisplay(IN PPDEVOBJ ppdev)
DBG_DEFAULT_CHANNEL(UserDisplay)
#define FIELD_OFFSET(t, f)
NTSTATUS NTAPI UserOpenDisplaySettingsKey(OUT PHKEY phkey, IN PUNICODE_STRING pustrDevice, IN BOOL bGlobal)
#define DISPLAY_DEVICE_VGA_COMPATIBLE
#define ProbeForReadUnicodeString(Ptr)
#define PUSIF_PALETTEDISPLAY
VOID NTAPI PDEVOBJ_vRefreshModeList(PPDEVOBJ ppdev)
NTSYSAPI VOID NTAPI RtlInitUnicodeString(PUNICODE_STRING DestinationString, PCWSTR SourceString)
#define RtlZeroMemory(Destination, Length)
NTSTATUS NTAPI UserEnumDisplaySettings(PUNICODE_STRING pustrDevice, DWORD iModeNum, LPDEVMODEW *ppdm, DWORD dwFlags)
#define RtlCopyMemory(Destination, Source, Length)
#define _SEH2_EXCEPT(...)
struct _devicemodeW DEVMODEW
PGRAPHICS_DEVICE NTAPI EngpRegisterGraphicsDevice(_In_ PUNICODE_STRING pustrDeviceName, _In_ PUNICODE_STRING pustrDiplayDrivers, _In_ PUNICODE_STRING pustrDescription)
#define _SEH2_GetExceptionCode()
#define _SEH2_YIELD(__stmt)
#define DM_DISPLAYORIENTATION
VOID NTAPI PDEVOBJ_vRelease(_Inout_ PPDEVOBJ ppdev)
PCURICON_OBJECT FASTCALL UserSetCursor(PCURICON_OBJECT NewCursor, BOOL ForceChange)
LONG APIENTRY NtUserChangeDisplaySettings(PUNICODE_STRING pustrDevice, LPDEVMODEW lpDevMode, DWORD dwflags, LPVOID lParam)
PGRAPHICS_DEVICE pGraphicsDevice
#define ExFreePoolWithTag(_P, _T)
#define ENUM_REGISTRY_SETTINGS
ENGAPI VOID APIENTRY EngSetLastError(_In_ ULONG iError)
#define RtlCompareMemory(s1, s2, l)
PPDEVOBJ NTAPI EngpGetPDEV(_In_opt_ PUNICODE_STRING pustrDeviceName)