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");
238 if (!pGraphicsDevice)
242 ERR(
"No GRAPHICS_DEVICE found for '%wZ', iDevNum %lu\n", pustrDevice, iDevNum);
244 TRACE(
"No GRAPHICS_DEVICE found for '%wZ', iDevNum %lu\n", pustrDevice, iDevNum);
255 if (iDevNum >= pGraphicsDevice->
dwMonCnt)
257 TRACE(
"No monitor #%u for '%wZ'\n", iDevNum + 1, pustrDevice);
269 ERR(
"Could not open reg key\n");
336 ERR(
"IoGetDeviceProperty() failed with status 0x%08lx\n",
Status);
367 ERR(
"IoGetDeviceProperty() failed with status 0x%08lx\n",
Status);
389 TRACE(
"Enter NtUserEnumDisplayDevices(%wZ, %lu)\n",
390 pustrDevice, iDevNum);
392 dispdev.
cb =
sizeof(dispdev);
397 RtlInitEmptyUnicodeString(&ustrDevice, awcDevice,
sizeof(awcDevice));
416 pustrDevice = &ustrDevice;
440 if (pDisplayDevice->
cb)
443 pDisplayDevice->
cb =
min(pDisplayDevice->
cb,
sizeof(dispdev));
457 TRACE(
"Leave NtUserEnumDisplayDevices, Status = 0x%lx\n",
Status);
476 ERR(
"No PDEV found!\n");
499 TRACE(
"Enter UserEnumDisplaySettings('%wZ', %lu)\n",
506 if (!pGraphicsDevice || !ppdev)
509 ERR(
"No device found!\n");
533 *ppdm = pdmentry->
pdm;
606 ULONG cbSize, cbExtra;
609 TRACE(
"Enter NtUserEnumDisplaySettings(%wZ, %lu, %p, 0x%lx)\n",
635 RtlInitEmptyUnicodeString(&ustrDevice, awcDevice,
sizeof(awcDevice));
658 pustrDevice = &ustrDevice;
746 ERR(
"Could not load registry settings\n");
760 OrigBC =
gpsi->BitCount;
765 ERR(
"Devmode doesn't specify the resolution.\n");
773 ERR(
"Failed to get PDEV\n");
790 ERR(
"Could not find a matching DEVMODE\n");
816 ERR(
"Could not open registry key\n");
826 ERR(
"DEVMODE matches, nothing to do\n");
851 ERR(
"Failed to set mode\n");
875 gpsi->dmLogPixels = ppdev->gdiinfo.ulLogPixelsY;
876 gpsi->Planes = ppdev->gdiinfo.cPlanes;
877 gpsi->BitsPixel = ppdev->gdiinfo.cBitsPixel;
887 gpsi->PUSIFlags &= ~PUSIF_PALETTEDISPLAY;
891 gpsi->tmSysFont = tmw;
918 gpsi->BitCount != OrigBC)
920 ERR(
"Detect settings changed.\n");
931 if (newDevMode && newDevMode != ppdev->
pdmwDev)
948 ERR(
"Failed to restore display mode!\n");
987 RtlInitEmptyUnicodeString(&ustrDevice, awcDevice,
sizeof(awcDevice));
1006 pustrDevice = &ustrDevice;
1036 ERR(
"lpDevMode->dmDriverExtra is IGNORED!\n");
#define DBG_DEFAULT_CHANNEL(ch)
#define ERROR_NOT_ENOUGH_MEMORY
#define NT_SUCCESS(StatCode)
#define ERROR_INVALID_PARAMETER
static DWORD DWORD * dwLength
#define ExAllocatePoolWithTag(hernya, size, tag)
#define RtlCompareMemory(s1, s2, l)
VOID NTAPI ProbeForRead(IN CONST VOID *Address, IN SIZE_T Length, IN ULONG Alignment)
VOID NTAPI ProbeForWrite(IN PVOID Address, IN SIZE_T Length, IN ULONG Alignment)
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
_CRTIMP size_t __cdecl wcslen(_In_z_ const wchar_t *_Str)
#define PUSIF_PALETTEDISPLAY
#define EXCEPTION_EXECUTE_HANDLER
BOOL LDEVOBJ_bProbeAndCaptureDevmode(_Inout_ PGRAPHICS_DEVICE pGraphicsDevice, _In_ PDEVMODEW RequestedMode, _Out_ PDEVMODEW *pSelectedMode, _In_ BOOL bSearchClosestMode)
#define ExFreePoolWithTag(_P, _T)
static _In_ DWORD dwflags
static _In_ DWORD iModeNum
static _In_ DWORD _Inout_ PDEVMODEA lpDevMode
PCURICON_OBJECT FASTCALL UserSetCursor(PCURICON_OBJECT NewCursor, BOOL ForceChange)
NTSYSAPI NTSTATUS NTAPI ZwClose(_In_ HANDLE Handle)
_In_ LPWSTR _In_ DWORD _In_ DWORD _In_ DWORD dwFlags
NTSYSAPI VOID NTAPI RtlCopyUnicodeString(PUNICODE_STRING DestinationString, PUNICODE_STRING SourceString)
NTSYSAPI VOID NTAPI RtlInitUnicodeString(PUNICODE_STRING DestinationString, PCWSTR SourceString)
NTSYSAPI BOOLEAN NTAPI RtlEqualUnicodeString(PUNICODE_STRING String1, PUNICODE_STRING String2, BOOLEAN CaseInSensitive)
#define STATUS_INVALID_PARAMETER_2
#define STATUS_INVALID_PARAMETER_1
NTSTRSAFEAPI RtlStringCbCopyW(_Out_writes_bytes_(cbDest) _Always_(_Post_z_) NTSTRSAFE_PWSTR pszDest, _In_ size_t cbDest, _In_ NTSTRSAFE_PCWSTR pszSrc)
NTSTRSAFEAPI RtlStringCbCatW(_Inout_updates_bytes_(cbDest) _Always_(_Post_z_) NTSTRSAFE_PWSTR pszDest, _In_ size_t cbDest, _In_ NTSTRSAFE_PCWSTR pszSrc)
VOID FASTCALL UserLeave(VOID)
VOID FASTCALL UserEnterShared(VOID)
VOID FASTCALL UserEnterExclusive(VOID)
PPDEVOBJ NTAPI EngpGetPDEV(_In_opt_ PUNICODE_STRING pustrDeviceName)
BOOL NTAPI PDEVOBJ_bSwitchMode(PPDEVOBJ ppdev, PDEVMODEW pdm)
VOID NTAPI PDEVOBJ_vRelease(_Inout_ PPDEVOBJ ppdev)
FORCEINLINE VOID PDEVOBJ_vReference(_In_ PPDEVOBJ ppdev)
NTSTATUS NTAPI IoGetDeviceProperty(IN PDEVICE_OBJECT DeviceObject, IN DEVICE_REGISTRY_PROPERTY DeviceProperty, IN ULONG BufferLength, OUT PVOID PropertyBuffer, OUT PULONG ResultLength)
#define _SEH2_GetExceptionCode()
#define _SEH2_EXCEPT(...)
#define _SEH2_YIELD(__stmt)
#define ProbeForReadUnicodeString(Ptr)
#define STATUS_BUFFER_TOO_SMALL
PDEVMODEENTRY pDevModeList
WCHAR szWinDeviceName[CCHDEVICENAME/2]
WCHAR szNtDeviceName[CCHDEVICENAME/2]
PVIDEO_MONITOR_DEVICE pvMonDev
PDEVICE_OBJECT PhysDeviceHandle
PGRAPHICS_DEVICE pGraphicsDevice
DWORD dmDisplayFixedOutput
DWORD dmDisplayOrientation
#define RTL_CONSTANT_STRING(s)
#define FIELD_OFFSET(t, f)
#define RtlCopyMemory(Destination, Source, Length)
#define RtlZeroMemory(Destination, Length)
#define STATUS_UNSUCCESSFUL
#define STATUS_INSUFFICIENT_RESOURCES
PGRAPHICS_DEVICE NTAPI EngpRegisterGraphicsDevice(_In_ PUNICODE_STRING pustrDeviceName, _In_ PUNICODE_STRING pustrDiplayDrivers, _In_ PUNICODE_STRING pustrDescription)
PGRAPHICS_DEVICE NTAPI EngpFindGraphicsDevice(_In_opt_ PUNICODE_STRING pustrDevice, _In_ ULONG iDevNum)
NTSTATUS EngpUpdateGraphicsDeviceList(VOID)
NTSTATUS NTAPI EngpUpdateMonitorDevices(_In_ PGRAPHICS_DEVICE pGraphicsDevice)
VOID NTAPI PDEVOBJ_vRefreshModeList(PPDEVOBJ ppdev)
VOID FASTCALL SetLastNtError(_In_ NTSTATUS Status)
DWORD FASTCALL IntGetCharDimensions(_In_ HDC hdc, _Out_opt_ PTEXTMETRICW ptm, _Out_opt_ PDWORD height)
VOID NTAPI RegWriteDWORD(HKEY hkey, PCWSTR pwszValue, DWORD dwData)
BOOL APIENTRY UserClipCursor(RECTL *prcl)
VOID APIENTRY UserRedrawDesktop(VOID)
NTSTATUS NTAPI UserEnumRegistryDisplaySettings(IN PUNICODE_STRING pustrDevice, OUT LPDEVMODEW pdm)
VOID UserDisplayNotifyShutdown(PPROCESSINFO ppiCurrent)
BOOL NTAPI NtUserEnumDisplayDevices(PUNICODE_STRING pustrDevice, DWORD iDevNum, PDISPLAY_DEVICEW pDisplayDevice, DWORD dwFlags)
NTSTATUS APIENTRY NtUserEnumDisplaySettings(IN PUNICODE_STRING pustrDevice, IN DWORD iModeNum, OUT LPDEVMODEW lpDevMode, IN DWORD dwFlags)
VOID UserRefreshDisplay(IN PPDEVOBJ ppdev)
NTSTATUS NTAPI UserEnumDisplayDevices(PUNICODE_STRING pustrDevice, DWORD iDevNum, PDISPLAY_DEVICEW pdispdev, DWORD dwFlags)
VOID UserUpdateFullscreen(DWORD flags)
#define READ(field, str, flag)
PGRAPHICS_DEVICE NTAPI InitDisplayDriver(IN PWSTR pwszDeviceName, IN PWSTR pwszRegKey)
LONG APIENTRY UserChangeDisplaySettings(PUNICODE_STRING pustrDevice, LPDEVMODEW pdm, DWORD flags, LPVOID lParam)
VOID RegWriteDisplaySettings(HKEY hkey, PDEVMODEW pdm)
NTSTATUS NTAPI InitVideo(VOID)
NTSTATUS NTAPI UserOpenDisplaySettingsKey(OUT PHKEY phkey, IN PUNICODE_STRING pustrDevice, IN BOOL bGlobal)
NTSTATUS NTAPI UserEnumDisplaySettings(PUNICODE_STRING pustrDevice, DWORD iModeNum, LPDEVMODEW *ppdm, DWORD dwFlags)
static const PWCHAR KEY_VIDEO
static PPROCESSINFO gpFullscreen
NTSTATUS NTAPI UserEnumCurrentDisplaySettings(PUNICODE_STRING pustrDevice, PDEVMODEW *ppdm)
VOID RegReadDisplaySettings(HKEY hkey, PDEVMODEW pdm)
LONG APIENTRY NtUserChangeDisplaySettings(PUNICODE_STRING pustrDevice, LPDEVMODEW lpDevMode, DWORD dwflags, LPVOID lParam)
BOOL FASTCALL UserSendNotifyMessage(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam)
LRESULT FASTCALL co_IntSendMessageTimeout(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam, UINT uFlags, UINT uTimeout, ULONG_PTR *uResult)
BOOL NTAPI InitMetrics(VOID)
NTSTATUS NTAPI UserUpdateMonitorSize(IN HDEV hDev)
ENGAPI VOID APIENTRY EngSetLastError(_In_ ULONG iError)
_In_ LPWSTR _In_ ULONG _In_ ULONG _In_ ULONG _Out_ DEVINFO _In_ HDEV _In_ LPWSTR pwszDeviceName
#define DM_DISPLAYFREQUENCY
#define DISPLAY_DEVICE_VGA_COMPATIBLE
struct _devicemodeW DEVMODEW
#define DM_DISPLAYORIENTATION
#define DISP_CHANGE_NOTUPDATED
#define CDS_VIDEOPARAMETERS
#define DISP_CHANGE_BADMODE
#define DISP_CHANGE_SUCCESSFUL
#define ENUM_REGISTRY_SETTINGS
#define DISP_CHANGE_BADPARAM
#define WM_SYSCOLORCHANGE
#define CDS_UPDATEREGISTRY
#define DISP_CHANGE_BADFLAGS
#define DISP_CHANGE_FAILED
#define ENUM_CURRENT_SETTINGS
#define DISP_CHANGE_RESTART
@ DevicePropertyDriverKeyName
@ DevicePropertyHardwareID
@ DevicePropertyDeviceDescription