ReactOS 0.4.17-dev-357-ga8f14ff
CDesktopUpgradePropertyBag Class Reference
Inheritance diagram for CDesktopUpgradePropertyBag:
Collaboration diagram for CDesktopUpgradePropertyBag:

Public Member Functions

 CDesktopUpgradePropertyBag ()
 
STDMETHODIMP Read (_In_z_ LPCWSTR pszPropName, _Inout_ VARIANT *pvari, _Inout_opt_ IErrorLog *pErrorLog) override
 
STDMETHODIMP Write (_In_z_ LPCWSTR pszPropName, _In_ VARIANT *pvari) override
 
- Public Member Functions inherited from CBasePropertyBag
 CBasePropertyBag (DWORD dwMode)
 
virtual ~CBasePropertyBag ()
 
STDMETHODIMP QueryInterface (REFIID riid, void **ppvObject) override
 
 STDMETHODIMP_ (ULONG) AddRef() override
 
 STDMETHODIMP_ (ULONG) Release() override
 
- Public Member Functions inherited from IPropertyBag
HRESULT Read ([in] LPCOLESTR pszPropName, [in, out] VARIANT *pVar, [in] IErrorLog *pErrorLog)
 
HRESULT RemoteRead ([in] LPCOLESTR pszPropName, [out] VARIANT *pVar, [in] IErrorLog *pErrorLog, [in] DWORD varType, [in] IUnknown *pUnkObj)
 
HRESULT Write ([in] LPCOLESTR pszPropName, [in] VARIANT *pVar)
 
- Public Member Functions inherited from IUnknown
HRESULT QueryInterface ([in] REFIID riid, [out, iid_is(riid)] void **ppvObject)
 
ULONG AddRef ()
 
ULONG Release ()
 

Protected Member Functions

BOOL _AlreadyUpgraded (HKEY hKey)
 
VOID _MarkAsUpgraded (HKEY hkey)
 
HRESULT _ReadFlags (VARIANT *pvari)
 
HRESULT _ReadItemPositions (VARIANT *pvari)
 
IStream_GetOldDesktopViewStream ()
 
IStream_NewStreamFromOld (IStream *pOldStream)
 

Additional Inherited Members

- Public Types inherited from IPropertyBag
typedef IPropertyBagLPPROPERTYBAG
 
- Public Types inherited from IUnknown
typedef IUnknownLPUNKNOWN
 
- Protected Attributes inherited from CBasePropertyBag
LONG m_cRefs
 
DWORD m_dwMode
 

Detailed Description

Definition at line 1022 of file propbag.cpp.

Constructor & Destructor Documentation

◆ CDesktopUpgradePropertyBag()

CDesktopUpgradePropertyBag::CDesktopUpgradePropertyBag ( )
inline

Definition at line 1033 of file propbag.cpp.

#define STGM_READ
Definition: objbase.h:936

Member Function Documentation

◆ _AlreadyUpgraded()

BOOL CDesktopUpgradePropertyBag::_AlreadyUpgraded ( HKEY  hKey)
protected

Definition at line 1053 of file propbag.cpp.

1054{
1055 // Check the existence of the value written in _MarkAsUpgraded.
1056 DWORD dwValue, cbData = sizeof(dwValue);
1057 return SHGetValueW(hKey, NULL, L"Upgrade", NULL, &dwValue, &cbData) == ERROR_SUCCESS;
1058}
#define ERROR_SUCCESS
Definition: deptool.c:10
#define NULL
Definition: types.h:112
DWORD WINAPI SHGetValueW(HKEY hkey, const WCHAR *subkey, const WCHAR *value, DWORD *type, void *data, DWORD *data_len)
Definition: main.c:2222
#define L(x)
Definition: resources.c:13
unsigned long DWORD
Definition: ntddk_ex.h:95
FxAutoRegKey hKey
_In_opt_ _In_opt_ _In_ _In_ DWORD cbData
Definition: shlwapi.h:761

Referenced by _GetOldDesktopViewStream().

◆ _GetOldDesktopViewStream()

IStream * CDesktopUpgradePropertyBag::_GetOldDesktopViewStream ( )
protected

Definition at line 1128 of file propbag.cpp.

1129{
1130 HKEY hKey = SHGetShellKey(SHKEY_Root_HKCU, L"Streams\\Desktop", FALSE);
1131 if (!hKey)
1132 return NULL;
1133
1134 CComPtr<IStream> pOldStream;
1135 if (!_AlreadyUpgraded(hKey))
1136 {
1137 pOldStream.Attach(SHOpenRegStream2W(hKey, NULL, L"ViewView2", 0));
1138 if (pOldStream)
1139 {
1140 ULARGE_INTEGER uli;
1141 HRESULT hr = IStream_Size(pOldStream, &uli);
1142 if (SUCCEEDED(hr) && !uli.QuadPart)
1143 pOldStream.Release();
1144 }
1145
1146 if (!pOldStream)
1147 pOldStream.Attach(SHOpenRegStream2W(hKey, NULL, L"ViewView", 0));
1148
1150 }
1151
1153 return pOldStream.Detach();
1154}
#define RegCloseKey(hKey)
Definition: registry.h:49
void Release()
Definition: atlcomcli.h:170
void Attach(T *lp)
Definition: atlcomcli.h:179
T * Detach()
Definition: atlcomcli.h:186
VOID _MarkAsUpgraded(HKEY hkey)
Definition: propbag.cpp:1047
BOOL _AlreadyUpgraded(HKEY hKey)
Definition: propbag.cpp:1053
HRESULT hr
Definition: delayimp.cpp:582
#define FALSE
Definition: types.h:117
HRESULT WINAPI IStream_Size(IStream *stream, ULARGE_INTEGER *size)
Definition: main.c:120
IStream *WINAPI SHOpenRegStream2W(HKEY hKey, const WCHAR *subkey, const WCHAR *value, DWORD mode)
Definition: main.c:1266
HKEY WINAPI SHGetShellKey(DWORD flags, LPCWSTR sub_key, BOOL create)
Definition: ordinal.c:4049
#define SUCCEEDED(hr)
Definition: intsafe.h:50
@ SHKEY_Root_HKCU
Definition: ordinal.c:2805
ULONGLONG QuadPart
Definition: ms-dtyp.idl:185

Referenced by _ReadItemPositions().

◆ _MarkAsUpgraded()

VOID CDesktopUpgradePropertyBag::_MarkAsUpgraded ( HKEY  hkey)
protected

Definition at line 1047 of file propbag.cpp.

1048{
1049 DWORD dwValue = TRUE;
1050 SHSetValueW(hkey, NULL, L"Upgrade", REG_DWORD, &dwValue, sizeof(dwValue));
1051}
#define TRUE
Definition: types.h:120
DWORD WINAPI SHSetValueW(HKEY hkey, const WCHAR *subkey, const WCHAR *value, DWORD type, const void *data, DWORD data_len)
Definition: main.c:2292
#define REG_DWORD
Definition: sdbapi.c:615

Referenced by _GetOldDesktopViewStream().

◆ _NewStreamFromOld()

IStream * CDesktopUpgradePropertyBag::_NewStreamFromOld ( IStream pOldStream)
protected

Definition at line 1088 of file propbag.cpp.

1089{
1091 HRESULT hr = pOldStream->Read(&Header, sizeof(Header), NULL);
1092 if (FAILED(hr) || Header.wMagic != 28)
1093 return NULL;
1094
1095 // Move stream pointer
1097 li.QuadPart = Header.wSize - sizeof(Header);
1098 hr = pOldStream->Seek(li, STREAM_SEEK_CUR, NULL);
1099 if (FAILED(hr))
1100 return NULL;
1101
1102 // Get the size
1103 ULARGE_INTEGER uli;
1104 hr = IStream_Size(pOldStream, &uli);
1105 if (FAILED(hr))
1106 return NULL;
1107
1108 // Create new stream and attach
1109 CComPtr<IStream> pNewStream;
1110 pNewStream.Attach(SHCreateMemStream(NULL, 0));
1111 if (!pNewStream)
1112 return NULL;
1113
1114 // Subtract Header.wSize from the size
1115 uli.QuadPart -= Header.wSize;
1116
1117 // Copy to pNewStream
1118 hr = pOldStream->CopyTo(pNewStream, uli, NULL, NULL);
1119 if (FAILED(hr))
1120 return NULL;
1121
1122 li.QuadPart = 0;
1123 pNewStream->Seek(li, STREAM_SEEK_SET, NULL);
1124
1125 return pNewStream.Detach();
1126}
Definition: Header.h:9
IStream *WINAPI SHCreateMemStream(const BYTE *data, UINT data_len)
Definition: main.c:873
LARGE_INTEGER li
Definition: fxtimerapi.cpp:235
HRESULT Read([out, size_is(cb), length_is(*pcbRead)] void *pv, [in] ULONG cb, [out] ULONG *pcbRead)
HRESULT CopyTo([in, unique] IStream *pstm, [in] ULARGE_INTEGER cb, [out] ULARGE_INTEGER *pcbRead, [out] ULARGE_INTEGER *pcbWritten)
HRESULT Seek([in] LARGE_INTEGER dlibMove, [in] DWORD dwOrigin, [out] ULARGE_INTEGER *plibNewPosition)
#define FAILED(hr)
Definition: intsafe.h:51
LONGLONG QuadPart
Definition: typedefs.h:114

Referenced by _ReadItemPositions().

◆ _ReadFlags()

HRESULT CDesktopUpgradePropertyBag::_ReadFlags ( VARIANT pvari)
protected

Definition at line 1062 of file propbag.cpp.

1063{
1065 DWORD cbValue = sizeof(Flags);
1067 L"Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\DeskView",
1068 L"Settings",
1069 NULL,
1070 &Flags,
1071 &cbValue) != ERROR_SUCCESS || cbValue < sizeof(Flags))
1072 {
1073 return E_FAIL;
1074 }
1075
1076 V_UINT(pvari) = ((UINT)(Flags >> 32)) | 0x220; // FIXME: Magic number
1077 V_VT(pvari) = VT_UINT;
1078 return S_OK;
1079}
#define E_FAIL
Definition: ddrawi.h:102
@ VT_UINT
Definition: compat.h:2317
#define S_OK
Definition: intsafe.h:52
unsigned int UINT
Definition: ndis.h:50
#define V_VT(A)
Definition: oleauto.h:211
#define V_UINT(A)
Definition: oleauto.h:264
DWORDLONG DESKVIEW_FLAGS
Definition: propbag.cpp:1060
#define HKEY_CURRENT_USER
Definition: winreg.h:11
_Must_inspect_result_ _In_ ULONG Flags
Definition: wsk.h:170

Referenced by Read().

◆ _ReadItemPositions()

HRESULT CDesktopUpgradePropertyBag::_ReadItemPositions ( VARIANT pvari)
protected

Definition at line 1156 of file propbag.cpp.

1157{
1158 CComPtr<IStream> pOldStream;
1159 pOldStream.Attach(_GetOldDesktopViewStream());
1160 if (!pOldStream)
1161 return E_FAIL;
1162
1163 HRESULT hr = E_FAIL;
1164 IStream *pNewStream = _NewStreamFromOld(pOldStream);
1165 if (pNewStream)
1166 {
1167 V_UNKNOWN(pvari) = pNewStream;
1168 V_VT(pvari) = VT_UNKNOWN;
1169 hr = S_OK;
1170 }
1171
1172 return hr;
1173}
IStream * _GetOldDesktopViewStream()
Definition: propbag.cpp:1128
IStream * _NewStreamFromOld(IStream *pOldStream)
Definition: propbag.cpp:1088
@ VT_UNKNOWN
Definition: compat.h:2308
#define V_UNKNOWN(A)
Definition: oleauto.h:281

Referenced by Read().

◆ Read()

STDMETHODIMP CDesktopUpgradePropertyBag::Read ( _In_z_ LPCWSTR  pszPropName,
_Inout_ VARIANT pvari,
_Inout_opt_ IErrorLog pErrorLog 
)
override

Definition at line 1176 of file propbag.cpp.

1180{
1181 UNREFERENCED_PARAMETER(pErrorLog);
1182
1183 VARTYPE vt = V_VT(pvari);
1184
1185 HRESULT hr = E_FAIL;
1186 if (StrCmpW(L"FFlags", pszPropName) == 0)
1187 hr = _ReadFlags(pvari);
1188 else if (StrCmpNW(L"ItemPos", pszPropName, 7) == 0)
1189 hr = _ReadItemPositions(pvari);
1190
1191 if (FAILED(hr))
1192 {
1193 ::VariantInit(pvari);
1194 return hr;
1195 }
1196
1197 return ::VariantChangeType(pvari, pvari, 0, vt);
1198}
HRESULT _ReadFlags(VARIANT *pvari)
Definition: propbag.cpp:1062
HRESULT _ReadItemPositions(VARIANT *pvari)
Definition: propbag.cpp:1156
INT WINAPI StrCmpNW(LPCWSTR lpszStr, LPCWSTR lpszComp, INT iLen)
Definition: string.c:500
unsigned short VARTYPE
Definition: compat.h:2254
int WINAPI StrCmpW(const WCHAR *str, const WCHAR *comp)
Definition: string.c:458
static REFPROPVARIANT PROPVAR_CHANGE_FLAGS VARTYPE vt
Definition: suminfo.c:91
#define UNREFERENCED_PARAMETER(P)
Definition: ntbasedef.h:329
void WINAPI VariantInit(VARIANTARG *pVarg)
Definition: variant.c:568

◆ Write()

STDMETHODIMP CDesktopUpgradePropertyBag::Write ( _In_z_ LPCWSTR  pszPropName,
_In_ VARIANT pvari 
)
inlineoverride

Definition at line 1040 of file propbag.cpp.

1041 {
1042 ERR("%p: %s: Read-only\n", this, debugstr_w(pszPropName));
1043 return E_NOTIMPL;
1044 }
#define ERR(fmt,...)
Definition: precomp.h:57
#define E_NOTIMPL
Definition: ddrawi.h:99
#define debugstr_w
Definition: kernel32.h:32

The documentation for this class was generated from the following file: