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);
253 ERR(
"Could not open reg key\n");
312 ERR(
"IoGetDeviceProperty() failed with status 0x%08lx\n",
Status);
340 ERR(
"IoGetDeviceProperty() failed with status 0x%08lx\n",
Status);
361 TRACE(
"Enter NtUserEnumDisplayDevices(%wZ, %lu)\n",
362 pustrDevice, iDevNum);
364 dispdev.
cb =
sizeof(dispdev);
369 RtlInitEmptyUnicodeString(&ustrDevice, awcDevice,
sizeof(awcDevice));
387 if (ustrDevice.
Length > 0)
388 pustrDevice = &ustrDevice;
394 if (pustrDevice && iDevNum != 0)
416 if (pDisplayDevice->
cb)
419 pDisplayDevice->
cb =
min(pDisplayDevice->
cb,
sizeof(dispdev));
433 TRACE(
"Leave NtUserEnumDisplayDevices, Status = 0x%lx\n",
Status);
452 ERR(
"No PDEV found!\n");
475 TRACE(
"Enter UserEnumDisplaySettings('%wZ', %lu)\n",
482 if (!pGraphicsDevice || !ppdev)
485 ERR(
"No device found!\n");
509 *ppdm = pdmentry->
pdm;
582 ULONG cbSize, cbExtra;
585 TRACE(
"Enter NtUserEnumDisplaySettings(%wZ, %lu, %p, 0x%lx)\n",
611 RtlInitEmptyUnicodeString(&ustrDevice, awcDevice,
sizeof(awcDevice));
634 pustrDevice = &ustrDevice;
722 ERR(
"Could not load registry settings\n");
736 OrigBC =
gpsi->BitCount;
741 ERR(
"Devmode doesn't specify the resolution.\n");
749 ERR(
"Failed to get PDEV\n");
766 ERR(
"Could not find a matching DEVMODE\n");
792 ERR(
"Could not open registry key\n");
802 ERR(
"DEVMODE matches, nothing to do\n");
827 ERR(
"Failed to set mode\n");
851 gpsi->dmLogPixels = ppdev->gdiinfo.ulLogPixelsY;
852 gpsi->Planes = ppdev->gdiinfo.cPlanes;
853 gpsi->BitsPixel = ppdev->gdiinfo.cBitsPixel;
863 gpsi->PUSIFlags &= ~PUSIF_PALETTEDISPLAY;
867 gpsi->tmSysFont = tmw;
894 gpsi->BitCount != OrigBC)
896 ERR(
"Detect settings changed.\n");
907 if (newDevMode && newDevMode != ppdev->
pdmwDev)
924 ERR(
"Failed to restore display mode!\n");
963 RtlInitEmptyUnicodeString(&ustrDevice, awcDevice,
sizeof(awcDevice));
982 pustrDevice = &ustrDevice;
1012 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
#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)
NTSYSAPI VOID NTAPI RtlCopyUnicodeString(PUNICODE_STRING DestinationString, PUNICODE_STRING SourceString)
NTSYSAPI VOID NTAPI RtlInitUnicodeString(PUNICODE_STRING DestinationString, PCWSTR SourceString)
#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 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)
VOID NTAPI PDEVOBJ_vRefreshModeList(PPDEVOBJ ppdev)
VOID FASTCALL SetLastNtError(_In_ NTSTATUS Status)
DWORD FASTCALL IntGetCharDimensions(HDC hdc, PTEXTMETRICW ptm, 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)
_In_ PCCERT_CONTEXT _In_ DWORD dwFlags
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
@ DevicePropertyHardwareID