ReactOS 0.4.16-dev-980-g00983aa
CFontExt.cpp
Go to the documentation of this file.
1/*
2 * PROJECT: ReactOS Font Shell Extension
3 * LICENSE: GPL-2.0-or-later (https://spdx.org/licenses/GPL-2.0-or-later)
4 * PURPOSE: CFontExt implementation
5 * COPYRIGHT: Copyright 2019-2021 Mark Jansen <mark.jansen@reactos.org>
6 * Copyright 2019-2025 Katayama Hirofumi MZ (katayama.hirofumi.mz@gmail.com)
7 */
8
9#include "precomp.h"
10
12
13#ifndef SHCIDS_ALLFIELDS
14#define SHCIDS_ALLFIELDS 0x80000000L
15#endif
16
18{
21 int cxChar;
22 int fmt;
23};
24
26{
32};
33
35{
41};
42
43// Helper functions to translate a guid to a readable name
44bool GetInterfaceName(const WCHAR* InterfaceString, WCHAR* buf, size_t size)
45{
46 WCHAR LocalBuf[100];
47 DWORD dwType = 0, dwDataSize = size * sizeof(WCHAR);
48
49 if (!SUCCEEDED(StringCchPrintfW(LocalBuf, _countof(LocalBuf), L"Interface\\%s", InterfaceString)))
50 return false;
51
52 return RegGetValueW(HKEY_CLASSES_ROOT, LocalBuf, NULL, RRF_RT_REG_SZ, &dwType, buf, &dwDataSize) == ERROR_SUCCESS;
53}
54
56{
57 static WCHAR buf[2][300];
58 static int idx = 0;
59
60 idx ^= 1;
61
62 LPOLESTR tmp;
63 HRESULT hr = ProgIDFromCLSID(iid, &tmp);
64 if (SUCCEEDED(hr))
65 {
66 wcscpy(buf[idx], tmp);
67 CoTaskMemFree(tmp);
68 return buf[idx];
69 }
72 {
73 return buf[idx];
74 }
76
77 return buf[idx];
78}
79
81{
83}
84
86{
88}
89
90// *** IShellFolder2 methods ***
92{
93 ERR("%s() UNIMPLEMENTED\n", __FUNCTION__);
94 return E_NOTIMPL;
95}
96
98{
99 ERR("%s() UNIMPLEMENTED\n", __FUNCTION__);
100 return E_NOTIMPL;
101}
102
104{
105 ERR("%s() UNIMPLEMENTED\n", __FUNCTION__);
106 return E_NOTIMPL;
107}
108
110{
111 if (!pcsFlags || iColumn >= _countof(g_ColumnDefs))
112 return E_INVALIDARG;
113
114 *pcsFlags = g_ColumnDefs[iColumn].dwDefaultState;
115 return S_OK;
116}
117
119{
120 ERR("%s() UNIMPLEMENTED\n", __FUNCTION__);
121 return E_NOTIMPL;
122}
123
125{
126 if (iColumn >= _countof(g_ColumnDefs))
127 return E_FAIL;
128
129 psd->cxChar = g_ColumnDefs[iColumn].cxChar;
130 psd->fmt = g_ColumnDefs[iColumn].fmt;
131
132 // No item requested, so return the column name
133 if (pidl == NULL)
134 {
135 return SHSetStrRet(&psd->str, _AtlBaseModule.GetResourceInstance(), g_ColumnDefs[iColumn].iResource);
136 }
137
138 // Validate that this pidl is the last one
139 PCUIDLIST_RELATIVE curpidl = ILGetNext(pidl);
140 if (curpidl->mkid.cb != 0)
141 {
142 ERR("ERROR, unhandled PIDL!\n");
143 return E_FAIL;
144 }
145
146 // Name, ReactOS specific?
147 if (iColumn == FONTEXT_COL_NAME)
148 return GetDisplayNameOf(pidl, 0, &psd->str);
149
150 const FontPidlEntry* fontEntry = _FontFromIL(pidl);
151 if (!fontEntry)
152 {
153 ERR("ERROR, not a font PIDL!\n");
154 return E_FAIL;
155 }
156
157 // If we got here, we are in details view!
158 auto info = g_FontCache->Find(fontEntry);
159 if (info == nullptr)
160 {
161 ERR("Unable to query info about %S\n", fontEntry->Name);
163 }
164
165 int ret;
166 CStringA AttrLetters;
169 switch (iColumn)
170 {
172 return SHSetStrRet(&psd->str, PathFindFileNameW(info->File()));
173 case FONTEXT_COL_SIZE:
174 psd->str.uType = STRRET_CSTR;
175 StrFormatKBSizeA(info->FileSize().QuadPart, psd->str.cStr, MAX_PATH);
176 return S_OK;
178 psd->str.uType = STRRET_CSTR;
179 FileTimeToSystemTime(&info->FileWriteTime(), &time);
181 if (ret < 1)
182 {
183 ERR("GetDateFormatA failed\n");
184 return E_FAIL;
185 }
186 psd->str.cStr[ret-1] = ' ';
188 return S_OK;
189 case FONTEXT_COL_ATTR:
190 AttrLetters.LoadString(IDS_COL_ATTR_LETTERS);
191 if (AttrLetters.GetLength() != 5)
192 {
193 ERR("IDS_COL_ATTR_LETTERS does not contain 5 letters!\n");
194 return E_FAIL;
195 }
196 psd->str.uType = STRRET_CSTR;
197 dwAttributes = info->FileAttributes();
198 ret = 0;
200 psd->str.cStr[ret++] = AttrLetters[0];
202 psd->str.cStr[ret++] = AttrLetters[1];
204 psd->str.cStr[ret++] = AttrLetters[2];
206 psd->str.cStr[ret++] = AttrLetters[3];
208 psd->str.cStr[ret++] = AttrLetters[4];
209 psd->str.cStr[ret] = '\0';
210 return S_OK;
211 default:
212 break;
213 }
214
216 return E_NOTIMPL;
217}
218
220{
221 //ERR("%s() UNIMPLEMENTED\n", __FUNCTION__);
222 return E_NOTIMPL;
223}
224
225// *** IShellFolder2 methods ***
226STDMETHODIMP CFontExt::ParseDisplayName(HWND hwndOwner, LPBC pbc, LPOLESTR lpszDisplayName, DWORD *pchEaten, PIDLIST_RELATIVE *ppidl, DWORD *pdwAttributes)
227{
228 ERR("%s() UNIMPLEMENTED\n", __FUNCTION__);
229 return E_NOTIMPL;
230}
231
232STDMETHODIMP CFontExt::EnumObjects(HWND hwndOwner, DWORD dwFlags, LPENUMIDLIST *ppEnumIDList)
233{
234 return _CEnumFonts_CreateInstance(this, dwFlags, IID_PPV_ARG(IEnumIDList, ppEnumIDList));
235}
236
238{
239 ERR("%s(riid=%S) UNIMPLEMENTED\n", __FUNCTION__, g2s(riid));
240 return E_NOTIMPL;
241}
242
244{
245 ERR("%s() UNIMPLEMENTED\n", __FUNCTION__);
246 return E_NOTIMPL;
247}
248
250{
251 const FontPidlEntry* fontEntry1 = _FontFromIL(pidl1);
252 const FontPidlEntry* fontEntry2 = _FontFromIL(pidl2);
253
254 if (!fontEntry1 || !fontEntry2)
255 return E_INVALIDARG;
256
257 int result;
258 DWORD sortMode = lParam & 0xFFFF0000;
259 DWORD column = lParam & 0x0000FFFF;
260 if (sortMode == SHCIDS_ALLFIELDS)
261 {
263 result = (int)fontEntry1->Index - (int)fontEntry2->Index;
264 }
265 else
266 {
267 auto info1 = g_FontCache->Find(fontEntry1);
268 auto info2 = g_FontCache->Find(fontEntry2);
269
270 if (!info1 || !info2)
271 {
272 ERR("Unable to find font %S or %S in cache!\n", fontEntry1->Name, fontEntry2->Name);
273 return E_INVALIDARG;
274 }
275
276 switch (column)
277 {
278 case 0xffff:
279 /* ROS bug? */
280 case FONTEXT_COL_NAME:
281 // These items are already ordered by name
282 result = (int)fontEntry1->Index - (int)fontEntry2->Index;
283 break;
285 result = _wcsicmp(PathFindFileNameW(info1->File()), PathFindFileNameW(info2->File()));
286 break;
287 case FONTEXT_COL_SIZE:
288 result = (int)info1->FileSize().HighPart - info2->FileSize().HighPart;
289 if (result == 0)
290 result = (int)info1->FileSize().LowPart - info2->FileSize().LowPart;
291 break;
293 result = CompareFileTime(&info1->FileWriteTime(), &info2->FileWriteTime());
294 break;
295 case FONTEXT_COL_ATTR:
296 // FIXME: how to compare attributes?
297 result = (int)info1->FileAttributes() - info2->FileAttributes();
298 break;
299 default:
300 ERR("Unimplemented column %u\n", column);
301 return E_INVALIDARG;
302 }
303 }
304
306}
307
309{
311
312 *ppvOut = NULL;
313
314 if (IsEqualIID(riid, IID_IDropTarget))
315 {
316 ERR("IDropTarget not implemented\n");
317 *ppvOut = static_cast<IDropTarget *>(this);
318 AddRef();
319 hr = S_OK;
320 }
321 else if (IsEqualIID(riid, IID_IContextMenu))
322 {
323 ERR("IContextMenu not implemented\n");
324 hr = E_NOTIMPL;
325 }
326 else if (IsEqualIID(riid, IID_IShellView))
327 {
328 // Just create a default shell folder view, and register ourself as folder
329 SFV_CREATE sfv = { sizeof(SFV_CREATE) };
330 sfv.pshf = this;
331 hr = SHCreateShellFolderView(&sfv, (IShellView**)ppvOut);
332 }
333
334 return hr;
335}
336
338{
339 if (!rgfInOut || !cidl || !apidl)
340 return E_INVALIDARG;
341
342 DWORD rgf = 0;
343 while (cidl > 0 && *apidl)
344 {
345 const FontPidlEntry* fontEntry = _FontFromIL(*apidl);
346 if (fontEntry)
347 {
348 // We don't support delete yet
349 rgf |= (/*SFGAO_CANDELETE |*/ SFGAO_HASPROPSHEET | SFGAO_CANCOPY | SFGAO_FILESYSTEM);
350 }
351 else
352 {
353 rgf = 0;
354 break;
355 }
356
357 apidl++;
358 cidl--;
359 }
360
361 *rgfInOut = rgf;
362 return S_OK;
363}
364
366{
367 if (riid == IID_IContextMenu ||
368 riid == IID_IContextMenu2 ||
369 riid == IID_IContextMenu3)
370 {
371 return _CFontMenu_CreateInstance(hwndOwner, cidl, apidl, this, riid, ppvOut);
372 }
373 else if (riid == IID_IExtractIconA || riid == IID_IExtractIconW)
374 {
375 if (cidl == 1)
376 {
377 const FontPidlEntry* fontEntry = _FontFromIL(*apidl);
378 if (fontEntry)
379 {
382 // Just create a default icon extractor based on the filename
383 // We might want to create a preview with the font to get really fancy one day.
385 }
386 }
387 else
388 {
389 ERR("IID_IExtractIcon with cidl != 1 UNIMPLEMENTED\n");
390 }
391 }
392 else if (riid == IID_IDataObject)
393 {
394 if (cidl >= 1)
395 {
396 return _CDataObject_CreateInstance(m_Folder, cidl, apidl, riid, ppvOut);
397 }
398 else
399 {
400 ERR("IID_IDataObject with cidl == 0 UNIMPLEMENTED\n");
401 }
402 }
403
404 //ERR("%s(riid=%S) UNIMPLEMENTED\n", __FUNCTION__, g2s(riid));
405 return E_NOTIMPL;
406}
407
409{
410 if (!pidl)
411 return E_NOTIMPL;
412
413 // Validate that this pidl is the last one
414 PCUIDLIST_RELATIVE curpidl = ILGetNext(pidl);
415 if (curpidl->mkid.cb != 0)
416 {
417 ERR("ERROR, unhandled PIDL!\n");
418 return E_FAIL;
419 }
420
421 const FontPidlEntry* fontEntry = _FontFromIL(pidl);
422 if (!fontEntry)
423 return E_FAIL;
424
426 {
427 CStringW File = g_FontCache->Filename(g_FontCache->Find(fontEntry), true);
428 if (!File.IsEmpty())
429 {
430 return SHSetStrRet(strRet, File);
431 }
432 }
433
434 return SHSetStrRet(strRet, fontEntry->Name);
435}
436
438{
439 ERR("%s() UNIMPLEMENTED\n", __FUNCTION__);
440 return E_NOTIMPL;
441}
442
443// *** IPersistFolder2 methods ***
445{
446 if (ppidl && m_Folder)
447 {
448 *ppidl = ILClone(m_Folder);
449 return S_OK;
450 }
451
452 return E_POINTER;
453}
454
455// *** IPersistFolder methods ***
457{
458 WCHAR PidlPath[MAX_PATH + 1] = {0}, FontsDir[MAX_PATH + 1];
459 if (!SHGetPathFromIDListW(pidl, PidlPath))
460 {
461 ERR("Unable to extract path from pidl\n");
462 return E_FAIL;
463 }
464
467 {
468 ERR("Unable to get fonts path (0x%x)\n", hr);
469 return hr;
470 }
471
472 if (_wcsicmp(PidlPath, FontsDir))
473 {
474 ERR("CFontExt View initializing on unexpected folder: '%S'\n", PidlPath);
475 return E_FAIL;
476 }
477
478 m_Folder.Attach(ILClone(pidl));
479 StringCchCatW(FontsDir, _countof(FontsDir), L"\\");
480 g_FontCache->SetFontDir(FontsDir);
481
482 return S_OK;
483}
484
485// *** IPersist methods ***
487{
488 *lpClassId = CLSID_CFontExt;
489 return S_OK;
490}
491
492// *** IDropTarget methods ***
493STDMETHODIMP CFontExt::DragEnter(IDataObject* pDataObj, DWORD grfKeyState, POINTL pt, DWORD* pdwEffect)
494{
495 *pdwEffect = DROPEFFECT_NONE;
496
497 CDataObjectHIDA cida(pDataObj);
498 if (FAILED_UNEXPECTEDLY(cida.hr()))
499 return cida.hr();
500
501 *pdwEffect = DROPEFFECT_COPY;
502 return S_OK;
503}
504
506{
507 return S_OK;
508}
509
511{
512 return S_OK;
513}
514
515STDMETHODIMP CFontExt::Drop(IDataObject* pDataObj, DWORD grfKeyState, POINTL pt, DWORD* pdwEffect)
516{
517 *pdwEffect = DROPEFFECT_NONE;
518
519 CDataObjectHIDA cida(pDataObj);
520 if (!cida || cida->cidl <= 0)
521 return E_UNEXPECTED;
522
523 PCUIDLIST_ABSOLUTE pidlParent = HIDA_GetPIDLFolder(cida);
524 if (!pidlParent)
525 {
526 ERR("pidlParent is NULL\n");
527 return E_FAIL;
528 }
529
531 for (UINT n = 0; n < cida->cidl; ++n)
532 {
533 PCUIDLIST_RELATIVE pidlRelative = HIDA_GetPIDLItem(cida, n);
534 if (!pidlRelative)
535 return E_FAIL;
536
537 apidl.Add(pidlRelative);
538 }
539
540 CStringW strMessage;
541 if (InstallFontFiles(strMessage, pidlParent, cida->cidl, &apidl[0]) != S_OK)
542 {
543 // TODO: Show message
544 return E_FAIL;
545 }
546
547 // Invalidate our cache
548 g_FontCache->Read();
549
550 // Notify the system that a font was added
552
553 // Notify the shell that the folder contents are changed
555
556 // TODO: Show message
557
558 return S_OK;
559}
LONG g_ModuleRefCnt
Definition: ACPPage.cpp:13
HRESULT _CDataObject_CreateInstance(PCIDLIST_ABSOLUTE folder, UINT cidl, PCUITEMID_CHILD_ARRAY apidl, REFIID riid, LPVOID *ppvOut)
Definition: CDataObject.cpp:36
HRESULT WINAPI SHCreateShellFolderView(const SFV_CREATE *pcsfv, IShellView **ppsv)
Definition: CDefView.cpp:4794
HRESULT _CEnumFonts_CreateInstance(CFontExt *zip, DWORD flags, REFIID riid, LPVOID *ppvOut)
Definition: CEnumFonts.cpp:97
EXTERN_C HRESULT WINAPI SHCreateFileExtractIconW(_In_ LPCWSTR pszFile, _In_ DWORD dwFileAttributes, _In_ REFIID riid, _Outptr_ void **ppv)
CFontCache * g_FontCache
Definition: CFontCache.cpp:12
bool GetInterfaceName(const WCHAR *InterfaceString, WCHAR *buf, size_t size)
Definition: CFontExt.cpp:44
static FolderViewColumns g_ColumnDefs[]
Definition: CFontExt.cpp:34
#define SHCIDS_ALLFIELDS
Definition: CFontExt.cpp:14
font_columns
Definition: CFontExt.cpp:26
@ FONTEXT_COL_NAME
Definition: CFontExt.cpp:27
@ FONTEXT_COL_SIZE
Definition: CFontExt.cpp:29
@ FONTEXT_COL_FILENAME
Definition: CFontExt.cpp:28
@ FONTEXT_COL_MODIFIED
Definition: CFontExt.cpp:30
@ FONTEXT_COL_ATTR
Definition: CFontExt.cpp:31
WCHAR * g2s(REFCLSID iid)
Definition: CFontExt.cpp:55
HRESULT _CFontMenu_CreateInstance(HWND hwnd, UINT cidl, PCUITEMID_CHILD_ARRAY apidl, IShellFolder *psf, REFIID riid, LPVOID *ppvOut)
Definition: CFontMenu.cpp:111
#define InterlockedIncrement
Definition: armddk.h:53
#define InterlockedDecrement
Definition: armddk.h:52
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
Definition: precomp.h:23
#define ERR(fmt,...)
Definition: precomp.h:57
#define STDMETHODIMP
Definition: basetyps.h:43
#define UNIMPLEMENTED
Definition: ntoskrnl.c:15
EXTERN_C void WINAPI SHChangeNotify(LONG wEventId, UINT uFlags, LPCVOID dwItem1, LPCVOID dwItem2)
size_t Add(INARGTYPE element)
Definition: atlcoll.h:295
PXSTR GetString() noexcept
Definition: atlsimpstr.h:367
int GetLength() const noexcept
Definition: atlsimpstr.h:362
BOOL LoadString(_In_ UINT nID)
Definition: cstringt.h:639
CStringW Filename(CFontInfo *info, bool alwaysFullPath=false)
Definition: CFontCache.cpp:164
CFontInfo * Find(const FontPidlEntry *fontEntry)
Definition: CFontCache.cpp:145
void Read()
Definition: CFontCache.cpp:200
const CStringW & FontPath() const
Definition: CFontCache.hpp:51
void SetFontDir(const LPCWSTR Path)
Definition: CFontCache.cpp:120
STDMETHODIMP GetUIObjectOf(HWND hwndOwner, UINT cidl, PCUITEMID_CHILD_ARRAY apidl, REFIID riid, UINT *prgfInOut, LPVOID *ppvOut) override
Definition: CFontExt.cpp:365
STDMETHODIMP GetDefaultColumn(DWORD dwReserved, ULONG *pSort, ULONG *pDisplay) override
Definition: CFontExt.cpp:103
STDMETHODIMP DragEnter(IDataObject *pDataObj, DWORD grfKeyState, POINTL pt, DWORD *pdwEffect) override
Definition: CFontExt.cpp:493
STDMETHODIMP GetDefaultColumnState(UINT iColumn, SHCOLSTATEF *pcsFlags) override
Definition: CFontExt.cpp:109
STDMETHODIMP GetCurFolder(LPITEMIDLIST *ppidl) override
Definition: CFontExt.cpp:444
STDMETHODIMP GetDetailsEx(PCUITEMID_CHILD pidl, const SHCOLUMNID *pscid, VARIANT *pv) override
Definition: CFontExt.cpp:118
STDMETHODIMP GetDetailsOf(PCUITEMID_CHILD pidl, UINT iColumn, SHELLDETAILS *psd) override
Definition: CFontExt.cpp:124
STDMETHODIMP DragOver(DWORD grfKeyState, POINTL pt, DWORD *pdwEffect) override
Definition: CFontExt.cpp:505
STDMETHODIMP EnumObjects(HWND hwndOwner, DWORD dwFlags, LPENUMIDLIST *ppEnumIDList) override
Definition: CFontExt.cpp:232
STDMETHODIMP GetDefaultSearchGUID(GUID *lpguid) override
Definition: CFontExt.cpp:91
CComHeapPtr< ITEMIDLIST > m_Folder
Definition: CFontExt.hpp:18
CFontExt()
Definition: CFontExt.cpp:80
STDMETHODIMP MapColumnToSCID(UINT iColumn, SHCOLUMNID *pscid) override
Definition: CFontExt.cpp:219
STDMETHODIMP SetNameOf(HWND hwndOwner, PCUITEMID_CHILD pidl, LPCOLESTR lpName, DWORD dwFlags, PITEMID_CHILD *pPidlOut) override
Definition: CFontExt.cpp:437
STDMETHODIMP CreateViewObject(HWND hwndOwner, REFIID riid, LPVOID *ppvOut) override
Definition: CFontExt.cpp:308
STDMETHODIMP GetDisplayNameOf(PCUITEMID_CHILD pidl, DWORD dwFlags, LPSTRRET strRet) override
Definition: CFontExt.cpp:408
STDMETHODIMP BindToObject(PCUIDLIST_RELATIVE pidl, LPBC pbcReserved, REFIID riid, LPVOID *ppvOut) override
Definition: CFontExt.cpp:237
STDMETHODIMP EnumSearches(IEnumExtraSearch **ppenum) override
Definition: CFontExt.cpp:97
STDMETHODIMP GetAttributesOf(UINT cidl, PCUITEMID_CHILD_ARRAY apidl, DWORD *rgfInOut) override
Definition: CFontExt.cpp:337
STDMETHODIMP ParseDisplayName(HWND hwndOwner, LPBC pbc, LPOLESTR lpszDisplayName, DWORD *pchEaten, PIDLIST_RELATIVE *ppidl, DWORD *pdwAttributes) override
Definition: CFontExt.cpp:226
STDMETHODIMP GetClassID(CLSID *lpClassId) override
Definition: CFontExt.cpp:486
STDMETHODIMP Drop(IDataObject *pDataObj, DWORD grfKeyState, POINTL pt, DWORD *pdwEffect) override
Definition: CFontExt.cpp:515
STDMETHODIMP Initialize(LPCITEMIDLIST pidl) override
Definition: CFontExt.cpp:456
STDMETHODIMP BindToStorage(PCUIDLIST_RELATIVE pidl, LPBC pbcReserved, REFIID riid, LPVOID *ppvOut) override
Definition: CFontExt.cpp:243
~CFontExt()
Definition: CFontExt.cpp:85
STDMETHODIMP DragLeave() override
Definition: CFontExt.cpp:510
STDMETHODIMP CompareIDs(LPARAM lParam, PCUIDLIST_RELATIVE pidl1, PCUIDLIST_RELATIVE pidl2) override
Definition: CFontExt.cpp:249
Definition: File.h:16
LPARAM lParam
Definition: combotst.c:139
wcscpy
#define E_INVALIDARG
Definition: ddrawi.h:101
#define E_NOTIMPL
Definition: ddrawi.h:99
#define E_FAIL
Definition: ddrawi.h:102
#define ERROR_SUCCESS
Definition: deptool.c:10
#define NULL
Definition: types.h:112
unsigned int idx
Definition: utils.c:41
#define IDS_COL_NAME
Definition: resource.h:17
#define IDS_COL_SIZE
Definition: resource.h:18
#define IDS_COL_ATTR
Definition: resource.h:10
#define IDS_COL_FILENAME
Definition: resource.h:7
#define IDS_COL_ATTR_LETTERS
Definition: resource.h:11
#define IDS_COL_MODIFIED
Definition: resource.h:9
LSTATUS WINAPI RegGetValueW(HKEY hKey, LPCWSTR pszSubKey, LPCWSTR pszValue, DWORD dwFlags, LPDWORD pdwType, PVOID pvData, LPDWORD pcbData)
Definition: reg.c:1931
#define MAX_PATH
Definition: compat.h:34
#define FILE_ATTRIBUTE_NORMAL
Definition: compat.h:137
#define FAILED_UNEXPECTEDLY(hr)
Definition: precomp.h:121
BOOL WINAPI FileTimeToSystemTime(IN CONST FILETIME *lpFileTime, OUT LPSYSTEMTIME lpSystemTime)
Definition: time.c:188
LONG WINAPI CompareFileTime(IN CONST FILETIME *lpFileTime1, IN CONST FILETIME *lpFileTime2)
Definition: time.c:106
HRESULT WINAPI DECLSPEC_HOTPATCH ProgIDFromCLSID(REFCLSID clsid, LPOLESTR *ppszProgID)
Definition: compobj.c:2530
INT WINAPI StringFromGUID2(REFGUID id, LPOLESTR str, INT cmax)
Definition: compobj.c:2434
#define RRF_RT_REG_SZ
Definition: driver.c:575
HRESULT WINAPI SHGetFolderPathW(HWND hwndOwner, int nFolder, HANDLE hToken, DWORD dwFlags, LPWSTR pszPath)
Definition: shellpath.c:2740
LPWSTR WINAPI PathFindFileNameW(LPCWSTR lpszPath)
Definition: path.c:394
LPSTR WINAPI StrFormatKBSizeA(LONGLONG llBytes, LPSTR lpszDest, UINT cchMax)
Definition: string.c:1741
unsigned int(__cdecl typeof(jpeg_read_scanlines))(struct jpeg_decompress_struct *
Definition: typeof.h:31
#define pt(x, y)
Definition: drawing.c:79
#define __FUNCTION__
Definition: types.h:116
unsigned long DWORD
Definition: ntddk_ex.h:95
const GUID CLSID_CFontExt
Definition: fontext.cpp:13
HRESULT InstallFontFiles(_Out_ CStringW &strMsg, _In_ PCUIDLIST_ABSOLUTE pidlParent, _In_ UINT cidl, _In_ PCUITEMID_CHILD_ARRAY apidl)
Definition: fontext.cpp:104
const FontPidlEntry * _FontFromIL(LPCITEMIDLIST pidl)
Definition: fontpidl.cpp:31
GLdouble n
Definition: glext.h:7729
GLsizeiptr size
Definition: glext.h:5919
GLenum GLuint GLenum GLsizei const GLchar * buf
Definition: glext.h:7751
GLuint64EXT * result
Definition: glext.h:11304
VOID WINAPI CoTaskMemFree(LPVOID ptr)
Definition: ifs.c:442
REFIID riid
Definition: atlbase.h:39
const DWORD DROPEFFECT_NONE
Definition: oleidl.idl:929
const DWORD DROPEFFECT_COPY
Definition: oleidl.idl:930
ULONG AddRef()
#define S_OK
Definition: intsafe.h:52
#define SUCCEEDED(hr)
Definition: intsafe.h:50
INT WINAPI GetTimeFormatA(LCID lcid, DWORD dwFlags, const SYSTEMTIME *lpTime, LPCSTR lpFormat, LPSTR lpTimeStr, INT cchOut)
Definition: lcformat.c:1040
INT WINAPI GetDateFormatA(LCID lcid, DWORD dwFlags, const SYSTEMTIME *lpTime, LPCSTR lpFormat, LPSTR lpDateStr, INT cchOut)
Definition: lcformat.c:932
__u16 time
Definition: mkdosfs.c:8
#define ERROR_FILE_NOT_FOUND
Definition: disk.h:79
static LPOLESTR
Definition: stg_prop.c:27
_In_ HANDLE _In_ DWORD _In_ DWORD _Inout_opt_ LPOVERLAPPED _In_opt_ LPTRANSMIT_FILE_BUFFERS _In_ DWORD dwReserved
Definition: mswsock.h:95
unsigned int UINT
Definition: ndis.h:50
#define FILE_ATTRIBUTE_READONLY
Definition: nt_native.h:702
#define FILE_ATTRIBUTE_COMPRESSED
Definition: nt_native.h:711
#define FILE_ATTRIBUTE_HIDDEN
Definition: nt_native.h:703
#define FILE_ATTRIBUTE_SYSTEM
Definition: nt_native.h:704
#define FILE_ATTRIBUTE_ARCHIVE
Definition: nt_native.h:706
#define LOCALE_USER_DEFAULT
#define L(x)
Definition: ntvdm.h:50
interface IBindCtx * LPBC
Definition: objfwd.h:18
const GUID IID_IDataObject
LPITEMIDLIST WINAPI ILClone(LPCITEMIDLIST pidl)
Definition: pidl.c:237
BOOL WINAPI SHGetPathFromIDListW(LPCITEMIDLIST pidl, LPWSTR pszPath)
Definition: pidl.c:1454
LPITEMIDLIST WINAPI ILGetNext(LPCITEMIDLIST pidl)
Definition: pidl.c:970
#define LVCFMT_LEFT
Definition: commctrl.h:2603
#define LVCFMT_RIGHT
Definition: commctrl.h:2604
#define IsEqualIID(riid1, riid2)
Definition: guiddef.h:95
#define REFIID
Definition: guiddef.h:118
#define REFCLSID
Definition: guiddef.h:117
_Check_return_ _CRTIMP int __cdecl _wcsicmp(_In_z_ const wchar_t *_Str1, _In_z_ const wchar_t *_Str2)
static PCUIDLIST_RELATIVE HIDA_GetPIDLItem(CIDA const *pida, SIZE_T i)
Definition: shellutils.h:641
static PCUIDLIST_ABSOLUTE HIDA_GetPIDLFolder(CIDA const *pida)
Definition: shellutils.h:636
#define MAKE_COMPARE_HRESULT(x)
Definition: shellutils.h:623
HRESULT hr
Definition: shlfolder.c:183
#define CSIDL_FONTS
Definition: shlobj.h:2200
#define SHCNE_UPDATEDIR
Definition: shlobj.h:1910
#define SHCNF_PATHW
Definition: shlobj.h:1933
struct _SFV_CREATE SFV_CREATE
ITEMIDLIST UNALIGNED * LPITEMIDLIST
Definition: shtypes.idl:41
@ STRRET_CSTR
Definition: shtypes.idl:87
const ITEMIDLIST_ABSOLUTE UNALIGNED * PCUIDLIST_ABSOLUTE
Definition: shtypes.idl:63
const PCUITEMID_CHILD * PCUITEMID_CHILD_ARRAY
Definition: shtypes.idl:71
const ITEMID_CHILD UNALIGNED * PCUITEMID_CHILD
Definition: shtypes.idl:70
@ SHCOLSTATE_TYPE_DATE
Definition: shtypes.idl:123
@ SHCOLSTATE_TYPE_STR
Definition: shtypes.idl:121
@ SHCOLSTATE_ONBYDEFAULT
Definition: shtypes.idl:125
const ITEMIDLIST_RELATIVE UNALIGNED * PCUIDLIST_RELATIVE
Definition: shtypes.idl:57
const ITEMIDLIST UNALIGNED * LPCITEMIDLIST
Definition: shtypes.idl:42
DWORD SHCOLSTATEF
Definition: shtypes.idl:142
#define _countof(array)
Definition: sndvol32.h:70
STRSAFEAPI StringCchPrintfW(STRSAFE_LPWSTR pszDest, size_t cchDest, STRSAFE_LPCWSTR pszFormat,...)
Definition: strsafe.h:530
STRSAFEAPI StringCchCatW(STRSAFE_LPWSTR pszDest, size_t cchDest, STRSAFE_LPCWSTR pszSrc)
Definition: strsafe.h:325
DWORD dwDefaultState
Definition: CFontExt.cpp:20
WCHAR Name[1]
Definition: fontpidl.hpp:17
STRRET str
Definition: shtypes.idl:108
IShellFolder * pshf
Definition: shlobj.h:1366
char cStr[MAX_PATH]
Definition: shtypes.idl:98
UINT uType
Definition: shtypes.idl:93
uint32_t ULONG
Definition: typedefs.h:59
DWORD dwAttributes
Definition: vdmdbg.h:34
int ret
_In_ LPCSTR lpName
Definition: winbase.h:2820
_In_ PCCERT_CONTEXT _In_ DWORD dwFlags
Definition: wincrypt.h:1176
LONG_PTR LPARAM
Definition: windef.h:208
#define E_NOINTERFACE
Definition: winerror.h:2364
#define E_UNEXPECTED
Definition: winerror.h:2456
#define HRESULT_FROM_WIN32(x)
Definition: winerror.h:92
#define E_POINTER
Definition: winerror.h:2365
#define TIME_NOSECONDS
Definition: winnls.h:280
#define DATE_SHORTDATE
Definition: winnls.h:198
#define HKEY_CLASSES_ROOT
Definition: winreg.h:10
#define HWND_BROADCAST
Definition: winuser.h:1215
#define WM_FONTCHANGE
Definition: winuser.h:1644
LRESULT WINAPI SendMessageW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
#define IID_PPV_ARG(Itype, ppType)
__wchar_t WCHAR
Definition: xmlstorage.h:180