8#define _ATL_NO_EXCEPTIONS
24#define MODE_CAN_READ(dwMode) \
25 (((dwMode) & (STGM_READ | STGM_WRITE | STGM_READWRITE)) != STGM_WRITE)
26#define MODE_CAN_WRITE(dwMode) \
27 (((dwMode) & (STGM_READ | STGM_WRITE | STGM_READWRITE)) != STGM_READ)
31#if (_WIN32_WINNT < _WIN32_WINNT_VISTA) || defined(__REACTOS__)
76 return ::InterlockedIncrement(&
m_cRefs);
88#if (_WIN32_WINNT < _WIN32_WINNT_VISTA) || defined(__REACTOS__)
92 _In_ PROPBAG2 *pPropBag,
101 _In_ PROPBAG2 *pPropBag,
113 _Out_ PROPBAG2 *pPropBag,
163 TRACE(
"%p: %s %p %p\n",
this,
debugstr_w(pszPropName), pvari, pErrorLog);
178 if (!pszPropName || !pvari)
180 ERR(
"%p: %s %p %p\n",
this,
debugstr_w(pszPropName), pvari, pErrorLog);
187 ERR(
"%p: %s %p %p\n",
this,
debugstr_w(pszPropName), pvari, pErrorLog);
194 ERR(
"%p: 0x%08X %p\n",
this,
hr, pvari);
198 hr = ::VariantChangeTypeForRead(pvari,
vt);
201 ERR(
"%p: 0x%08X %p\n",
this,
hr, pvari);
224 if (!pszPropName || !pvari)
270 return pMemBag->QueryInterface(
riid, ppvObj);
413 if (
ui.DUMMYSTRUCTNAME.HighPart)
416 *pcbSize =
ui.DUMMYSTRUCTNAME.LowPart;
428 TRACE(
"%p: %s %p %p\n",
this,
debugstr_w(pszPropName), pvari, pErrorLog);
441 DWORD dwType, cbValue;
445 else if (dwType ==
REG_SZ)
456 ERR(
"%p: 0x%08X %ld: %s %p\n",
this,
hr, dwType,
debugstr_w(pszPropName), pvari);
461 hr = ::VariantChangeTypeForRead(pvari,
vt);
464 ERR(
"%p: 0x%08X %ld: %s %p\n",
this,
hr, dwType,
debugstr_w(pszPropName), pvari);
541 hr =
V_UNKNOWN(pvari)->QueryInterface(IID_IStream, (
void **)&pStream);
603 return pRegBag->QueryInterface(
riid, ppvObj);
641 CW2A wide2utf7(pszWideBuff);
739 if (*lpKeyName ==
L'@')
764 if (*lpKeyName ==
L'@')
848 UINT cchSep = (
UINT)(pchSep - pszStart + 1);
849 StrCpyNW(pszSection, pszStart,
__min(cchSep, cchSectionMax));
850 StrCpyNW(pszName, pchSep + 1, cchNameMax);
857 StrCpyNW(pszName, pszStart, cchNameMax);
873 TRACE(
"%p: %s %p %p\n",
this,
debugstr_w(pszPropName), pvari, pErrorLog);
905 return ::VariantChangeTypeForRead(pvari,
vt);
993 if (
lstrcmpiW(pchFileTitle,
L"desktop.ini") == 0)
1015 ERR(
"0x%08X\n",
hr);
1019 return pIniPB->QueryInterface(
riid, ppvObj);
1067 L"Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\DeskView",
1123 pNewStream->Seek(
li, STREAM_SEEK_SET,
NULL);
1125 return pNewStream.
Detach();
1153 return pOldStream.
Detach();
1186 if (
StrCmpW(
L"FFlags", pszPropName) == 0)
1188 else if (
StrCmpNW(
L"ItemPos", pszPropName, 7) == 0)
1197 return ::VariantChangeType(pvari, pvari, 0,
vt);
1215 return pPropBag->QueryInterface(
riid, ppvObj);
1355 if (!pidlOther && !
m_pidl)
1451 DWORD dwValue, cbValue =
sizeof(dwValue);
1456 return (
UINT)dwValue;
1470 IID_IMruPidlList, (
void**)&pMruList);
1475 hr = pMruList->InitList(cMRUSize,
hKey,
L"BagMRU");
1479 hr = pMruList->QueryPidl(pidl, cSlots, puSlots, pcSlots);
1481 hr = pMruList->UsePidl(pidl, puSlots);
1482 else if (cSlots == 1)
1535 BIND_OPTS opts = {
sizeof(opts) };
1536 opts.grfMode = dwMode;
1573 hr = psf->BindToObject(
m_pidl, pBC,
riid, (
void **)pppb);
1604 UINT cSlots, anSlots[64];
1613 for (
UINT iSlot = 0; iSlot < cSlots; ++iSlot)
1709 return m_pPidlBag->Read(pszPropName, pvari, pErrorLog);
1783 return m_pReadBag->Read(pszPropName, pvari, pErrorLog);
1817 IID_IMruPidlList, (
void**)&pMruList);
1820 hr = pMruList->InitList(200,
hKey,
L"BagMRU");
1822 pMruList->PruneKids(
m_pidl);
1865 hr = psf->GetDisplayNameOf(ppidlLast, SHGDN_FORPARSING, &strret);
1920 TRACE(
"pidl %p is removable\n", pidl);
1932 hr = pBag->Init(pidl, bag_name,
flags);
1935 ERR(
"0x%08X\n",
hr);
1941 return pBag->QueryInterface(
riid,
ppv);
1996 (
void **)&pService);
2003 return pService->GetPropertyBag(
flags,
riid, ppvObj);
HRESULT WINAPI SHGetDesktopFolder(IShellFolder **psf)
#define InterlockedDecrement
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
void shell(int argc, const char *argv[])
#define RegCloseKey(hKey)
EXTERN_C void WINAPI SHChangeNotify(LONG wEventId, UINT uFlags, LPCVOID dwItem1, LPCVOID dwItem2)
HRESULT Copy(_In_ const VARIANT *src)
bool IsEmpty() const noexcept
void ReleaseBuffer(_In_ int nNewLength=-1)
int CompareNoCase(_In_z_ PCXSTR psz) const
virtual ~CBasePropertyBag()
CBasePropertyBag(DWORD dwMode)
STDMETHODIMP_(ULONG) AddRef() override
STDMETHODIMP_(ULONG) Release() override
STDMETHODIMP QueryInterface(REFIID riid, void **ppvObject) override
STDMETHODIMP Write(_In_z_ LPCWSTR pszPropName, _In_ VARIANT *pvari) override
HRESULT _ReadFlags(VARIANT *pvari)
STDMETHODIMP Read(_In_z_ LPCWSTR pszPropName, _Inout_ VARIANT *pvari, _Inout_opt_ IErrorLog *pErrorLog) override
IStream * _GetOldDesktopViewStream()
VOID _MarkAsUpgraded(HKEY hkey)
IStream * _NewStreamFromOld(IStream *pOldStream)
CDesktopUpgradePropertyBag()
HRESULT _ReadItemPositions(VARIANT *pvari)
BOOL _AlreadyUpgraded(HKEY hKey)
bool Allocate(_In_ size_t nElements=1)
static BOOL LooksLikeAnAlternateStream(LPCWSTR pszStart)
HRESULT Init(LPCWSTR pszIniFile, LPCWSTR pszSection)
STDMETHODIMP Read(_In_z_ LPCWSTR pszPropName, _Inout_ VARIANT *pvari, _Inout_opt_ IErrorLog *pErrorLog) override
CIniPropertyBag(DWORD dwMode)
HRESULT _GetSectionAndName(LPCWSTR pszStart, LPWSTR pszSection, UINT cchSectionMax, LPWSTR pszName, UINT cchNameMax)
~CIniPropertyBag() override
STDMETHODIMP Write(_In_z_ LPCWSTR pszPropName, _In_ VARIANT *pvari) override
STDMETHODIMP Read(_In_z_ LPCWSTR pszPropName, _Inout_ VARIANT *pvari, _Inout_opt_ IErrorLog *pErrorLog) override
STDMETHODIMP Write(_In_z_ LPCWSTR pszPropName, _In_ VARIANT *pvari) override
ATL::CSimpleMap< ATL::CStringW, ATL::CComVariant, CPropMapEqual > m_PropMap
CMemPropertyBag(DWORD dwMode)
HRESULT _ReadDword(LPCWSTR pszPropName, VARIANT *pvari)
STDMETHODIMP Write(_In_z_ LPCWSTR pszPropName, _In_ VARIANT *pvari) override
CRegPropertyBag(DWORD dwMode)
HRESULT _ReadBinary(LPCWSTR pszPropName, VARIANT *pvari, VARTYPE vt, DWORD uBytes)
HRESULT _ReadStream(VARIANT *pvari, BYTE *pInit, UINT cbInit)
HRESULT Init(HKEY hKey, LPCWSTR lpSubKey)
HRESULT _ReadString(LPCWSTR pszPropName, VARIANTARG *pvarg, UINT len)
HRESULT _CopyStreamIntoBuff(IStream *pStream, void *pv, ULONG cb)
STDMETHODIMP Read(_In_z_ LPCWSTR pszPropName, _Inout_ VARIANT *pvari, _Inout_opt_ IErrorLog *pErrorLog) override
HRESULT _GetStreamSize(IStream *pStream, LPDWORD pcbSize)
~CRegPropertyBag() override
HRESULT _WriteStream(LPCWSTR pszPropName, IStream *pStream)
HRESULT _ReadGlobalDefaultsBag(LPCWSTR pszPropName, VARIANT *pvari, IErrorLog *pErrorLog)
BOOL _EnsureGlobalDefaultsBag(DWORD dwMode, REFIID riid)
BOOL _CanAccessGlobalDefaultsBag() const
HRESULT _GetMRUSlot(LPCITEMIDLIST pidl, DWORD dwMode, HKEY hKey, UINT *pSlot)
BOOL _EnsureUserDefaultsBag(DWORD dwMode, REFIID riid)
BOOL _CanAccessInheritBag() const
HRESULT _ReadInheritBag(LPCWSTR pszPropName, VARIANT *pvari, IErrorLog *pErrorLog)
BOOL _EnsureInheritBag(DWORD dwMode, REFIID riid)
BOOL _CanAccessFolderDefaultsBag() const
BOOL _CanAccessUpgradeBag() const
BOOL m_bFolderDefaultsBag
BOOL _EnsureReadBag(DWORD dwMode, REFIID riid)
CComPtr< IPropertyBag > m_pWriteBag
STDMETHODIMP Write(_In_z_ LPCWSTR pszPropName, _In_ VARIANT *pvari) override
STDMETHODIMP Read(_In_z_ LPCWSTR pszPropName, _Inout_ VARIANT *pvari, _Inout_opt_ IErrorLog *pErrorLog) override
BOOL _CanAccessUserDefaultsBag() const
CComPtr< IPropertyBag > m_pUpgradeBag
BOOL _CanAccessPidlBag() const
BOOL m_bGlobalDefaultsBag
HRESULT _FindNearestInheritBag(REFIID riid, IPropertyBag **pppb)
HRESULT _ReadPidlBag(LPCWSTR pszPropName, VARIANT *pvari, IErrorLog *pErrorLog)
CComPtr< IPropertyBag > m_pInheritBag
HRESULT _GetRegKey(LPCITEMIDLIST pidl, LPCWSTR pszBagName, DWORD dwFlags, DWORD dwMode, HKEY hKey, LPWSTR pszDest, INT cchDest)
HRESULT _ReadFolderDefaultsBag(LPCWSTR pszPropName, VARIANT *pvari, IErrorLog *pErrorLog)
CComPtr< IPropertyBag > m_pFolderDefaultsBag
CComPtr< IPropertyBag > m_pReadBag
~CViewStatePropertyBag() override
HKEY _GetHKey(DWORD dwVspbFlags)
HRESULT _GetMRUSlots(LPCITEMIDLIST pidl, DWORD dwMode, HKEY hKey, UINT *puSlots, UINT cSlots, UINT *pcSlots)
BOOL _EnsurePidlBag(DWORD dwMode, REFIID riid)
CComPtr< IPropertyBag > m_pPidlBag
CComPtr< IPropertyBag > m_pGlobalDefaultsBag
BOOL IsSameBag(LPCITEMIDLIST pidl, LPCWSTR pszPath, DWORD dwVspbFlags) const
BOOL _EnsureFolderDefaultsBag(DWORD dwMode, REFIID riid)
BOOL _EnsureWriteBag(DWORD dwMode, REFIID riid)
BOOL _IsSamePidl(LPCITEMIDLIST pidlOther) const
UINT _GetMRUSize(HKEY hKey)
CComPtr< IPropertyBag > m_pUserDefaultsBag
void _ResetTryAgainFlag()
BOOL _IsSystemFolder() const
BOOL _EnsureUpgradeBag(DWORD dwMode, REFIID riid)
HRESULT _CreateBag(LPITEMIDLIST pidl, LPCWSTR pszPath, DWORD dwVspbFlags, DWORD dwMode, REFIID riid, IPropertyBag **pppb)
HRESULT _ReadUpgradeBag(LPCWSTR pszPropName, VARIANT *pvari, IErrorLog *pErrorLog)
HRESULT Init(_In_opt_ LPCITEMIDLIST pidl, _In_opt_ LPCWSTR pszPath, _In_ DWORD dwVspbFlags)
HRESULT _ReadUserDefaultsBag(LPCWSTR pszPropName, VARIANT *pvari, IErrorLog *pErrorLog)
LONG WINAPI RegCreateKeyExW(_In_ HKEY hKey, _In_ LPCWSTR lpSubKey, _In_ DWORD Reserved, _In_opt_ LPWSTR lpClass, _In_ DWORD dwOptions, _In_ REGSAM samDesired, _In_opt_ LPSECURITY_ATTRIBUTES lpSecurityAttributes, _Out_ PHKEY phkResult, _Out_opt_ LPDWORD lpdwDisposition)
LONG WINAPI RegOpenKeyExW(HKEY hKey, LPCWSTR lpSubKey, DWORD ulOptions, REGSAM samDesired, PHKEY phkResult)
HRESULT WINAPI DECLSPEC_HOTPATCH CoCreateInstance(REFCLSID rclsid, IUnknown *outer, DWORD cls_context, REFIID riid, void **obj)
LPWSTR WINAPI StrChrW(LPCWSTR lpszStr, WCHAR ch)
LPWSTR WINAPI StrRChrW(LPCWSTR str, LPCWSTR end, WORD ch)
INT WINAPI StrCmpNW(LPCWSTR lpszStr, LPCWSTR lpszComp, INT iLen)
#define INVALID_HANDLE_VALUE
#define MultiByteToWideChar
BOOL WINAPI WritePrivateProfileStringW(LPCWSTR section, LPCWSTR entry, LPCWSTR string, LPCWSTR filename)
INT WINAPI GetPrivateProfileStringW(LPCWSTR section, LPCWSTR entry, LPCWSTR def_val, LPWSTR buffer, UINT len, LPCWSTR filename)
int WINAPI lstrcmpiW(LPCWSTR str1, LPCWSTR str2)
int WINAPI PathGetDriveNumberW(const WCHAR *path)
WCHAR *WINAPI PathFindFileNameW(const WCHAR *path)
BOOL WINAPI PathRemoveFileSpecW(WCHAR *path)
BOOL WINAPI PathFileExistsW(const WCHAR *path)
int WINAPI StrCmpW(const WCHAR *str, const WCHAR *comp)
WCHAR *WINAPI StrDupW(const WCHAR *str)
WCHAR *WINAPI StrCpyNW(WCHAR *dst, const WCHAR *src, int count)
static REFPROPVARIANT PROPVAR_CHANGE_FLAGS VARTYPE vt
_ACRTIMP int __cdecl memcmp(const void *, const void *, size_t)
HRESULT WINAPI IUnknown_QueryService(IUnknown *obj, REFGUID sid, REFIID iid, void **out)
HRESULT WINAPI IStream_Size(IStream *stream, ULARGE_INTEGER *size)
DWORD WINAPI SHGetValueW(HKEY hkey, const WCHAR *subkey, const WCHAR *value, DWORD *type, void *data, DWORD *data_len)
DWORD WINAPI SHSetValueW(HKEY hkey, const WCHAR *subkey, const WCHAR *value, DWORD type, const void *data, DWORD data_len)
IStream *WINAPI SHCreateMemStream(const BYTE *data, UINT data_len)
DWORD WINAPI SHDeleteValueW(HKEY hkey, const WCHAR *subkey, const WCHAR *value)
IStream *WINAPI SHOpenRegStream2W(HKEY hKey, const WCHAR *subkey, const WCHAR *value, DWORD mode)
HKEY WINAPI SHGetShellKey(DWORD flags, LPCWSTR sub_key, BOOL create)
BOOL WINAPI PathMakeSystemFolderW(LPCWSTR lpszPath)
BOOL WINAPI PathIsSystemFolderW(LPCWSTR lpszPath, DWORD dwAttrib)
HRESULT WINAPI StrRetToBufW(LPSTRRET src, const ITEMIDLIST *pidl, LPWSTR dest, UINT len)
EXTERN_C ULONG WINAPI GetProcessOsVersion(void)
GLfloat GLfloat GLfloat v2
HLOCAL NTAPI LocalAlloc(UINT uFlags, SIZE_T dwBytes)
HLOCAL NTAPI LocalFree(HLOCAL hMem)
HRESULT SetBindOptions([in] BIND_OPTS *pbindopts)
HRESULT Write([in] LPCOLESTR pszPropName, [in] VARIANT *pVar)
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)
unsigned long long DWORDLONG
const char * appName(const char *argv0)
#define ERROR_FILE_NOT_FOUND
_In_ HANDLE _In_ DWORD _In_ DWORD _Inout_opt_ LPOVERLAPPED _In_opt_ LPTRANSMIT_FILE_BUFFERS _In_ DWORD dwReserved
_In_ LPWSTR _In_ DWORD _In_ DWORD _In_ DWORD dwFlags
#define _Out_writes_to_(s, c)
#define FILE_ATTRIBUTE_HIDDEN
#define FILE_ATTRIBUTE_SYSTEM
#define FILE_SHARE_DELETE
#define UNREFERENCED_PARAMETER(P)
HRESULT WINAPI CreateBindCtx(DWORD reserved, IBindCtx **bind_context)
BSTR WINAPI SysAllocString(LPCOLESTR str)
BSTR WINAPI DECLSPEC_HOTPATCH SysAllocStringByteLen(LPCSTR str, UINT len)
const GUID IID_IPropertyBag
LPITEMIDLIST WINAPI ILClone(LPCITEMIDLIST pidl)
void WINAPI ILFree(LPITEMIDLIST pidl)
HRESULT WINAPI SHBindToParent(LPCITEMIDLIST pidl, REFIID riid, LPVOID *ppv, LPCITEMIDLIST *ppidlLast)
HRESULT WINAPI SHGetDataFromIDListW(LPSHELLFOLDER psf, LPCITEMIDLIST pidl, int nFormat, LPVOID dest, int len)
BOOL WINAPI ILIsEqual(LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2)
static const WCHAR szName[]
EXTERN_C HRESULT WINAPI SHGetViewStatePropertyBag(_In_opt_ PCIDLIST_ABSOLUTE pidl, _In_opt_ LPCWSTR bag_name, _In_ DWORD flags, _In_ REFIID riid, _Outptr_ void **ppv)
EXTERN_C BOOL WINAPI SHSetIniStringW(_In_z_ LPCWSTR appName, _In_z_ LPCWSTR keyName, _In_opt_z_ LPCWSTR str, _In_z_ LPCWSTR filename)
EXTERN_C BOOL WINAPI SHSetIniStringUTF7W(_In_z_ LPCWSTR lpAppName, _In_z_ LPCWSTR lpKeyName, _In_opt_z_ LPCWSTR lpString, _In_z_ LPCWSTR lpFileName)
EXTERN_C DWORD WINAPI SHGetIniStringW(_In_z_ LPCWSTR appName, _In_z_ LPCWSTR keyName, _Out_writes_to_(outLen, return+1) LPWSTR out, _In_ DWORD outLen, _In_z_ LPCWSTR filename)
EXTERN_C DWORD WINAPI SHGetIniStringUTF7W(_In_opt_z_ LPCWSTR lpAppName, _In_z_ LPCWSTR lpKeyName, _Out_writes_to_(nSize, return+1) _Post_z_ LPWSTR lpReturnedString, _In_ DWORD nSize, _In_z_ LPCWSTR lpFileName)
EXTERN_C HRESULT WINAPI SHCreatePropertyBagOnRegKey(_In_ HKEY hKey, _In_z_ LPCWSTR pszSubKey, _In_ DWORD dwMode, _In_ REFIID riid, _Out_ void **ppvObj)
struct tagOLD_STREAM_HEADER * POLD_STREAM_HEADER
static BOOL Is7BitClean(LPCWSTR psz)
#define MODE_CAN_WRITE(dwMode)
HRESULT SHGetDesktopUpgradePropertyBag(REFIID riid, void **ppvObj)
struct tagOLD_STREAM_HEADER OLD_STREAM_HEADER
static HRESULT BindCtx_CreateWithMode(DWORD dwMode, IBindCtx **ppbc)
#define MODE_CAN_READ(dwMode)
EXTERN_C VOID FreeViewStatePropertyBagCache(VOID)
static BOOL SHIsRemovableDrive(LPCITEMIDLIST pidl)
EXTERN_C INT WINAPI SHGetPerScreenResName(_Out_writes_(cchBuffer) LPWSTR pszBuffer, _In_ INT cchBuffer, _In_ DWORD dwReserved)
CRITICAL_SECTION g_csBagCacheLock
EXTERN_C HRESULT WINAPI SHCreatePropertyBagOnProfileSection(_In_z_ LPCWSTR lpFileName, _In_opt_z_ LPCWSTR pszSection, _In_ DWORD dwMode, _In_ REFIID riid, _Out_ void **ppvObj)
EXTERN_C HRESULT WINAPI IUnknown_QueryServicePropertyBag(_In_ IUnknown *punk, _In_ long flags, _In_ REFIID riid, _Outptr_ void **ppvObj)
CComPtr< CViewStatePropertyBag > g_pCachedBag
EXTERN_C HRESULT WINAPI SHCreatePropertyBagOnMemory(_In_ DWORD dwMode, _In_ REFIID riid, _Out_ void **ppvObj)
#define IsEqualGUID(rguid1, rguid2)
#define SHGVSPB_GLOBALDEFAULTS
_In_opt_ _In_opt_ _In_ _In_ DWORD cbData
#define SHGVSPB_USERDEFAULTS
#define SHGVSPB_NOAUTODEFAULTS
_In_opt_ LPCSTR pszSubKey
#define SHGVSPB_PERFOLDER
#define _WIN32_WINNT_VISTA
EXTERN_C INT WINAPI RealDriveType(INT drive, BOOL bQueryNet)
ITEMIDLIST UNALIGNED * LPITEMIDLIST
const ITEMIDLIST UNALIGNED * LPCITEMIDLIST
STRSAFEAPI StringCchPrintfW(STRSAFE_LPWSTR pszDest, size_t cchDest, STRSAFE_LPCWSTR pszFormat,...)
static bool IsEqualKey(const ATL::CStringW &k1, const ATL::CStringW &k2)
static bool IsEqualValue(const ATL::CComVariant &v1, const ATL::CComVariant &v2)
HRESULT WINAPI DECLSPEC_HOTPATCH VariantChangeType(VARIANTARG *pvargDest, VARIANTARG *pvargSrc, USHORT wFlags, VARTYPE vt)
HRESULT WINAPI DECLSPEC_HOTPATCH VariantClear(VARIANTARG *pVarg)
void WINAPI VariantInit(VARIANTARG *pVarg)
HRESULT WINAPI VariantCopy(VARIANTARG *pvargDest, VARIANTARG *pvargSrc)
wchar_t tm const _CrtWcstime_Writes_and_advances_ptr_ count wchar_t ** out
void WINAPI LeaveCriticalSection(LPCRITICAL_SECTION)
void WINAPI EnterCriticalSection(LPCRITICAL_SECTION)
*nSize LPSTR _Inout_ LPDWORD nSize
static HRESULT HRESULT_FROM_WIN32(unsigned int x)
int WINAPI GetDeviceCaps(_In_opt_ HDC, _In_ int)
#define HKEY_CURRENT_USER
int WINAPI ReleaseDC(_In_opt_ HWND, _In_ HDC)
HDC WINAPI GetDC(_In_opt_ HWND)
int WINAPI GetSystemMetrics(_In_ int)
_Must_inspect_result_ _In_ ULONG Flags