Git conversion: Make reactos the root directory, move rosapps, rostests, wallpapers...
[reactos.git] / reactos / dll / cpl / desk / devsett.c
diff --git a/reactos/dll/cpl/desk/devsett.c b/reactos/dll/cpl/desk/devsett.c
deleted file mode 100644 (file)
index 446848f..0000000
+++ /dev/null
@@ -1,918 +0,0 @@
-/*
- * COPYRIGHT:       See COPYING in the top level directory
- * PROJECT:         ReactOS Display Control Panel
- * FILE:            dll/cpl/desk/devsett.c
- * PURPOSE:         ReactOS Display Control Panel Shell Extension Support
- */
-
-#include "desk.h"
-
-#include <cfgmgr32.h>
-
-#define NDEBUG
-#include <debug.h>
-
-#define DEBUG_DEVSETTINGS
-
-typedef struct _CDevSettings
-{
-    const struct IDataObjectVtbl *lpIDataObjectVtbl;
-    DWORD ref;
-
-    CLIPFORMAT cfExtInterface;      /* "Desk.cpl extension interface" */
-    CLIPFORMAT cfDisplayDevice;     /* "Display Device" */
-    CLIPFORMAT cfDisplayName;       /* "Display Name" */
-    CLIPFORMAT cfDisplayId;         /* "Display ID" */
-    CLIPFORMAT cfMonitorName;       /* "Monitor Name" */
-    CLIPFORMAT cfMonitorDevice;     /* "Monitor Device" */
-    CLIPFORMAT cfDisplayKey;        /* "Display Key" */
-    CLIPFORMAT cfDisplayStateFlags; /* "Display State Flags" */
-    CLIPFORMAT cfPruningMode;       /* "Pruning Mode" */
-
-    PWSTR pDisplayDevice;
-    PWSTR pDisplayName;
-    PWSTR pDisplayKey;
-    PWSTR pDisplayId;
-    PWSTR pMonitorName;
-    PWSTR pMonitorDevice;
-
-    DESK_EXT_INTERFACE ExtInterface;
-
-    DWORD StateFlags;
-
-    union
-    {
-        DWORD Flags;
-        struct
-        {
-            DWORD bModesPruned : 1;
-            DWORD bKeyIsReadOnly : 1;
-            DWORD bPruningOn : 1;
-        };
-    };
-} CDevSettings, *PCDevSettings;
-
-#define impl_to_interface(impl,iface) (struct iface *)(&(impl)->lp##iface##Vtbl)
-
-static __inline PCDevSettings
-impl_from_IDataObject(struct IDataObject *iface)
-{
-    return (PCDevSettings)((ULONG_PTR)iface - FIELD_OFFSET(CDevSettings,
-                                                           lpIDataObjectVtbl));
-}
-
-static __inline VOID
-pCDevSettings_FreeString(PWCHAR *psz)
-{
-    if (*psz != NULL)
-    {
-        LocalFree((HLOCAL)*psz);
-        *psz = NULL;
-    }
-}
-
-static PWSTR
-pCDevSettings_AllocAndCopyString(const TCHAR *pszSrc)
-{
-    SIZE_T c;
-    PWSTR str;
-
-    c = _tcslen(pszSrc) + 1;
-    str = (PWSTR)LocalAlloc(LMEM_FIXED,
-                            c * sizeof(WCHAR));
-    if (str != NULL)
-    {
-#ifdef UNICODE
-        StringCbCopyW(str, c * sizeof(WCHAR),
-               pszSrc);
-#else
-        MultiByteToWideChar(CP_ACP,
-                            0,
-                            pszSrc,
-                            -1,
-                            str,
-                            c);
-#endif
-    }
-
-    return str;
-}
-
-static PWSTR
-pCDevSettings_GetMonitorName(const WCHAR *pszDisplayDevice)
-{
-    DISPLAY_DEVICEW dd, dd2;
-    PWSTR str = NULL;
-
-    dd.cb = sizeof(dd);
-    if (EnumDisplayDevicesW(pszDisplayDevice,
-                            0,
-                            &dd,
-                            0))
-    {
-        dd2.cb = sizeof(dd2);
-        if (EnumDisplayDevicesW(pszDisplayDevice,
-                                1,
-                                &dd2,
-                                0))
-        {
-            /* There's more than one monitor connected... */
-            LoadStringW(hApplet,
-                        IDS_MULTIPLEMONITORS,
-                        dd.DeviceString,
-                        sizeof(dd.DeviceString) / sizeof(dd.DeviceString[0]));
-        }
-    }
-    else
-    {
-        /* We can't enumerate a monitor, make sure this fact is reported
-           to the user! */
-        LoadStringW(hApplet,
-                    IDS_UNKNOWNMONITOR,
-                    dd.DeviceString,
-                    sizeof(dd.DeviceString) / sizeof(dd.DeviceString[0]));
-    }
-
-    str = LocalAlloc(LMEM_FIXED,
-                     (wcslen(dd.DeviceString) + 1) * sizeof(WCHAR));
-    if (str != NULL)
-    {
-        wcscpy(str,
-               dd.DeviceString);
-    }
-
-    return str;
-}
-
-static PWSTR
-pCDevSettings_GetMonitorDevice(const WCHAR *pszDisplayDevice)
-{
-    DISPLAY_DEVICEW dd;
-    PWSTR str = NULL;
-
-    dd.cb = sizeof(dd);
-    if (EnumDisplayDevicesW(pszDisplayDevice,
-                            0,
-                            &dd,
-                            0))
-    {
-        str = LocalAlloc(LMEM_FIXED,
-                         (wcslen(dd.DeviceName) + 1) * sizeof(WCHAR));
-        if (str != NULL)
-        {
-            wcscpy(str,
-                   dd.DeviceName);
-        }
-    }
-
-    return str;
-}
-
-static PWSTR
-pCDevSettings_GetDeviceInstanceId(const WCHAR *pszDevice)
-{
-    DEVINST DevInst;
-    CONFIGRET cr;
-    ULONG BufLen;
-    LPWSTR lpDevInstId = NULL;
-
-    DPRINT1("CDevSettings::GetDeviceInstanceId(%ws) UNIMPLEMENTED!\n", pszDevice);
-
-    cr = CM_Locate_DevNodeW(&DevInst,
-                            (DEVINSTID_W)pszDevice,
-                            CM_LOCATE_DEVNODE_NORMAL);
-    if (cr == CR_SUCCESS)
-    {
-        DPRINT1("Success1\n");
-        cr = CM_Get_Device_ID_Size(&BufLen,
-                                   DevInst,
-                                   0);
-        if (cr == CR_SUCCESS)
-        {
-            DPRINT1("Success2\n");
-            lpDevInstId = LocalAlloc(LMEM_FIXED,
-                                     (BufLen + 1) * sizeof(WCHAR));
-
-            if (lpDevInstId != NULL)
-            {
-                DPRINT1("Success3\n");
-                cr = CM_Get_Device_IDW(DevInst,
-                                       lpDevInstId,
-                                       BufLen,
-                                       0);
-
-                if (cr != CR_SUCCESS)
-                {
-                    LocalFree((HLOCAL)lpDevInstId);
-                    lpDevInstId = NULL;
-                }
-                DPRINT1("instance id: %ws\n", lpDevInstId);
-            }
-        }
-    }
-
-    return lpDevInstId;
-}
-
-
-static HKEY
-pCDevSettings_OpenDeviceKey(PCDevSettings This,
-                            BOOL ReadOnly)
-{
-    static const WCHAR szRegPrefix[] = L"\\Registry\\Machine\\";
-    PWSTR lpRegKey;
-    REGSAM Access = KEY_READ;
-    HKEY hKey;
-
-    lpRegKey = This->pDisplayKey;
-    if (lpRegKey != NULL)
-    {
-        if (wcslen(lpRegKey) >= wcslen(szRegPrefix) &&
-            !_wcsnicmp(lpRegKey,
-                      szRegPrefix,
-                      wcslen(szRegPrefix)))
-        {
-            lpRegKey += wcslen(szRegPrefix);
-        }
-
-        if (!ReadOnly)
-            Access |= KEY_WRITE;
-
-        if (RegOpenKeyEx(HKEY_LOCAL_MACHINE,
-                         lpRegKey,
-                         0,
-                         Access,
-                         &hKey) == ERROR_SUCCESS)
-        {
-            return hKey;
-        }
-    }
-
-    return NULL;
-}
-
-PDEVMODEW DESK_EXT_CALLBACK
-CDevSettings_EnumAllModes(PVOID Context,
-                          DWORD Index)
-{
-    //PCDevSettings This = impl_from_IDataObject((IDataObject *)Context);
-    /* FIXME: Implement */
-    DPRINT1("CDevSettings::EnumAllModes(%u)\n", Index);
-    return NULL;
-}
-
-PDEVMODEW DESK_EXT_CALLBACK
-CDevSettings_GetCurrentMode(PVOID Context)
-{
-    //PCDevSettings This = impl_from_IDataObject((IDataObject *)Context);
-    /* FIXME: Implement */
-    DPRINT1("CDevSettings::GetCurrentMode\n");
-    return NULL;
-}
-
-BOOL DESK_EXT_CALLBACK
-CDevSettings_SetCurrentMode(PVOID Context,
-                            const DEVMODEW *pDevMode)
-{
-    //PCDevSettings This = impl_from_IDataObject((IDataObject *)Context);
-    /* FIXME: Implement */
-    DPRINT1("CDevSettings::SetCurrentMode(0x%p)\n", pDevMode);
-    return FALSE;
-}
-
-VOID DESK_EXT_CALLBACK
-CDevSettings_GetPruningMode(PVOID Context,
-                            PBOOL pbModesPruned,
-                            PBOOL pbKeyIsReadOnly,
-                            PBOOL pbPruningOn)
-{
-    PCDevSettings This = impl_from_IDataObject((IDataObject *)Context);
-
-    DPRINT1("CDevSettings::GetPruningMode(%p,%p,%p)\n", pbModesPruned, pbKeyIsReadOnly, pbPruningOn);
-
-    *pbModesPruned = This->bModesPruned;
-    *pbKeyIsReadOnly = This->bKeyIsReadOnly;
-    *pbPruningOn = This->bPruningOn;
-}
-
-VOID DESK_EXT_CALLBACK
-CDevSettings_SetPruningMode(PVOID Context,
-                            BOOL PruningOn)
-{
-    HKEY hKey;
-    DWORD dwValue;
-    PCDevSettings This = impl_from_IDataObject((IDataObject *)Context);
-
-    DPRINT1("CDevSettings::SetPruningMode(%d)\n", PruningOn);
-
-    if (This->bModesPruned && !This->bKeyIsReadOnly &&
-        PruningOn != This->bPruningOn)
-    {
-        This->bPruningOn = (PruningOn != FALSE);
-
-        hKey = pCDevSettings_OpenDeviceKey(This,
-                                           FALSE);
-        if (hKey != NULL)
-        {
-            dwValue = (DWORD)This->bPruningOn;
-
-            RegSetValueEx(hKey,
-                          TEXT("PruningMode"),
-                          0,
-                          REG_DWORD,
-                          (const BYTE *)&dwValue,
-                          sizeof(dwValue));
-
-            RegCloseKey(hKey);
-        }
-    }
-}
-
-static VOID
-pCDevSettings_ReadHardwareInfo(HKEY hKey,
-                               LPCTSTR lpValueName,
-                               LPWSTR lpBuffer)
-{
-    DWORD type = REG_BINARY;
-    DWORD size = 128 * sizeof(WCHAR);
-    RegQueryValueEx(hKey,
-                    lpValueName,
-                    NULL,
-                    &type,
-                    (PBYTE)lpBuffer,
-                    &size);
-}
-
-static VOID
-pCDevSettings_InitializeExtInterface(PCDevSettings This)
-{
-    PDESK_EXT_INTERFACE Interface = &This->ExtInterface;
-    HKEY hKeyDev;
-
-    ZeroMemory(Interface,
-               sizeof(*Interface));
-    Interface->cbSize = sizeof(*Interface);
-
-    /* Initialize the callback table */
-    Interface->Context = impl_to_interface(This, IDataObject);
-    Interface->EnumAllModes = CDevSettings_EnumAllModes;
-    Interface->SetCurrentMode = CDevSettings_SetCurrentMode;
-    Interface->GetCurrentMode = CDevSettings_GetCurrentMode;
-    Interface->SetPruningMode = CDevSettings_SetPruningMode;
-    Interface->GetPruningMode = CDevSettings_GetPruningMode;
-
-    /* Read the HardwareInformation.* values from the registry key */
-    hKeyDev = pCDevSettings_OpenDeviceKey(This,
-                                          TRUE);
-    if (hKeyDev != NULL)
-    {
-        DWORD dwType, dwMemSize = 0;
-        DWORD dwSize = sizeof(dwMemSize);
-
-        if (RegQueryValueEx(hKeyDev,
-                            TEXT("HardwareInformation.MemorySize"),
-                            NULL,
-                            &dwType,
-                            (PBYTE)&dwMemSize,
-                            &dwSize) == ERROR_SUCCESS &&
-            (dwType == REG_BINARY || dwType == REG_DWORD) &&
-            dwSize == sizeof(dwMemSize))
-        {
-            dwMemSize /= 1024;
-
-            if (dwMemSize > 1024)
-            {
-                dwMemSize /= 1024;
-                if (dwMemSize > 1024)
-                {
-                    wsprintf(Interface->MemorySize,
-                             _T("%u GB"),
-                             dwMemSize / 1024);
-                }
-                else
-                {
-                    wsprintf(Interface->MemorySize,
-                             _T("%u MB"),
-                             dwMemSize);
-                }
-            }
-            else
-            {
-                wsprintf(Interface->MemorySize,
-                         _T("%u KB"),
-                         dwMemSize);
-            }
-        }
-
-        pCDevSettings_ReadHardwareInfo(hKeyDev,
-                                       TEXT("HardwareInformation.ChipType"),
-                                       Interface->ChipType);
-        pCDevSettings_ReadHardwareInfo(hKeyDev,
-                                       TEXT("HardwareInformation.DacType"),
-                                       Interface->DacType);
-        pCDevSettings_ReadHardwareInfo(hKeyDev,
-                                       TEXT("HardwareInformation.AdapterString"),
-                                       Interface->AdapterString);
-        pCDevSettings_ReadHardwareInfo(hKeyDev,
-                                       TEXT("HardwareInformation.BiosString"),
-                                       Interface->BiosString);
-        RegCloseKey(hKeyDev);
-    }
-}
-
-static HRESULT
-pCDevSettings_Initialize(PCDevSettings This,
-                         PDISPLAY_DEVICE_ENTRY DisplayDeviceInfo)
-{
-    HKEY hKey;
-
-    This->Flags = 0;
-    This->StateFlags = DisplayDeviceInfo->DeviceStateFlags;
-    DPRINT1("This->StateFlags: %x\n", This->StateFlags);
-
-    /* Register clipboard formats */
-    This->cfExtInterface = RegisterClipboardFormat(DESK_EXT_EXTINTERFACE);
-    This->cfDisplayDevice = RegisterClipboardFormat(DESK_EXT_DISPLAYDEVICE);
-    This->cfDisplayName = RegisterClipboardFormat(DESK_EXT_DISPLAYNAME);
-    This->cfDisplayId = RegisterClipboardFormat(DESK_EXT_DISPLAYID);
-    This->cfDisplayKey = RegisterClipboardFormat(DESK_EXT_DISPLAYKEY);
-    This->cfDisplayStateFlags = RegisterClipboardFormat(DESK_EXT_DISPLAYSTATEFLAGS);
-    This->cfMonitorName = RegisterClipboardFormat(DESK_EXT_MONITORNAME);
-    This->cfMonitorDevice = RegisterClipboardFormat(DESK_EXT_MONITORDEVICE);
-    This->cfPruningMode = RegisterClipboardFormat(DESK_EXT_PRUNINGMODE);
-
-    /* Copy the device name */
-    This->pDisplayDevice = pCDevSettings_AllocAndCopyString(DisplayDeviceInfo->DeviceName);
-    DPRINT1("This->pDisplayDevice: %ws\n", This->pDisplayDevice);
-    This->pDisplayName = pCDevSettings_AllocAndCopyString(DisplayDeviceInfo->DeviceDescription);
-    DPRINT1("This->pDisplayName: %ws\n", This->pDisplayName);
-    This->pDisplayKey = pCDevSettings_AllocAndCopyString(DisplayDeviceInfo->DeviceKey);
-    DPRINT1("This->pDisplayKey: %ws\n", This->pDisplayKey);
-    This->pDisplayId = pCDevSettings_GetDeviceInstanceId(DisplayDeviceInfo->DeviceID);
-    DPRINT1("This->pDisplayId: %ws\n", This->pDisplayId);
-    This->pMonitorName = pCDevSettings_GetMonitorName(This->pDisplayDevice);
-    DPRINT1("This->pMonitorName: %ws\n", This->pMonitorName);
-    This->pMonitorDevice = pCDevSettings_GetMonitorDevice(This->pDisplayDevice);
-    DPRINT1("This->pMonitorDevice: %ws\n", This->pMonitorDevice);
-
-    /* Check pruning mode */
-    This->bModesPruned = ((DisplayDeviceInfo->DeviceStateFlags & DISPLAY_DEVICE_MODESPRUNED) != 0);
-    hKey = pCDevSettings_OpenDeviceKey(This,
-                                       FALSE);
-    if (hKey == NULL)
-    {
-        hKey = pCDevSettings_OpenDeviceKey(This,
-                                           FALSE);
-        This->bKeyIsReadOnly = TRUE;
-    }
-    if (hKey != NULL)
-    {
-        DWORD dw = 0;
-        DWORD dwType, dwSize;
-
-        dwSize = sizeof(dw);
-        if (RegQueryValueEx(hKey,
-                            TEXT("PruningMode"),
-                            NULL,
-                            &dwType,
-                            (PBYTE)&dw,
-                            &dwSize) == ERROR_SUCCESS)
-        {
-            if (dwType == REG_DWORD && dwSize == sizeof(dw))
-                This->bPruningOn = (dw != 0);
-        }
-
-        RegCloseKey(hKey);
-    }
-
-    /* Initialize the shell extension interface */
-    pCDevSettings_InitializeExtInterface(This);
-
-    return S_OK;
-}
-
-static VOID
-pCDevSettings_Free(PCDevSettings This)
-{
-    pCDevSettings_FreeString(&This->pDisplayDevice);
-    pCDevSettings_FreeString(&This->pDisplayName);
-    pCDevSettings_FreeString(&This->pDisplayKey);
-    pCDevSettings_FreeString(&This->pDisplayId);
-    pCDevSettings_FreeString(&This->pMonitorName);
-    pCDevSettings_FreeString(&This->pMonitorDevice);
-}
-
-static HRESULT STDMETHODCALLTYPE
-CDevSettings_QueryInterface(IDataObject* iface,
-                            REFIID riid,
-                            void** ppvObject)
-{
-    PCDevSettings This = impl_from_IDataObject(iface);
-
-    *ppvObject = NULL;
-
-    if (IsEqualGUID(riid,
-                    &IID_IUnknown) ||
-        IsEqualGUID(riid,
-                    &IID_IDataObject))
-    {
-        *ppvObject = (PVOID)impl_to_interface(This, IDataObject);
-        return S_OK;
-    }
-    else
-    {
-        DPRINT1("CDevSettings::QueryInterface: Queried unknown interface\n");
-    }
-
-    return E_NOINTERFACE;
-}
-
-static ULONG STDMETHODCALLTYPE
-CDevSettings_AddRef(IDataObject* iface)
-{
-    PCDevSettings This = impl_from_IDataObject(iface);
-    return (ULONG)InterlockedIncrement((PLONG)&This->ref);
-}
-
-static ULONG STDMETHODCALLTYPE
-CDevSettings_Release(IDataObject* iface)
-{
-    ULONG refs;
-    PCDevSettings This = impl_from_IDataObject(iface);
-    refs = (ULONG)InterlockedDecrement((PLONG)&This->ref);
-    if (refs == 0)
-        pCDevSettings_Free(This);
-
-    return refs;
-}
-
-static HRESULT STDMETHODCALLTYPE
-CDevSettings_GetData(IDataObject* iface,
-                     FORMATETC* pformatetcIn,
-                     STGMEDIUM* pmedium)
-{
-    static const WCHAR szEmpty[] = {0};
-    HRESULT hr;
-    PCWSTR pszRet = NULL;
-    PWSTR pszBuf;
-    PCDevSettings This = impl_from_IDataObject(iface);
-
-    ZeroMemory(pmedium,
-               sizeof(STGMEDIUM));
-
-    hr = IDataObject_QueryGetData(iface,
-                                  pformatetcIn);
-    if (SUCCEEDED(hr))
-    {
-        /* Return the requested data back to the shell extension */
-
-        if (pformatetcIn->cfFormat == This->cfDisplayDevice)
-        {
-            pszRet = This->pDisplayDevice;
-            DPRINT1("CDevSettings::GetData returns display device %ws\n", pszRet);
-        }
-        else if (pformatetcIn->cfFormat == This->cfDisplayName)
-        {
-            pszRet = This->pDisplayName;
-            DPRINT1("CDevSettings::GetData returns display name %ws\n", pszRet);
-        }
-        else if (pformatetcIn->cfFormat == This->cfDisplayKey)
-        {
-            pszRet = This->pDisplayKey;
-            DPRINT1("CDevSettings::GetData returns display key %ws\n", pszRet);
-        }
-        else if (pformatetcIn->cfFormat == This->cfDisplayId)
-        {
-            pszRet = This->pDisplayId;
-            DPRINT1("CDevSettings::GetData returns display id %ws\n", pszRet);
-        }
-        else if (pformatetcIn->cfFormat == This->cfMonitorName)
-        {
-            pszRet = This->pMonitorName;
-            DPRINT1("CDevSettings::GetData returns monitor name %ws\n", pszRet);
-        }
-        else if (pformatetcIn->cfFormat == This->cfMonitorDevice)
-        {
-            pszRet = This->pMonitorDevice;
-            DPRINT1("CDevSettings::GetData returns monitor device %ws\n", pszRet);
-        }
-        else if (pformatetcIn->cfFormat == This->cfExtInterface)
-        {
-            PDESK_EXT_INTERFACE pIface;
-
-            pIface = GlobalAlloc(GPTR,
-                                 sizeof(*pIface));
-            if (pIface != NULL)
-            {
-                CopyMemory(pIface,
-                           &This->ExtInterface,
-                           sizeof(This->ExtInterface));
-
-                DPRINT1("CDevSettings::GetData returns the desk.cpl extension interface\n");
-
-                pmedium->tymed = TYMED_HGLOBAL;
-                pmedium->hGlobal = pIface;
-
-                return S_OK;
-            }
-            else
-                return E_OUTOFMEMORY;
-        }
-        else if (pformatetcIn->cfFormat == This->cfDisplayStateFlags)
-        {
-            PDWORD pdw;
-
-            pdw = GlobalAlloc(GPTR,
-                              sizeof(*pdw));
-            if (pdw != NULL)
-            {
-                *pdw = This->StateFlags;
-
-                DPRINT1("CDevSettings::GetData returns the display state flags %x\n", This->StateFlags);
-
-                pmedium->tymed = TYMED_HGLOBAL;
-                pmedium->hGlobal = pdw;
-
-                return S_OK;
-            }
-            else
-                return E_OUTOFMEMORY;
-        }
-        else if (pformatetcIn->cfFormat == This->cfPruningMode)
-        {
-            PBYTE pb;
-
-            pb = GlobalAlloc(GPTR,
-                             sizeof(*pb));
-            if (pb != NULL)
-            {
-                *pb = (This->bModesPruned && This->bPruningOn);
-
-                pmedium->tymed = TYMED_HGLOBAL;
-                pmedium->hGlobal = pb;
-
-                return S_OK;
-            }
-            else
-                return E_OUTOFMEMORY;
-        }
-
-        /* NOTE: This only returns null-terminated strings! */
-        if (pszRet == NULL)
-            pszRet = szEmpty;
-
-        pszBuf = GlobalAlloc(GPTR,
-                             (wcslen(pszRet) + 1) * sizeof(WCHAR));
-        if (pszBuf != NULL)
-        {
-            hr = StringCbCopy(pszBuf, (wcslen(pszRet) + 1) * sizeof(WCHAR), pszRet);
-            if (FAILED(hr))
-            {
-                GlobalFree(pszBuf);
-                return hr;
-            }
-
-            pmedium->tymed = TYMED_HGLOBAL;
-            pmedium->hGlobal = pszBuf;
-
-            hr = S_OK;
-        }
-        else
-            hr = E_OUTOFMEMORY;
-    }
-
-    return hr;
-}
-
-static HRESULT STDMETHODCALLTYPE
-CDevSettings_GetDataHere(IDataObject* iface,
-                         FORMATETC* pformatetc,
-                         STGMEDIUM* pmedium)
-{
-    ZeroMemory(pformatetc,
-               sizeof(*pformatetc));
-    return E_NOTIMPL;
-}
-
-static HRESULT STDMETHODCALLTYPE
-CDevSettings_QueryGetData(IDataObject* iface,
-                          FORMATETC* pformatetc)
-{
-#if DEBUG
-    TCHAR szFormatName[255];
-#endif
-    PCDevSettings This = impl_from_IDataObject(iface);
-
-    if (pformatetc->dwAspect != DVASPECT_CONTENT)
-        return DV_E_DVASPECT;
-
-    if (pformatetc->lindex != -1)
-        return DV_E_LINDEX;
-
-    if (!(pformatetc->tymed & TYMED_HGLOBAL))
-        return DV_E_TYMED;
-
-    /* Check if the requested data can be provided */
-    if (pformatetc->cfFormat == This->cfExtInterface ||
-        pformatetc->cfFormat == This->cfDisplayDevice ||
-        pformatetc->cfFormat == This->cfDisplayName ||
-        pformatetc->cfFormat == This->cfDisplayId ||
-        pformatetc->cfFormat == This->cfDisplayKey ||
-        pformatetc->cfFormat == This->cfDisplayStateFlags ||
-        pformatetc->cfFormat == This->cfMonitorDevice ||
-        pformatetc->cfFormat == This->cfMonitorName ||
-        pformatetc->cfFormat == This->cfPruningMode)
-    {
-        return S_OK;
-    }
-#if DEBUG
-    else
-    {
-        if (GetClipboardFormatName(pformatetc->cfFormat,
-                                   szFormatName,
-                                   sizeof(szFormatName) / sizeof(szFormatName[0])))
-        {
-            DPRINT1("CDevSettings::QueryGetData(\"%ws\")\n", szFormatName);
-        }
-        else
-        {
-            DPRINT1("CDevSettings::QueryGetData(Format %u)\n", (unsigned int)pformatetc->cfFormat);
-        }
-    }
-#endif
-
-    return DV_E_FORMATETC;
-}
-
-static HRESULT STDMETHODCALLTYPE
-CDevSettings_GetCanonicalFormatEtc(IDataObject* iface,
-                                   FORMATETC* pformatectIn,
-                                   FORMATETC* pformatetcOut)
-{
-    HRESULT hr;
-
-    DPRINT1("CDevSettings::GetCanonicalFormatEtc\n");
-
-    hr = IDataObject_QueryGetData(iface,
-                                  pformatectIn);
-    if (SUCCEEDED(hr))
-    {
-        CopyMemory(pformatetcOut,
-                   pformatectIn,
-                   sizeof(FORMATETC));
-
-        /* Make sure the data is target device independent */
-        if (pformatectIn->ptd == NULL)
-            hr = DATA_S_SAMEFORMATETC;
-        else
-        {
-            pformatetcOut->ptd = NULL;
-            hr = S_OK;
-        }
-    }
-    else
-    {
-        ZeroMemory(pformatetcOut,
-                   sizeof(FORMATETC));
-    }
-
-    return hr;
-}
-
-static HRESULT STDMETHODCALLTYPE
-CDevSettings_SetData(IDataObject* iface,
-                     FORMATETC* pformatetc,
-                     STGMEDIUM* pmedium,
-                     BOOL fRelease)
-{
-    DPRINT1("CDevSettings::SetData UNIMPLEMENTED\n");
-    return E_NOTIMPL;
-}
-
-static __inline VOID
-pCDevSettings_FillFormatEtc(FORMATETC *pFormatEtc,
-                            CLIPFORMAT cf)
-{
-    pFormatEtc->cfFormat = cf;
-    pFormatEtc->ptd = NULL;
-    pFormatEtc->dwAspect = DVASPECT_CONTENT;
-    pFormatEtc->lindex = -1;
-    pFormatEtc->tymed = TYMED_HGLOBAL;
-}
-
-static HRESULT STDMETHODCALLTYPE
-CDevSettings_EnumFormatEtc(IDataObject* iface,
-                           DWORD dwDirection,
-                           IEnumFORMATETC** ppenumFormatEtc)
-{
-    HRESULT hr;
-    FORMATETC fetc[9];
-    PCDevSettings This = impl_from_IDataObject(iface);
-
-    *ppenumFormatEtc = NULL;
-
-    if (dwDirection == DATADIR_GET)
-    {
-        pCDevSettings_FillFormatEtc(&fetc[0],
-                                    This->cfExtInterface);
-        pCDevSettings_FillFormatEtc(&fetc[1],
-                                    This->cfDisplayDevice);
-        pCDevSettings_FillFormatEtc(&fetc[2],
-                                    This->cfDisplayName);
-        pCDevSettings_FillFormatEtc(&fetc[3],
-                                    This->cfDisplayId);
-        pCDevSettings_FillFormatEtc(&fetc[4],
-                                    This->cfDisplayKey);
-        pCDevSettings_FillFormatEtc(&fetc[5],
-                                    This->cfDisplayStateFlags);
-        pCDevSettings_FillFormatEtc(&fetc[6],
-                                    This->cfMonitorName);
-        pCDevSettings_FillFormatEtc(&fetc[7],
-                                    This->cfMonitorDevice);
-        pCDevSettings_FillFormatEtc(&fetc[8],
-                                    This->cfPruningMode);
-
-        hr = SHCreateStdEnumFmtEtc(sizeof(fetc) / sizeof(fetc[0]),
-                                   fetc,
-                                   ppenumFormatEtc);
-    }
-    else
-        hr = E_NOTIMPL;
-
-    return hr;
-}
-
-static HRESULT STDMETHODCALLTYPE
-CDevSettings_DAdvise(IDataObject* iface,
-                     FORMATETC* pformatetc,
-                     DWORD advf,
-                     IAdviseSink* pAdvSink,
-                     DWORD* pdwConnection)
-{
-    *pdwConnection = 0;
-    return OLE_E_ADVISENOTSUPPORTED;
-}
-
-static HRESULT STDMETHODCALLTYPE
-CDevSettings_DUnadvise(IDataObject* iface,
-                       DWORD dwConnection)
-{
-    return OLE_E_ADVISENOTSUPPORTED;
-}
-
-static HRESULT STDMETHODCALLTYPE
-CDevSettings_EnumDAdvise(IDataObject* iface,
-                         IEnumSTATDATA** ppenumAdvise)
-{
-    *ppenumAdvise = NULL;
-    return OLE_E_ADVISENOTSUPPORTED;
-}
-
-static const struct IDataObjectVtbl vtblIDataObject = {
-    CDevSettings_QueryInterface,
-    CDevSettings_AddRef,
-    CDevSettings_Release,
-    CDevSettings_GetData,
-    CDevSettings_GetDataHere,
-    CDevSettings_QueryGetData,
-    CDevSettings_GetCanonicalFormatEtc,
-    CDevSettings_SetData,
-    CDevSettings_EnumFormatEtc,
-    CDevSettings_DAdvise,
-    CDevSettings_DUnadvise,
-    CDevSettings_EnumDAdvise,
-};
-
-IDataObject *
-CreateDevSettings(PDISPLAY_DEVICE_ENTRY DisplayDeviceInfo)
-{
-    PCDevSettings This;
-
-    This = HeapAlloc(GetProcessHeap(),
-                     0,
-                     sizeof(*This));
-    if (This != NULL)
-    {
-        This->lpIDataObjectVtbl = &vtblIDataObject;
-        This->ref = 1;
-
-        if (SUCCEEDED(pCDevSettings_Initialize(This,
-                                               DisplayDeviceInfo)))
-        {
-            return impl_to_interface(This, IDataObject);
-        }
-
-        CDevSettings_Release(impl_to_interface(This, IDataObject));
-    }
-
-    return NULL;
-}
-
-LONG WINAPI
-DisplaySaveSettings(PVOID pContext,
-                    HWND hwndPropSheet)
-{
-    //PCDevSettings This = impl_from_IDataObject((IDataObject *)Context);
-    DPRINT("DisplaySaveSettings() UNIMPLEMENTED!\n");
-    return DISP_CHANGE_BADPARAM;
-}