mirror of
https://github.com/reactos/reactos.git
synced 2025-02-24 01:15:09 +00:00
Add initial implementation of the display adapter desk.cpl shell extension
svn path=/trunk/; revision=29217
This commit is contained in:
parent
8e049e50a4
commit
45dc31ac0b
12 changed files with 561 additions and 0 deletions
|
@ -55,6 +55,7 @@
|
||||||
<property name="BASEADDRESS_URLMON" value="0x6b3c0000" />
|
<property name="BASEADDRESS_URLMON" value="0x6b3c0000" />
|
||||||
<property name="BASEADDRESS_SERIALUI" value="0x6b3D0000" />
|
<property name="BASEADDRESS_SERIALUI" value="0x6b3D0000" />
|
||||||
<property name="BASEADDRESS_WINSTA" value="0x6b3D0000" />
|
<property name="BASEADDRESS_WINSTA" value="0x6b3D0000" />
|
||||||
|
<property name="BASEADDRESS_DESKADP" value="0x6d410000" />
|
||||||
<property name="BASEADDRESS_WLDAP32" value="0x6e130000" />
|
<property name="BASEADDRESS_WLDAP32" value="0x6e130000" />
|
||||||
<property name="BASEADDRESS_CLB" value="0x6f2b0000" />
|
<property name="BASEADDRESS_CLB" value="0x6f2b0000" />
|
||||||
<property name="BASEADDRESS_CARDS" value="0x701a0000" />
|
<property name="BASEADDRESS_CARDS" value="0x701a0000" />
|
||||||
|
|
218
reactos/dll/win32/shellext/deskadp/deskadp.c
Normal file
218
reactos/dll/win32/shellext/deskadp/deskadp.c
Normal file
|
@ -0,0 +1,218 @@
|
||||||
|
#include "precomp.h"
|
||||||
|
|
||||||
|
#define NDEBUG
|
||||||
|
#include <debug.h>
|
||||||
|
|
||||||
|
static HINSTANCE hInstance;
|
||||||
|
|
||||||
|
static INT_PTR CALLBACK
|
||||||
|
DisplayAdapterDlgProc(HWND hwndDlg,
|
||||||
|
UINT uMsg,
|
||||||
|
WPARAM wParam,
|
||||||
|
LPARAM lParam)
|
||||||
|
{
|
||||||
|
PDESKDISPLAYADAPTER This;
|
||||||
|
INT_PTR Ret = 0;
|
||||||
|
|
||||||
|
if (uMsg != WM_INITDIALOG)
|
||||||
|
{
|
||||||
|
This = (PDESKDISPLAYADAPTER)GetWindowLongPtr(hwndDlg,
|
||||||
|
DWL_USER);
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (uMsg)
|
||||||
|
{
|
||||||
|
case WM_INITDIALOG:
|
||||||
|
This = (PDESKDISPLAYADAPTER)((LPCPROPSHEETPAGE)lParam)->lParam;
|
||||||
|
SetWindowLongPtr(hwndDlg,
|
||||||
|
DWL_USER,
|
||||||
|
(LONG_PTR)This);
|
||||||
|
|
||||||
|
Ret = TRUE;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return Ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
static VOID
|
||||||
|
IDeskDisplayAdapter_Destroy(PDESKDISPLAYADAPTER This)
|
||||||
|
{
|
||||||
|
if (This->pdtobj != NULL)
|
||||||
|
{
|
||||||
|
IDataObject_Release(This->pdtobj);
|
||||||
|
This->pdtobj = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (This->DeskExtInterface != NULL)
|
||||||
|
{
|
||||||
|
LocalFree((HLOCAL)This->DeskExtInterface);
|
||||||
|
This->DeskExtInterface = NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
ULONG
|
||||||
|
IDeskDisplayAdapter_AddRef(PDESKDISPLAYADAPTER This)
|
||||||
|
{
|
||||||
|
ULONG ret;
|
||||||
|
|
||||||
|
ret = InterlockedIncrement((PLONG)&This->ref);
|
||||||
|
if (ret == 1)
|
||||||
|
InterlockedIncrement(&dll_refs);
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
ULONG
|
||||||
|
IDeskDisplayAdapter_Release(PDESKDISPLAYADAPTER This)
|
||||||
|
{
|
||||||
|
ULONG ret;
|
||||||
|
|
||||||
|
ret = InterlockedDecrement((PLONG)&This->ref);
|
||||||
|
if (ret == 0)
|
||||||
|
{
|
||||||
|
IDeskDisplayAdapter_Destroy(This);
|
||||||
|
InterlockedDecrement(&dll_refs);
|
||||||
|
|
||||||
|
HeapFree(GetProcessHeap(),
|
||||||
|
0,
|
||||||
|
This);
|
||||||
|
}
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
HRESULT STDMETHODCALLTYPE
|
||||||
|
IDeskDisplayAdapter_QueryInterface(PDESKDISPLAYADAPTER This,
|
||||||
|
REFIID iid,
|
||||||
|
PVOID *pvObject)
|
||||||
|
{
|
||||||
|
*pvObject = NULL;
|
||||||
|
|
||||||
|
if (IsEqualIID(iid,
|
||||||
|
&IID_IShellPropSheetExt) ||
|
||||||
|
IsEqualIID(iid,
|
||||||
|
&IID_IUnknown))
|
||||||
|
{
|
||||||
|
*pvObject = impl_to_interface(This, IShellPropSheetExt);
|
||||||
|
}
|
||||||
|
else if (IsEqualIID(iid,
|
||||||
|
&IID_IShellExtInit))
|
||||||
|
{
|
||||||
|
*pvObject = impl_to_interface(This, IShellExtInit);
|
||||||
|
}
|
||||||
|
else if (IsEqualIID(iid,
|
||||||
|
&IID_IClassFactory))
|
||||||
|
{
|
||||||
|
*pvObject = impl_to_interface(This, IClassFactory);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
DPRINT1("IDeskDisplayAdapter::QueryInterface(%p,%p): E_NOINTERFACE\n", iid, pvObject);
|
||||||
|
return E_NOINTERFACE;
|
||||||
|
}
|
||||||
|
|
||||||
|
IDeskDisplayAdapter_AddRef(This);
|
||||||
|
return S_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
HRESULT
|
||||||
|
IDeskDisplayAdapter_Initialize(PDESKDISPLAYADAPTER This,
|
||||||
|
LPCITEMIDLIST pidlFolder,
|
||||||
|
IDataObject *pdtobj,
|
||||||
|
HKEY hkeyProgID)
|
||||||
|
{
|
||||||
|
DPRINT1("IDeskDisplayAdapter::Initialize(%p,%p,%p)\n", pidlFolder, pdtobj, hkeyProgID);
|
||||||
|
|
||||||
|
if (pdtobj != NULL)
|
||||||
|
{
|
||||||
|
IDataObject_AddRef(pdtobj);
|
||||||
|
This->pdtobj = pdtobj;
|
||||||
|
|
||||||
|
/* Get a copy of the desk.cpl extension interface */
|
||||||
|
This->DeskExtInterface = QueryDeskCplExtInterface(This->pdtobj);
|
||||||
|
if (This->DeskExtInterface != NULL)
|
||||||
|
return S_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
return S_FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
HRESULT
|
||||||
|
IDeskDisplayAdapter_AddPages(PDESKDISPLAYADAPTER This,
|
||||||
|
LPFNADDPROPSHEETPAGE pfnAddPage,
|
||||||
|
LPARAM lParam)
|
||||||
|
{
|
||||||
|
HPROPSHEETPAGE hpsp;
|
||||||
|
PROPSHEETPAGE psp;
|
||||||
|
|
||||||
|
DPRINT1("IDeskDisplayAdapter::AddPages(%p,%p)\n", pfnAddPage, lParam);
|
||||||
|
|
||||||
|
psp.dwSize = sizeof(psp);
|
||||||
|
psp.dwFlags = PSP_DEFAULT;
|
||||||
|
psp.hInstance = hInstance;
|
||||||
|
psp.pszTemplate = MAKEINTRESOURCE(IDD_DISPLAYADAPTER);
|
||||||
|
psp.pfnDlgProc = DisplayAdapterDlgProc;
|
||||||
|
psp.lParam = (LPARAM)This;
|
||||||
|
|
||||||
|
hpsp = CreatePropertySheetPage(&psp);
|
||||||
|
if (hpsp != NULL && pfnAddPage(hpsp, lParam))
|
||||||
|
return S_OK;
|
||||||
|
|
||||||
|
return S_FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
HRESULT
|
||||||
|
IDeskDisplayAdapter_ReplacePage(PDESKDISPLAYADAPTER This,
|
||||||
|
EXPPS uPageID,
|
||||||
|
LPFNADDPROPSHEETPAGE pfnReplacePage,
|
||||||
|
LPARAM lParam)
|
||||||
|
{
|
||||||
|
DPRINT1("IDeskDisplayAdapter::ReplacePage(%u,%p,%p)\n", uPageID, pfnReplacePage, lParam);
|
||||||
|
return E_NOTIMPL;
|
||||||
|
}
|
||||||
|
|
||||||
|
HRESULT
|
||||||
|
IDeskDisplayAdapter_Constructor(REFIID riid,
|
||||||
|
LPVOID *ppv)
|
||||||
|
{
|
||||||
|
PDESKDISPLAYADAPTER This;
|
||||||
|
HRESULT hRet = E_OUTOFMEMORY;
|
||||||
|
|
||||||
|
DPRINT1("IDeskDisplayAdapter::Constructor(%p,%p)\n", riid, ppv);
|
||||||
|
|
||||||
|
This = HeapAlloc(GetProcessHeap(),
|
||||||
|
0,
|
||||||
|
sizeof(*This));
|
||||||
|
if (This != NULL)
|
||||||
|
{
|
||||||
|
ZeroMemory(This,
|
||||||
|
sizeof(*This));
|
||||||
|
|
||||||
|
IDeskDisplayAdapter_InitIface(This);
|
||||||
|
|
||||||
|
hRet = IDeskDisplayAdapter_QueryInterface(This,
|
||||||
|
riid,
|
||||||
|
ppv);
|
||||||
|
if (!SUCCEEDED(hRet))
|
||||||
|
IDeskDisplayAdapter_Release(This);
|
||||||
|
}
|
||||||
|
|
||||||
|
return hRet;
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOL STDCALL
|
||||||
|
DllMain(HINSTANCE hinstDLL,
|
||||||
|
DWORD dwReason,
|
||||||
|
LPVOID lpvReserved)
|
||||||
|
{
|
||||||
|
switch (dwReason)
|
||||||
|
{
|
||||||
|
case DLL_PROCESS_ATTACH:
|
||||||
|
hInstance = hinstDLL;
|
||||||
|
DisableThreadLibraryCalls(hInstance);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
59
reactos/dll/win32/shellext/deskadp/deskadp.h
Normal file
59
reactos/dll/win32/shellext/deskadp/deskadp.h
Normal file
|
@ -0,0 +1,59 @@
|
||||||
|
#ifndef __DESKADP__H
|
||||||
|
#define __DESKADP__H
|
||||||
|
|
||||||
|
typedef struct _DESKDISPLAYADAPTER
|
||||||
|
{
|
||||||
|
const struct IShellPropSheetExtVtbl *lpIShellPropSheetExtVtbl;
|
||||||
|
const struct IShellExtInitVtbl *lpIShellExtInitVtbl;
|
||||||
|
const struct IClassFactoryVtbl *lpIClassFactoryVtbl;
|
||||||
|
DWORD ref;
|
||||||
|
|
||||||
|
PDESK_EXT_INTERFACE DeskExtInterface;
|
||||||
|
IDataObject *pdtobj;
|
||||||
|
} DESKDISPLAYADAPTER, *PDESKDISPLAYADAPTER;
|
||||||
|
|
||||||
|
extern LONG dll_refs;
|
||||||
|
|
||||||
|
#define impl_to_interface(impl,iface) (struct iface *)(&(impl)->lp##iface##Vtbl)
|
||||||
|
#define interface_to_impl(instance,iface) ((PDESKDISPLAYADAPTER)((ULONG_PTR)instance - FIELD_OFFSET(DESKDISPLAYADAPTER,lp##iface##Vtbl)))
|
||||||
|
|
||||||
|
HRESULT
|
||||||
|
IDeskDisplayAdapter_Constructor(REFIID riid,
|
||||||
|
LPVOID *ppv);
|
||||||
|
|
||||||
|
VOID
|
||||||
|
IDeskDisplayAdapter_InitIface(PDESKDISPLAYADAPTER This);
|
||||||
|
|
||||||
|
HRESULT STDMETHODCALLTYPE
|
||||||
|
IDeskDisplayAdapter_QueryInterface(PDESKDISPLAYADAPTER This,
|
||||||
|
REFIID iid,
|
||||||
|
PVOID *pvObject);
|
||||||
|
|
||||||
|
ULONG
|
||||||
|
IDeskDisplayAdapter_AddRef(PDESKDISPLAYADAPTER This);
|
||||||
|
|
||||||
|
ULONG
|
||||||
|
IDeskDisplayAdapter_Release(PDESKDISPLAYADAPTER This);
|
||||||
|
|
||||||
|
HRESULT
|
||||||
|
IDeskDisplayAdapter_Initialize(PDESKDISPLAYADAPTER This,
|
||||||
|
LPCITEMIDLIST pidlFolder,
|
||||||
|
IDataObject *pdtobj,
|
||||||
|
HKEY hkeyProgID);
|
||||||
|
|
||||||
|
HRESULT
|
||||||
|
IDeskDisplayAdapter_AddPages(PDESKDISPLAYADAPTER This,
|
||||||
|
LPFNADDPROPSHEETPAGE pfnAddPage,
|
||||||
|
LPARAM lParam);
|
||||||
|
|
||||||
|
HRESULT
|
||||||
|
IDeskDisplayAdapter_ReplacePage(PDESKDISPLAYADAPTER This,
|
||||||
|
EXPPS uPageID,
|
||||||
|
LPFNADDPROPSHEETPAGE pfnReplacePage,
|
||||||
|
LPARAM lParam);
|
||||||
|
|
||||||
|
static const GUID CLSID_IDeskDisplayAdapter = {0x42071712,0x76d4,0x11d1,{0x8b,0x24,0x00,0xa0,0xc9,0x06,0x8f,0xf3}};
|
||||||
|
|
||||||
|
ULONG __cdecl DbgPrint(PCCH Format,...);
|
||||||
|
|
||||||
|
#endif /* __DESKADP__H */
|
21
reactos/dll/win32/shellext/deskadp/deskadp.rbuild
Normal file
21
reactos/dll/win32/shellext/deskadp/deskadp.rbuild
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
<module name="deskadp" type="win32dll" baseaddress="${BASEADDRESS_DESKADP}" installbase="system32" installname="deskadp.dll" unicode="yes">
|
||||||
|
<importlibrary definition="deskadp.spec.def" />
|
||||||
|
<include base="deskadp">.</include>
|
||||||
|
<define name="__USE_W32API" />
|
||||||
|
<define name="_WIN32_IE">0x0500</define>
|
||||||
|
<define name="_WIN32_WINNT">0x0600</define>
|
||||||
|
<define name="WINVER">0x0600</define>
|
||||||
|
<library>ntdll</library>
|
||||||
|
<library>kernel32</library>
|
||||||
|
<library>user32</library>
|
||||||
|
<library>gdi32</library>
|
||||||
|
<library>comctl32</library>
|
||||||
|
<library>ole32</library>
|
||||||
|
<library>uuid</library>
|
||||||
|
<library>msvcrt</library>
|
||||||
|
<file>deskadp.c</file>
|
||||||
|
<file>shxiface.c</file>
|
||||||
|
<file>deskadp.rc</file>
|
||||||
|
<file>deskadp.spec</file>
|
||||||
|
<pch>precomp.h</pch>
|
||||||
|
</module>
|
12
reactos/dll/win32/shellext/deskadp/deskadp.rc
Normal file
12
reactos/dll/win32/shellext/deskadp/deskadp.rc
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
/* $Id: slayer.rc 24931 2006-11-28 19:35:42Z janderwald $ */
|
||||||
|
|
||||||
|
#include <windows.h>
|
||||||
|
#include "resource.h"
|
||||||
|
|
||||||
|
#define REACTOS_VERSION_DLL
|
||||||
|
#define REACTOS_STR_FILE_DESCRIPTION "ReactOS Advanced display adapter properties\0"
|
||||||
|
#define REACTOS_STR_INTERNAL_NAME "deskadp\0"
|
||||||
|
#define REACTOS_STR_ORIGINAL_FILENAME "deskadp.dll\0"
|
||||||
|
#include <reactos/version.rc>
|
||||||
|
|
||||||
|
#include "rsrc.rc"
|
4
reactos/dll/win32/shellext/deskadp/deskadp.spec
Normal file
4
reactos/dll/win32/shellext/deskadp/deskadp.spec
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
# deskadp.dll exports
|
||||||
|
|
||||||
|
1 stdcall DllCanUnloadNow()
|
||||||
|
2 stdcall DllGetClassObject(ptr ptr ptr)
|
10
reactos/dll/win32/shellext/deskadp/lang/en-US.rc
Normal file
10
reactos/dll/win32/shellext/deskadp/lang/en-US.rc
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
|
||||||
|
|
||||||
|
IDD_DISPLAYADAPTER DIALOGEX 0, 0, 224, 226
|
||||||
|
STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_DISABLED | WS_CAPTION
|
||||||
|
CAPTION "Adapter"
|
||||||
|
FONT 8, "MS Shell Dlg", 0, 0, 0x0
|
||||||
|
BEGIN
|
||||||
|
|
||||||
|
END
|
||||||
|
|
11
reactos/dll/win32/shellext/deskadp/precomp.h
Normal file
11
reactos/dll/win32/shellext/deskadp/precomp.h
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
#ifndef __PRECOMP__H
|
||||||
|
#define __PRECOMP__H
|
||||||
|
|
||||||
|
#define COBJMACROS
|
||||||
|
#include <windows.h>
|
||||||
|
#include <shlobj.h>
|
||||||
|
#include <dll/desk/deskcplx.h>
|
||||||
|
#include "deskadp.h"
|
||||||
|
#include "resource.h"
|
||||||
|
|
||||||
|
#endif /* __PRECOMP__H */
|
6
reactos/dll/win32/shellext/deskadp/resource.h
Normal file
6
reactos/dll/win32/shellext/deskadp/resource.h
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
#ifndef __RESOURCE__H
|
||||||
|
#define __RESOURCE__H
|
||||||
|
|
||||||
|
#define IDD_DISPLAYADAPTER 100
|
||||||
|
|
||||||
|
#endif /* __RESOURCE__H */
|
7
reactos/dll/win32/shellext/deskadp/rsrc.rc
Normal file
7
reactos/dll/win32/shellext/deskadp/rsrc.rc
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
#include <windows.h>
|
||||||
|
#include "resource.h"
|
||||||
|
|
||||||
|
LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
|
||||||
|
|
||||||
|
#include "lang/en-US.rc"
|
||||||
|
|
209
reactos/dll/win32/shellext/deskadp/shxiface.c
Normal file
209
reactos/dll/win32/shellext/deskadp/shxiface.c
Normal file
|
@ -0,0 +1,209 @@
|
||||||
|
#include "precomp.h"
|
||||||
|
|
||||||
|
#define NDEBUG
|
||||||
|
#include <debug.h>
|
||||||
|
|
||||||
|
LONG dll_refs = 0;
|
||||||
|
|
||||||
|
static HRESULT STDMETHODCALLTYPE
|
||||||
|
IDeskDisplayAdapter_IShellPropSheetExt_QueryInterface(IShellPropSheetExt *iface,
|
||||||
|
REFIID iid,
|
||||||
|
PVOID *pvObject)
|
||||||
|
{
|
||||||
|
PDESKDISPLAYADAPTER This = interface_to_impl(iface, IShellPropSheetExt);
|
||||||
|
return IDeskDisplayAdapter_QueryInterface(This,
|
||||||
|
iid,
|
||||||
|
pvObject);
|
||||||
|
}
|
||||||
|
|
||||||
|
static ULONG STDMETHODCALLTYPE
|
||||||
|
IDeskDisplayAdapter_IShellPropSheetExt_AddRef(IShellPropSheetExt* iface)
|
||||||
|
{
|
||||||
|
PDESKDISPLAYADAPTER This = interface_to_impl(iface, IShellPropSheetExt);
|
||||||
|
return IDeskDisplayAdapter_AddRef(This);
|
||||||
|
}
|
||||||
|
|
||||||
|
static ULONG STDMETHODCALLTYPE
|
||||||
|
IDeskDisplayAdapter_IShellPropSheetExt_Release(IShellPropSheetExt* iface)
|
||||||
|
{
|
||||||
|
PDESKDISPLAYADAPTER This = interface_to_impl(iface, IShellPropSheetExt);
|
||||||
|
return IDeskDisplayAdapter_Release(This);
|
||||||
|
}
|
||||||
|
|
||||||
|
static HRESULT STDMETHODCALLTYPE
|
||||||
|
IDeskDisplayAdapter_IShellPropSheetExt_AddPages(IShellPropSheetExt* iface,
|
||||||
|
LPFNADDPROPSHEETPAGE pfnAddPage,
|
||||||
|
LPARAM lParam)
|
||||||
|
{
|
||||||
|
PDESKDISPLAYADAPTER This = interface_to_impl(iface, IShellPropSheetExt);
|
||||||
|
return IDeskDisplayAdapter_AddPages(This,
|
||||||
|
pfnAddPage,
|
||||||
|
lParam);
|
||||||
|
}
|
||||||
|
|
||||||
|
static HRESULT STDMETHODCALLTYPE
|
||||||
|
IDeskDisplayAdapter_IShellPropSheetExt_ReplacePage(IShellPropSheetExt* iface,
|
||||||
|
EXPPS uPageID,
|
||||||
|
LPFNADDPROPSHEETPAGE pfnReplacePage,
|
||||||
|
LPARAM lParam)
|
||||||
|
{
|
||||||
|
PDESKDISPLAYADAPTER This = interface_to_impl(iface, IShellPropSheetExt);
|
||||||
|
return IDeskDisplayAdapter_ReplacePage(This,
|
||||||
|
uPageID,
|
||||||
|
pfnReplacePage,
|
||||||
|
lParam);
|
||||||
|
}
|
||||||
|
|
||||||
|
static IShellPropSheetExtVtbl efvtIShellPropSheetExt =
|
||||||
|
{
|
||||||
|
IDeskDisplayAdapter_IShellPropSheetExt_QueryInterface,
|
||||||
|
IDeskDisplayAdapter_IShellPropSheetExt_AddRef,
|
||||||
|
IDeskDisplayAdapter_IShellPropSheetExt_Release,
|
||||||
|
IDeskDisplayAdapter_IShellPropSheetExt_AddPages,
|
||||||
|
IDeskDisplayAdapter_IShellPropSheetExt_ReplacePage
|
||||||
|
};
|
||||||
|
|
||||||
|
static HRESULT STDMETHODCALLTYPE
|
||||||
|
IDeskDisplayAdapter_IShellExtInit_QueryInterface(IShellExtInit *iface,
|
||||||
|
REFIID iid,
|
||||||
|
PVOID *pvObject)
|
||||||
|
{
|
||||||
|
PDESKDISPLAYADAPTER This = interface_to_impl(iface, IShellExtInit);
|
||||||
|
return IDeskDisplayAdapter_QueryInterface(This,
|
||||||
|
iid,
|
||||||
|
pvObject);
|
||||||
|
}
|
||||||
|
|
||||||
|
static ULONG STDMETHODCALLTYPE
|
||||||
|
IDeskDisplayAdapter_IShellExtInit_AddRef(IShellExtInit* iface)
|
||||||
|
{
|
||||||
|
PDESKDISPLAYADAPTER This = interface_to_impl(iface, IShellExtInit);
|
||||||
|
return IDeskDisplayAdapter_AddRef(This);
|
||||||
|
}
|
||||||
|
|
||||||
|
static ULONG STDMETHODCALLTYPE
|
||||||
|
IDeskDisplayAdapter_IShellExtInit_Release(IShellExtInit* iface)
|
||||||
|
{
|
||||||
|
PDESKDISPLAYADAPTER This = interface_to_impl(iface, IShellExtInit);
|
||||||
|
return IDeskDisplayAdapter_Release(This);
|
||||||
|
}
|
||||||
|
|
||||||
|
static HRESULT STDMETHODCALLTYPE
|
||||||
|
IDeskDisplayAdapter_IShellExtInit_Initialize(IShellExtInit* iface,
|
||||||
|
LPCITEMIDLIST pidlFolder,
|
||||||
|
IDataObject *pdtobj,
|
||||||
|
HKEY hkeyProgID)
|
||||||
|
{
|
||||||
|
PDESKDISPLAYADAPTER This = interface_to_impl(iface, IShellExtInit);
|
||||||
|
return IDeskDisplayAdapter_Initialize(This,
|
||||||
|
pidlFolder,
|
||||||
|
pdtobj,
|
||||||
|
hkeyProgID);
|
||||||
|
}
|
||||||
|
|
||||||
|
static IShellExtInitVtbl efvtIShellExtInit =
|
||||||
|
{
|
||||||
|
IDeskDisplayAdapter_IShellExtInit_QueryInterface,
|
||||||
|
IDeskDisplayAdapter_IShellExtInit_AddRef,
|
||||||
|
IDeskDisplayAdapter_IShellExtInit_Release,
|
||||||
|
IDeskDisplayAdapter_IShellExtInit_Initialize
|
||||||
|
};
|
||||||
|
|
||||||
|
static HRESULT STDMETHODCALLTYPE
|
||||||
|
IDeskDisplayAdapter_IClassFactory_QueryInterface(IClassFactory *iface,
|
||||||
|
REFIID iid,
|
||||||
|
PVOID *pvObject)
|
||||||
|
{
|
||||||
|
PDESKDISPLAYADAPTER This = interface_to_impl(iface, IClassFactory);
|
||||||
|
return IDeskDisplayAdapter_QueryInterface(This,
|
||||||
|
iid,
|
||||||
|
pvObject);
|
||||||
|
}
|
||||||
|
|
||||||
|
static ULONG STDMETHODCALLTYPE
|
||||||
|
IDeskDisplayAdapter_IClassFactory_AddRef(IClassFactory* iface)
|
||||||
|
{
|
||||||
|
PDESKDISPLAYADAPTER This = interface_to_impl(iface, IClassFactory);
|
||||||
|
return IDeskDisplayAdapter_AddRef(This);
|
||||||
|
}
|
||||||
|
|
||||||
|
static ULONG STDMETHODCALLTYPE
|
||||||
|
IDeskDisplayAdapter_IClassFactory_Release(IClassFactory* iface)
|
||||||
|
{
|
||||||
|
PDESKDISPLAYADAPTER This = interface_to_impl(iface, IClassFactory);
|
||||||
|
return IDeskDisplayAdapter_Release(This);
|
||||||
|
}
|
||||||
|
|
||||||
|
static HRESULT STDMETHODCALLTYPE
|
||||||
|
IDeskDisplayAdapter_IClassFactory_CreateInstance(IClassFactory *iface,
|
||||||
|
IUnknown * pUnkOuter,
|
||||||
|
REFIID riid,
|
||||||
|
PVOID *ppvObject)
|
||||||
|
{
|
||||||
|
if (pUnkOuter != NULL &&
|
||||||
|
!IsEqualIID(riid,
|
||||||
|
&IID_IUnknown))
|
||||||
|
{
|
||||||
|
return CLASS_E_NOAGGREGATION;
|
||||||
|
}
|
||||||
|
|
||||||
|
return IDeskDisplayAdapter_Constructor(riid,
|
||||||
|
ppvObject);
|
||||||
|
}
|
||||||
|
|
||||||
|
static HRESULT STDMETHODCALLTYPE
|
||||||
|
IDeskDisplayAdapter_IClassFactory_LockServer(IClassFactory *iface,
|
||||||
|
BOOL fLock)
|
||||||
|
{
|
||||||
|
if (fLock)
|
||||||
|
InterlockedIncrement(&dll_refs);
|
||||||
|
else
|
||||||
|
InterlockedDecrement(&dll_refs);
|
||||||
|
|
||||||
|
return S_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
static IClassFactoryVtbl efvtIClassFactory =
|
||||||
|
{
|
||||||
|
IDeskDisplayAdapter_IClassFactory_QueryInterface,
|
||||||
|
IDeskDisplayAdapter_IClassFactory_AddRef,
|
||||||
|
IDeskDisplayAdapter_IClassFactory_Release,
|
||||||
|
IDeskDisplayAdapter_IClassFactory_CreateInstance,
|
||||||
|
IDeskDisplayAdapter_IClassFactory_LockServer,
|
||||||
|
};
|
||||||
|
|
||||||
|
VOID
|
||||||
|
IDeskDisplayAdapter_InitIface(PDESKDISPLAYADAPTER This)
|
||||||
|
{
|
||||||
|
This->lpIShellPropSheetExtVtbl = &efvtIShellPropSheetExt;
|
||||||
|
This->lpIShellExtInitVtbl = &efvtIShellExtInit;
|
||||||
|
This->lpIClassFactoryVtbl = &efvtIClassFactory;
|
||||||
|
|
||||||
|
IDeskDisplayAdapter_AddRef(This);
|
||||||
|
}
|
||||||
|
|
||||||
|
HRESULT WINAPI
|
||||||
|
DllGetClassObject(REFCLSID rclsid,
|
||||||
|
REFIID riid,
|
||||||
|
LPVOID *ppv)
|
||||||
|
{
|
||||||
|
if (ppv == NULL)
|
||||||
|
return E_INVALIDARG;
|
||||||
|
|
||||||
|
*ppv = NULL;
|
||||||
|
if (IsEqualCLSID(rclsid,
|
||||||
|
&CLSID_IDeskDisplayAdapter))
|
||||||
|
{
|
||||||
|
return IDeskDisplayAdapter_Constructor(riid,
|
||||||
|
ppv);
|
||||||
|
}
|
||||||
|
|
||||||
|
DPRINT1("DllGetClassObject: CLASS_E_CLASSNOTAVAILABLE\n");
|
||||||
|
return CLASS_E_CLASSNOTAVAILABLE;
|
||||||
|
}
|
||||||
|
|
||||||
|
HRESULT WINAPI
|
||||||
|
DllCanUnloadNow(VOID)
|
||||||
|
{
|
||||||
|
return dll_refs == 0 ? S_OK : S_FALSE;
|
||||||
|
}
|
|
@ -4,4 +4,7 @@
|
||||||
<directory name="slayer">
|
<directory name="slayer">
|
||||||
<xi:include href="slayer/slayer.rbuild" />
|
<xi:include href="slayer/slayer.rbuild" />
|
||||||
</directory>
|
</directory>
|
||||||
|
<directory name="deskadp">
|
||||||
|
<xi:include href="deskadp/deskadp.rbuild" />
|
||||||
|
</directory>
|
||||||
</group>
|
</group>
|
||||||
|
|
Loading…
Reference in a new issue