15 #define DEBUG_DEVSETTINGS 59 #define impl_to_interface(impl,iface) (struct iface *)(&(impl)->lp##iface##Vtbl) 117 dd2.
cb =
sizeof(dd2);
202 DPRINT(
"CDevSettings::GetDeviceInstanceId(%ws)!\n", pszDevice);
212 InfoData.
cbSize =
sizeof(InfoData);
231 if (lpDevInstId ==
NULL)
233 DPRINT1(
"LocalAlloc failed\n");
245 DPRINT(
"instance id: %ws\n", lpDevInstId);
256 static const WCHAR szRegPrefix[] =
L"\\Registry\\Machine\\";
261 lpRegKey =
This->pDisplayKey;
262 if (lpRegKey !=
NULL)
269 lpRegKey +=
wcslen(szRegPrefix);
300 for (
i = 0;
i <
This->nDevModes;
i++)
303 if (!
This->DevModes[
i])
307 return This->DevModes[
i];
320 DPRINT1(
"CDevSettings::GetCurrentMode\n");
321 return This->lpCurDevMode;
331 DPRINT1(
"CDevSettings::SetCurrentMode(0x%p)\n", pDevMode);
336 for (
i = 0;
i <
This->nDevModes;
i++)
339 if (!
This->DevModes[
i])
342 if (
This->DevModes[
i] == pDevMode)
344 This->lpCurDevMode = pDevMode;
355 PBOOL pbKeyIsReadOnly,
360 DPRINT1(
"CDevSettings::GetPruningMode(%p,%p,%p)\n", pbModesPruned, pbKeyIsReadOnly, pbPruningOn);
362 *pbModesPruned =
This->bModesPruned;
363 *pbKeyIsReadOnly =
This->bKeyIsReadOnly;
364 *pbPruningOn =
This->bPruningOn;
375 DPRINT1(
"CDevSettings::SetPruningMode(%d)\n", PruningOn);
377 if (
This->bModesPruned && !
This->bKeyIsReadOnly &&
378 PruningOn !=
This->bPruningOn)
392 (
const BYTE *)&dwValue,
438 DWORD dwType, dwMemSize = 0;
442 TEXT(
"HardwareInformation.MemorySize"),
448 dwSize ==
sizeof(dwMemSize))
452 if (dwMemSize > 1024)
455 if (dwMemSize > 1024)
477 TEXT(
"HardwareInformation.ChipType"),
480 TEXT(
"HardwareInformation.DacType"),
483 TEXT(
"HardwareInformation.AdapterString"),
486 TEXT(
"HardwareInformation.BiosString"),
506 DPRINT1(
"This->StateFlags: %x\n",
This->StateFlags);
521 DPRINT1(
"This->pDisplayDevice: %ws\n",
This->pDisplayDevice);
523 DPRINT1(
"This->pDisplayName: %ws\n",
This->pDisplayName);
525 DPRINT1(
"This->pDisplayKey: %ws\n",
This->pDisplayKey);
527 DPRINT1(
"This->pDisplayId: %ws\n",
This->pDisplayId);
529 DPRINT1(
"This->pMonitorName: %ws\n",
This->pMonitorName);
531 DPRINT1(
"This->pMonitorDevice: %ws\n",
This->pMonitorDevice);
557 This->bPruningOn = (
dw != 0);
578 dwSize = (
This->nDevModes + 1) *
sizeof(pDevMode);
586 This->nDevModes *
sizeof(pDevMode));
591 This->DevModes = DevModesNew;
592 This->DevModes[
This->nDevModes++] = pDevMode;
619 for (
i = 0;
i <
This->nDevModes;
i++)
631 This->lpOrigDevMode =
This->lpCurDevMode = CurMode;
648 while (
This->nDevModes)
682 DPRINT1(
"CDevSettings::QueryInterface: Queried unknown interface\n");
709 FORMATETC* pformatetcIn,
721 hr = IDataObject_QueryGetData(iface,
727 if (pformatetcIn->cfFormat ==
This->cfDisplayDevice)
729 pszRet =
This->pDisplayDevice;
730 DPRINT1(
"CDevSettings::GetData returns display device %ws\n", pszRet);
732 else if (pformatetcIn->cfFormat ==
This->cfDisplayName)
734 pszRet =
This->pDisplayName;
735 DPRINT1(
"CDevSettings::GetData returns display name %ws\n", pszRet);
737 else if (pformatetcIn->cfFormat ==
This->cfDisplayKey)
739 pszRet =
This->pDisplayKey;
740 DPRINT1(
"CDevSettings::GetData returns display key %ws\n", pszRet);
742 else if (pformatetcIn->cfFormat ==
This->cfDisplayId)
744 pszRet =
This->pDisplayId;
745 DPRINT1(
"CDevSettings::GetData returns display id %ws\n", pszRet);
747 else if (pformatetcIn->cfFormat ==
This->cfMonitorName)
749 pszRet =
This->pMonitorName;
750 DPRINT1(
"CDevSettings::GetData returns monitor name %ws\n", pszRet);
752 else if (pformatetcIn->cfFormat ==
This->cfMonitorDevice)
754 pszRet =
This->pMonitorDevice;
755 DPRINT1(
"CDevSettings::GetData returns monitor device %ws\n", pszRet);
757 else if (pformatetcIn->cfFormat ==
This->cfExtInterface)
767 sizeof(
This->ExtInterface));
769 DPRINT1(
"CDevSettings::GetData returns the desk.cpl extension interface\n");
771 pmedium->tymed = TYMED_HGLOBAL;
772 pmedium->hGlobal = pIface;
779 else if (pformatetcIn->cfFormat ==
This->cfDisplayStateFlags)
787 *pdw =
This->StateFlags;
789 DPRINT1(
"CDevSettings::GetData returns the display state flags %x\n",
This->StateFlags);
791 pmedium->tymed = TYMED_HGLOBAL;
792 pmedium->hGlobal = pdw;
799 else if (pformatetcIn->cfFormat ==
This->cfPruningMode)
807 *pb = (
This->bModesPruned &&
This->bPruningOn);
809 pmedium->tymed = TYMED_HGLOBAL;
810 pmedium->hGlobal = pb;
833 pmedium->tymed = TYMED_HGLOBAL;
834 pmedium->hGlobal = pszBuf;
847 FORMATETC* pformatetc,
851 sizeof(*pformatetc));
857 FORMATETC* pformatetc)
860 TCHAR szFormatName[255];
864 if (pformatetc->dwAspect != DVASPECT_CONTENT)
867 if (pformatetc->lindex != -1)
870 if (!(pformatetc->tymed & TYMED_HGLOBAL))
874 if (pformatetc->cfFormat ==
This->cfExtInterface ||
875 pformatetc->cfFormat ==
This->cfDisplayDevice ||
876 pformatetc->cfFormat ==
This->cfDisplayName ||
877 pformatetc->cfFormat ==
This->cfDisplayId ||
878 pformatetc->cfFormat ==
This->cfDisplayKey ||
879 pformatetc->cfFormat ==
This->cfDisplayStateFlags ||
880 pformatetc->cfFormat ==
This->cfMonitorDevice ||
881 pformatetc->cfFormat ==
This->cfMonitorName ||
882 pformatetc->cfFormat ==
This->cfPruningMode)
891 sizeof(szFormatName) /
sizeof(szFormatName[0])))
893 DPRINT1(
"CDevSettings::QueryGetData(\"%ws\")\n", szFormatName);
897 DPRINT1(
"CDevSettings::QueryGetData(Format %u)\n", (
unsigned int)pformatetc->cfFormat);
907 FORMATETC* pformatectIn,
908 FORMATETC* pformatetcOut)
912 DPRINT1(
"CDevSettings::GetCanonicalFormatEtc\n");
914 hr = IDataObject_QueryGetData(iface,
923 if (pformatectIn->ptd ==
NULL)
927 pformatetcOut->ptd =
NULL;
942 FORMATETC* pformatetc,
946 DPRINT1(
"CDevSettings::SetData UNIMPLEMENTED\n");
954 pFormatEtc->cfFormat =
cf;
955 pFormatEtc->ptd =
NULL;
956 pFormatEtc->dwAspect = DVASPECT_CONTENT;
957 pFormatEtc->lindex = -1;
958 pFormatEtc->tymed = TYMED_HGLOBAL;
970 *ppenumFormatEtc =
NULL;
972 if (dwDirection == DATADIR_GET)
975 This->cfExtInterface);
977 This->cfDisplayDevice);
979 This->cfDisplayName);
985 This->cfDisplayStateFlags);
987 This->cfMonitorName);
989 This->cfMonitorDevice);
991 This->cfPruningMode);
1005 FORMATETC* pformatetc,
1008 DWORD* pdwConnection)
1025 *ppenumAdvise =
NULL;
1058 DisplayDeviceInfo)))
1076 if (
This->lpCurDevMode !=
This->lpOrigDevMode)
1092 This->pDisplayDevice,
1100 This->lpOrigDevMode =
This->lpCurDevMode;
1102 This->lpCurDevMode =
This->lpOrigDevMode;
BOOL WINAPI SetupDiEnumDeviceInfo(HDEVINFO devinfo, DWORD index, PSP_DEVINFO_DATA info)
#define DISPLAY_DEVICE_MODESPRUNED
static __inline VOID pCDevSettings_FillFormatEtc(FORMATETC *pFormatEtc, CLIPFORMAT cf)
HGLOBAL NTAPI GlobalAlloc(UINT uFlags, SIZE_T dwBytes)
#define DESK_EXT_DISPLAYNAME
static const struct IDataObjectVtbl vtblIDataObject
LONG WINAPI DisplaySaveSettings(PVOID pContext, HWND hwndPropSheet)
static HRESULT STDMETHODCALLTYPE CDevSettings_GetData(IDataObject *iface, FORMATETC *pformatetcIn, STGMEDIUM *pmedium)
#define DATA_S_SAMEFORMATETC
HDEVINFO WINAPI SetupDiGetClassDevsW(CONST GUID *class, LPCWSTR enumstr, HWND parent, DWORD flags)
_Check_return_ _CRTIMP int __cdecl _wcsnicmp(_In_reads_or_z_(_MaxCount) const wchar_t *_Str1, _In_reads_or_z_(_MaxCount) const wchar_t *_Str2, _In_ size_t _MaxCount)
CLIPFORMAT cfMonitorDevice
#define INVALID_HANDLE_VALUE
DWORD WINAPI GetLastError(VOID)
const GUID IID_IDataObject
static HRESULT STDMETHODCALLTYPE CDevSettings_EnumDAdvise(IDataObject *iface, IEnumSTATDATA **ppenumAdvise)
static VOID pCDevSettings_Free(PCDevSettings This)
#define DESK_EXT_DISPLAYID
#define DESK_EXT_PRUNINGMODE
static VOID pCDevSettings_ReadHardwareInfo(HKEY hKey, LPCTSTR lpValueName, LPWSTR lpBuffer)
int WINAPI LoadStringW(_In_opt_ HINSTANCE hInstance, _In_ UINT uID, _Out_writes_to_(cchBufferMax, return+1) LPWSTR lpBuffer, _In_ int cchBufferMax)
#define DESK_EXT_DISPLAYSTATEFLAGS
#define ENUM_CURRENT_SETTINGS
static VOID pCDevSettings_InitializeExtInterface(PCDevSettings This)
#define GetClipboardFormatName
static HRESULT STDMETHODCALLTYPE CDevSettings_QueryInterface(IDataObject *iface, REFIID riid, void **ppvObject)
static PWSTR pCDevSettings_GetDeviceInstanceId(const WCHAR *pszDevice)
Converts a Hardware ID (DeviceID from EnumDisplayDevices) to an unique Device Instance ID.
struct _CDevSettings CDevSettings
const struct IDataObjectVtbl * lpIDataObjectVtbl
static HRESULT STDMETHODCALLTYPE CDevSettings_GetCanonicalFormatEtc(IDataObject *iface, FORMATETC *pformatectIn, FORMATETC *pformatetcOut)
static TAGREF LPCWSTR LPDWORD LPVOID lpBuffer
CLIPFORMAT cfExtInterface
static HRESULT STDMETHODCALLTYPE CDevSettings_GetDataHere(IDataObject *iface, FORMATETC *pformatetc, STGMEDIUM *pmedium)
REFIID LPVOID DWORD_PTR dw
BOOL SwitchDisplayMode(HWND hwndDlg, PWSTR DeviceName, PSETTINGS_ENTRY seInit, PSETTINGS_ENTRY seNew, OUT PLONG rc)
HRESULT WINAPI SHCreateStdEnumFmtEtc(UINT cFormats, const FORMATETC *lpFormats, LPENUMFORMATETC *ppenumFormatetc)
static HKEY pCDevSettings_OpenDeviceKey(PCDevSettings This, BOOL ReadOnly)
static HRESULT STDMETHODCALLTYPE CDevSettings_EnumFormatEtc(IDataObject *iface, DWORD dwDirection, IEnumFORMATETC **ppenumFormatEtc)
size_t __cdecl _tcslen(const _TCHAR *str)
#define DESK_EXT_CALLBACK
BOOL WINAPI EnumDisplayDevicesW(LPCWSTR lpDevice, DWORD iDevNum, PDISPLAY_DEVICEW lpDisplayDevice, DWORD dwFlags)
#define DESK_EXT_DISPLAYKEY
#define impl_to_interface(impl, iface)
#define IDS_UNKNOWNMONITOR
static const WCHAR szEmpty[]
VOID DESK_EXT_CALLBACK CDevSettings_GetPruningMode(PVOID Context, PBOOL pbModesPruned, PBOOL pbKeyIsReadOnly, PBOOL pbPruningOn)
static HRESULT STDMETHODCALLTYPE CDevSettings_QueryGetData(IDataObject *iface, FORMATETC *pformatetc)
#define IDS_MULTIPLEMONITORS
PVOID WINAPI HeapAlloc(HANDLE, DWORD, SIZE_T)
static __inline PCDevSettings impl_from_IDataObject(struct IDataObject *iface)
static HRESULT STDMETHODCALLTYPE CDevSettings_DAdvise(IDataObject *iface, FORMATETC *pformatetc, DWORD advf, IAdviseSink *pAdvSink, DWORD *pdwConnection)
#define DESK_EXT_EXTINTERFACE
_In_ WDFCOLLECTION _In_ ULONG Index
#define DISP_CHANGE_SUCCESSFUL
#define STDMETHODCALLTYPE
CLIPFORMAT cfDisplayStateFlags
HGLOBAL NTAPI GlobalFree(HGLOBAL hMem)
static HRESULT STDMETHODCALLTYPE CDevSettings_SetData(IDataObject *iface, FORMATETC *pformatetc, STGMEDIUM *pmedium, BOOL fRelease)
static PWSTR pCDevSettings_GetMonitorDevice(const WCHAR *pszDisplayDevice)
#define DESK_EXT_MONITORDEVICE
_CRTIMP wchar_t *__cdecl wcscpy(_Out_writes_z_(_String_length_(_Source)+1) wchar_t *_Dest, _In_z_ const wchar_t *_Source)
static ULONG STDMETHODCALLTYPE CDevSettings_Release(IDataObject *iface)
#define SetupDiGetDeviceInstanceId
#define InterlockedDecrement
BOOL WINAPI EnumDisplaySettingsExW(LPCWSTR lpszDeviceName, DWORD iModeNum, LPDEVMODEW lpDevMode, DWORD dwFlags)
#define DM_DISPLAYFREQUENCY
REFIID LPVOID * ppvObject
IDataObject * CreateDevSettings(PDISPLAY_DEVICE_ENTRY DisplayDeviceInfo)
#define RegisterClipboardFormat
#define OLE_E_ADVISENOTSUPPORTED
PDEVMODEW DESK_EXT_CALLBACK CDevSettings_GetCurrentMode(PVOID Context)
#define InterlockedIncrement
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
IN PVOID IN PVOID IN USHORT IN USHORT IN PINTERFACE Interface
CLIPFORMAT cfDisplayDevice
HLOCAL NTAPI LocalFree(HLOCAL hMem)
#define FIELD_OFFSET(t, f)
static HRESULT STDMETHODCALLTYPE CDevSettings_DUnadvise(IDataObject *iface, DWORD dwConnection)
BOOL WINAPI IsEqualGUID(REFGUID rguid1, REFGUID rguid2)
static PWSTR pCDevSettings_GetMonitorName(const WCHAR *pszDisplayDevice)
_CRTIMP size_t __cdecl wcslen(_In_z_ const wchar_t *_Str)
struct _CDevSettings * PCDevSettings
#define MultiByteToWideChar
DESK_EXT_INTERFACE ExtInterface
static __inline VOID pCDevSettings_FreeString(PWCHAR *psz)
BOOL DESK_EXT_CALLBACK CDevSettings_SetCurrentMode(PVOID Context, DEVMODEW *pDevMode)
PDEVMODEW DESK_EXT_CALLBACK CDevSettings_EnumAllModes(PVOID Context, DWORD Index)
VOID DESK_EXT_CALLBACK CDevSettings_SetPruningMode(PVOID Context, BOOL PruningOn)
#define DESK_EXT_DISPLAYDEVICE
HLOCAL NTAPI LocalAlloc(UINT uFlags, SIZE_T dwBytes)
GLuint GLuint GLsizei GLenum type
static ULONG STDMETHODCALLTYPE CDevSettings_AddRef(IDataObject *iface)
STRSAFEAPI StringCbCopyW(STRSAFE_LPWSTR pszDest, size_t cbDest, STRSAFE_LPCWSTR pszSrc)
static HRESULT pCDevSettings_Initialize(PCDevSettings This, PDISPLAY_DEVICE_ENTRY DisplayDeviceInfo)
#define DESK_EXT_MONITORNAME
static PWSTR pCDevSettings_AllocAndCopyString(const TCHAR *pszSrc)
#define RegCloseKey(hKey)
PSDBQUERYRESULT_VISTA PVOID DWORD * dwSize
#define HKEY_LOCAL_MACHINE
#define ERROR_INSUFFICIENT_BUFFER