ReactOS 0.4.15-dev-8434-g155a7c7
classes.c File Reference
#include <wine/config.h>
#include <stdio.h>
#include <windef.h>
#include <winbase.h>
#include <shlobj.h>
#include <shlguid_undoc.h>
#include <shlwapi.h>
#include <wine/debug.h>
#include <wine/unicode.h>
#include "pidl.h"
#include "shell32_main.h"
#include "shresdef.h"
Include dependency graph for classes.c:

Go to the source code of this file.

Macros

#define WIN32_NO_STATUS
 
#define _INC_WINDOWS
 
#define COBJMACROS
 
#define MAX_EXTENSION_LENGTH   20
 

Functions

 WINE_DEFAULT_DEBUG_CHANNEL (shell)
 
BOOL HCR_MapTypeToValueW (LPCWSTR szExtension, LPWSTR szFileType, LONG len, BOOL bPrependDot)
 
BOOL HCR_MapTypeToValueA (LPCSTR szExtension, LPSTR szFileType, LONG len, BOOL bPrependDot)
 
EXTERN_C HRESULT SHELL32_EnumDefaultVerbList (LPCWSTR List, UINT Index, LPWSTR Verb, SIZE_T cchMax)
 
BOOL HCR_GetDefaultVerbW (HKEY hkeyClass, LPCWSTR szVerb, LPWSTR szDest, DWORD len)
 
BOOL HCR_GetExecuteCommandW (HKEY hkeyClass, LPCWSTR szClass, LPCWSTR szVerb, LPWSTR szDest, DWORD len)
 
BOOL HCR_RegOpenClassIDKey (REFIID riid, HKEY *hkey)
 
static BOOL HCR_RegGetIconW (HKEY hkey, LPWSTR szDest, LPCWSTR szName, DWORD len, int *picon_idx)
 
static BOOL HCR_RegGetIconA (HKEY hkey, LPSTR szDest, LPCSTR szName, DWORD len, int *picon_idx)
 
BOOL HCR_GetIconW (LPCWSTR szClass, LPWSTR szDest, LPCWSTR szName, DWORD len, int *picon_idx)
 
BOOL HCR_GetIconA (LPCSTR szClass, LPSTR szDest, LPCSTR szName, DWORD len, int *picon_idx)
 
BOOL HCR_GetClassNameW (REFIID riid, LPWSTR szDest, DWORD len)
 
BOOL HCR_GetClassNameA (REFIID riid, LPSTR szDest, DWORD len)
 
BOOL HCR_GetFolderAttributes (LPCITEMIDLIST pidlFolder, LPDWORD pdwAttributes)
 

Macro Definition Documentation

◆ _INC_WINDOWS

#define _INC_WINDOWS

Definition at line 27 of file classes.c.

◆ COBJMACROS

#define COBJMACROS

Definition at line 28 of file classes.c.

◆ MAX_EXTENSION_LENGTH

#define MAX_EXTENSION_LENGTH   20

Definition at line 47 of file classes.c.

◆ WIN32_NO_STATUS

#define WIN32_NO_STATUS

Definition at line 26 of file classes.c.

Function Documentation

◆ HCR_GetClassNameA()

BOOL HCR_GetClassNameA ( REFIID  riid,
LPSTR  szDest,
DWORD  len 
)

Definition at line 480 of file classes.c.

481{ HKEY hkey;
482 BOOL ret = FALSE;
483 DWORD buflen = len;
484#ifdef __REACTOS__
485 CHAR szName[100];
486 LPOLESTR pStr;
487#endif
488
489 szDest[0] = 0;
490
491#ifdef __REACTOS__
492 if (StringFromCLSID(riid, &pStr) == S_OK)
493 {
494 DWORD dwLen = buflen * sizeof(CHAR);
495 sprintf(szName, "Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\CLSID\\%S", pStr);
497 {
498 ret = TRUE;
499 }
500 CoTaskMemFree(pStr);
501 }
502 if (!ret && HCR_RegOpenClassIDKey(riid, &hkey))
503#else
504 if (HCR_RegOpenClassIDKey(riid, &hkey))
505#endif
506 {
507 if (!RegLoadMUIStringA(hkey,"LocalizedString",szDest,len,NULL,0,NULL) ||
508 !RegQueryValueExA(hkey,"",0,NULL,(LPBYTE)szDest,&len))
509 {
510 ret = TRUE;
511 }
512 RegCloseKey(hkey);
513 }
514
515 if (!ret || !szDest[0])
516 {
517 if(IsEqualIID(riid, &CLSID_ShellDesktop))
518 {
519 if (LoadStringA(shell32_hInstance, IDS_DESKTOP, szDest, buflen))
520 ret = TRUE;
521 }
522 else if (IsEqualIID(riid, &CLSID_MyComputer))
523 {
524 if(LoadStringA(shell32_hInstance, IDS_MYCOMPUTER, szDest, buflen))
525 ret = TRUE;
526 }
527#ifdef __REACTOS__
528 else if (IsEqualIID(riid, &CLSID_MyDocuments))
529 {
530 if(LoadStringA(shell32_hInstance, IDS_PERSONAL, szDest, buflen))
531 ret = TRUE;
532 }
533 else if (IsEqualIID(riid, &CLSID_RecycleBin))
534 {
536 ret = TRUE;
537 }
538 else if (IsEqualIID(riid, &CLSID_ControlPanel))
539 {
541 ret = TRUE;
542 }
544 {
546 ret = TRUE;
547 }
548#endif
549 }
550
551 TRACE("-- (%s)\n", szDest);
552
553 return ret;
554}
#define shell32_hInstance
#define CHAR(Char)
#define RegCloseKey(hKey)
Definition: registry.h:49
#define NULL
Definition: types.h:112
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
#define IDS_PERSONAL
Definition: desktop.c:27
LSTATUS WINAPI RegGetValueA(HKEY hKey, LPCSTR pszSubKey, LPCSTR pszValue, DWORD dwFlags, LPDWORD pdwType, PVOID pvData, LPDWORD pcbData)
Definition: reg.c:2037
LONG WINAPI RegQueryValueExA(_In_ HKEY hkeyorg, _In_ LPCSTR name, _In_ LPDWORD reserved, _Out_opt_ LPDWORD type, _Out_opt_ LPBYTE data, _Inout_opt_ LPDWORD count)
Definition: reg.c:4009
LONG WINAPI RegLoadMUIStringA(IN HKEY hKey, IN LPCSTR pszValue OPTIONAL, OUT LPSTR pszOutBuf, IN DWORD cbOutBuf, OUT LPDWORD pcbData OPTIONAL, IN DWORD Flags, IN LPCSTR pszDirectory OPTIONAL)
Definition: reg.c:5268
HRESULT WINAPI StringFromCLSID(REFCLSID id, LPOLESTR *idstr)
Definition: compobj.c:2412
#define RRF_RT_REG_SZ
Definition: driver.c:575
const GUID CLSID_AdminFolderShortcut
unsigned int BOOL
Definition: ntddk_ex.h:94
unsigned long DWORD
Definition: ntddk_ex.h:95
GLenum GLsizei len
Definition: glext.h:6722
VOID WINAPI CoTaskMemFree(LPVOID ptr)
Definition: ifs.c:442
REFIID riid
Definition: atlbase.h:39
#define S_OK
Definition: intsafe.h:52
#define sprintf(buf, format,...)
Definition: sprintf.c:55
static LPOLESTR
Definition: stg_prop.c:27
static const WCHAR szName[]
Definition: powrprof.c:45
#define IsEqualIID(riid1, riid2)
Definition: guiddef.h:95
BOOL HCR_RegOpenClassIDKey(REFIID riid, HKEY *hkey)
Definition: classes.c:236
#define IDS_DESKTOP
Definition: shresdef.h:73
#define IDS_MYCOMPUTER
Definition: shresdef.h:282
#define IDS_CONTROLPANEL
Definition: shresdef.h:141
#define IDS_ADMINISTRATIVETOOLS
Definition: shresdef.h:277
#define IDS_RECYCLEBIN_FOLDER_NAME
Definition: shresdef.h:271
#define TRACE(s)
Definition: solgame.cpp:4
unsigned char * LPBYTE
Definition: typedefs.h:53
int ret
#define HKEY_CURRENT_USER
Definition: winreg.h:11
int WINAPI LoadStringA(_In_opt_ HINSTANCE hInstance, _In_ UINT uID, _Out_writes_to_(cchBufferMax, return+1) LPSTR lpBuffer, _In_ int cchBufferMax)
char CHAR
Definition: xmlstorage.h:175

Referenced by shdebugstr_guid().

◆ HCR_GetClassNameW()

BOOL HCR_GetClassNameW ( REFIID  riid,
LPWSTR  szDest,
DWORD  len 
)

Definition at line 405 of file classes.c.

406{
407 HKEY hkey;
408 BOOL ret = FALSE;
409 DWORD buflen = len;
410#ifdef __REACTOS__
411 WCHAR szName[100];
412 LPOLESTR pStr;
413#endif
414
415 szDest[0] = 0;
416
417#ifdef __REACTOS__
418 if (StringFromCLSID(riid, &pStr) == S_OK)
419 {
420 DWORD dwLen = buflen * sizeof(WCHAR);
421 swprintf(szName, L"Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\CLSID\\%s", pStr);
423 {
424 ret = TRUE;
425 }
426 CoTaskMemFree(pStr);
427 }
428 if (!ret && HCR_RegOpenClassIDKey(riid, &hkey))
429#else
430 if (HCR_RegOpenClassIDKey(riid, &hkey))
431#endif
432 {
433 if (!RegLoadMUIStringW(hkey, L"LocalizedString", szDest, len, NULL, 0, NULL) ||
434 !RegQueryValueExW(hkey, L"", 0, NULL, (LPBYTE)szDest, &len))
435 {
436 ret = TRUE;
437 }
438 RegCloseKey(hkey);
439 }
440
441 if (!ret || !szDest[0])
442 {
443 if(IsEqualIID(riid, &CLSID_ShellDesktop))
444 {
445 if (LoadStringW(shell32_hInstance, IDS_DESKTOP, szDest, buflen))
446 ret = TRUE;
447 }
448 else if (IsEqualIID(riid, &CLSID_MyComputer))
449 {
450 if(LoadStringW(shell32_hInstance, IDS_MYCOMPUTER, szDest, buflen))
451 ret = TRUE;
452 }
453#ifdef __REACTOS__
454 else if (IsEqualIID(riid, &CLSID_MyDocuments))
455 {
456 if(LoadStringW(shell32_hInstance, IDS_PERSONAL, szDest, buflen))
457 ret = TRUE;
458 }
459 else if (IsEqualIID(riid, &CLSID_RecycleBin))
460 {
462 ret = TRUE;
463 }
464 else if (IsEqualIID(riid, &CLSID_ControlPanel))
465 {
467 ret = TRUE;
468 }
470 {
472 ret = TRUE;
473 }
474#endif
475 }
476 TRACE("-- %s\n", debugstr_w(szDest));
477 return ret;
478}
LONG RegLoadMUIStringW(IN HKEY hKey, IN LPCWSTR pszValue OPTIONAL, OUT LPWSTR pszOutBuf, IN DWORD cbOutBuf, OUT LPDWORD pcbData OPTIONAL, IN DWORD Flags, IN LPCWSTR pszDirectory OPTIONAL)
Definition: muireg.c:53
LSTATUS WINAPI RegGetValueW(HKEY hKey, LPCWSTR pszSubKey, LPCWSTR pszValue, DWORD dwFlags, LPDWORD pdwType, PVOID pvData, LPDWORD pcbData)
Definition: reg.c:1931
LONG WINAPI RegQueryValueExW(_In_ HKEY hkeyorg, _In_ LPCWSTR name, _In_ LPDWORD reserved, _In_ LPDWORD type, _In_ LPBYTE data, _In_ LPDWORD count)
Definition: reg.c:4103
#define swprintf
Definition: precomp.h:40
#define debugstr_w
Definition: kernel32.h:32
#define L(x)
Definition: ntvdm.h:50
int WINAPI LoadStringW(_In_opt_ HINSTANCE hInstance, _In_ UINT uID, _Out_writes_to_(cchBufferMax, return+1) LPWSTR lpBuffer, _In_ int cchBufferMax)
__wchar_t WCHAR
Definition: xmlstorage.h:180

Referenced by _ILSimpleGetTextW(), and CRegFolder::GetDisplayNameOf().

◆ HCR_GetDefaultVerbW()

BOOL HCR_GetDefaultVerbW ( HKEY  hkeyClass,
LPCWSTR  szVerb,
LPWSTR  szDest,
DWORD  len 
)

Definition at line 135 of file classes.c.

136{
137 WCHAR sTemp[MAX_PATH], verbs[MAX_PATH];
138 LONG size;
139 HKEY hkey;
140
141 TRACE("%p %s %p\n", hkeyClass, debugstr_w(szVerb), szDest);
142
143 if (szVerb && *szVerb)
144 {
145 lstrcpynW(szDest, szVerb, len);
146 return TRUE;
147 }
148
149 /* MSDN says to first try the default verb */
150 size = _countof(verbs);
151 if (!RegQueryValueW(hkeyClass, L"shell", verbs, &size) && *verbs)
152 {
153 for (UINT i = 0;; ++i)
154 {
155 if (FAILED(SHELL32_EnumDefaultVerbList(verbs, i, szDest, len)))
156 break;
157 if (FAILED(StringCchPrintfW(sTemp, _countof(sTemp), L"shell\\%s\\command", szDest)))
158 break;
159 if (!RegOpenKeyExW(hkeyClass, sTemp, 0, KEY_READ, &hkey))
160 {
161 RegCloseKey(hkey);
162 TRACE("default verb=%s\n", debugstr_w(szDest));
163 return TRUE;
164 }
165 }
166 }
167 *szDest = UNICODE_NULL;
168
169 /* then fallback to 'open' */
170 lstrcpyW(sTemp, L"shell\\open\\command");
171 if (!RegOpenKeyExW(hkeyClass, sTemp, 0, KEY_READ, &hkey))
172 {
173 RegCloseKey(hkey);
174 lstrcpynW(szDest, L"open", len);
175 TRACE("default verb=open\n");
176 return TRUE;
177 }
178
179 /* and then just use the first verb on Windows >= 2000 */
180#ifdef __REACTOS__
181 if (!RegOpenKeyExW(hkeyClass, L"shell", 0, KEY_READ, &hkey))
182 {
183 if (!RegEnumKeyW(hkey, 0, szDest, len) && *szDest)
184 {
185 TRACE("default verb=first verb=%s\n", debugstr_w(szDest));
186 RegCloseKey(hkey);
187 return TRUE;
188 }
189 RegCloseKey(hkey);
190 }
191#else
192 if (!RegEnumKeyW(hkeyClass, 0, szDest, len) && *szDest)
193 {
194 TRACE("default verb=first verb=%s\n", debugstr_w(szDest));
195 return TRUE;
196 }
197#endif
198
199 TRACE("no default verb!\n");
200 return FALSE;
201}
LONG WINAPI RegOpenKeyExW(HKEY hKey, LPCWSTR lpSubKey, DWORD ulOptions, REGSAM samDesired, PHKEY phkResult)
Definition: reg.c:3333
LSTATUS WINAPI RegQueryValueW(HKEY hkey, LPCWSTR name, LPWSTR data, LPLONG count)
Definition: reg.c:4241
LONG WINAPI RegEnumKeyW(HKEY hKey, DWORD dwIndex, LPWSTR lpName, DWORD cbName)
Definition: reg.c:2393
#define MAX_PATH
Definition: compat.h:34
#define lstrcpyW
Definition: compat.h:749
#define lstrcpynW
Definition: compat.h:738
GLsizeiptr size
Definition: glext.h:5919
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
#define FAILED(hr)
Definition: intsafe.h:51
unsigned int UINT
Definition: ndis.h:50
#define KEY_READ
Definition: nt_native.h:1023
#define UNICODE_NULL
long LONG
Definition: pedump.c:60
EXTERN_C HRESULT SHELL32_EnumDefaultVerbList(LPCWSTR List, UINT Index, LPWSTR Verb, SIZE_T cchMax)
#define _countof(array)
Definition: sndvol32.h:70
STRSAFEAPI StringCchPrintfW(STRSAFE_LPWSTR pszDest, size_t cchDest, STRSAFE_LPCWSTR pszFormat,...)
Definition: strsafe.h:530

Referenced by HCR_GetExecuteCommandW(), and SHELL_FindExecutableByVerb().

◆ HCR_GetExecuteCommandW()

BOOL HCR_GetExecuteCommandW ( HKEY  hkeyClass,
LPCWSTR  szClass,
LPCWSTR  szVerb,
LPWSTR  szDest,
DWORD  len 
)

Definition at line 203 of file classes.c.

204{
205 WCHAR sTempVerb[MAX_PATH];
206 BOOL ret;
207
208 TRACE("%p %s %s %p\n", hkeyClass, debugstr_w(szClass), debugstr_w(szVerb), szDest);
209
210 if (szClass)
211 RegOpenKeyExW(HKEY_CLASSES_ROOT, szClass, 0, KEY_READ, &hkeyClass);
212 if (!hkeyClass)
213 return FALSE;
214 ret = FALSE;
215
216 if (HCR_GetDefaultVerbW(hkeyClass, szVerb, sTempVerb, sizeof(sTempVerb)/sizeof(sTempVerb[0])))
217 {
218 WCHAR sTemp[MAX_PATH];
219 lstrcpyW(sTemp, L"shell\\");
220 lstrcatW(sTemp, sTempVerb);
221 lstrcatW(sTemp, L"\\command");
222 ret = (ERROR_SUCCESS == SHGetValueW(hkeyClass, sTemp, NULL, NULL, szDest, &len));
223 }
224 if (szClass)
225 RegCloseKey(hkeyClass);
226
227 TRACE("-- %s\n", debugstr_w(szDest) );
228 return ret;
229}
#define ERROR_SUCCESS
Definition: deptool.c:10
DWORD WINAPI SHGetValueW(HKEY hKey, LPCWSTR lpszSubKey, LPCWSTR lpszValue, LPDWORD pwType, LPVOID pvData, LPDWORD pcbData)
Definition: reg.c:1236
LPWSTR WINAPI lstrcatW(LPWSTR lpString1, LPCWSTR lpString2)
Definition: lstring.c:274
BOOL HCR_GetDefaultVerbW(HKEY hkeyClass, LPCWSTR szVerb, LPWSTR szDest, DWORD len)
Definition: classes.c:135
#define HKEY_CLASSES_ROOT
Definition: winreg.h:10

Referenced by SHELL_execute_class(), and SHELL_translate_idlist().

◆ HCR_GetFolderAttributes()

BOOL HCR_GetFolderAttributes ( LPCITEMIDLIST  pidlFolder,
LPDWORD  pdwAttributes 
)

Definition at line 573 of file classes.c.

574{
575 HKEY hSFKey;
576 LPOLESTR pwszCLSID;
577 LONG lResult;
578 DWORD dwTemp, dwLen;
579 WCHAR wszShellFolderKey[] = L"CLSID\\{00021400-0000-0000-C000-000000000046}\\ShellFolder";
580
581 TRACE("(pidlFolder=%p, pdwAttributes=%p)\n", pidlFolder, pdwAttributes);
582
583 if (!_ILIsPidlSimple(pidlFolder)) {
584 static BOOL firstHit = TRUE;
585 if (firstHit) {
586 ERR("should be called for simple PIDL's only!\n");
587 firstHit = FALSE;
588 }
589 return FALSE;
590 }
591
592 if (!_ILIsDesktop(pidlFolder)) {
593 if (FAILED(StringFromCLSID(_ILGetGUIDPointer(pidlFolder), &pwszCLSID))) return FALSE;
594 memcpy(&wszShellFolderKey[6], pwszCLSID, 38 * sizeof(WCHAR));
595 CoTaskMemFree(pwszCLSID);
596 }
597
598 lResult = RegOpenKeyExW(HKEY_CLASSES_ROOT, wszShellFolderKey, 0, KEY_READ, &hSFKey);
599#ifdef __REACTOS__
600 if (lResult != ERROR_SUCCESS)
601 {
602 ERR("Cannot open key: %ls\n", wszShellFolderKey);
603 return FALSE;
604 }
605#else
606 if (lResult != ERROR_SUCCESS) return FALSE;
607#endif
608
609 dwLen = sizeof(DWORD);
610 lResult = RegQueryValueExW(hSFKey, L"CallForAttributes", 0, NULL, (LPBYTE)&dwTemp, &dwLen);
611 if ((lResult == ERROR_SUCCESS) && (dwTemp & *pdwAttributes)) {
612 LPSHELLFOLDER psfDesktop, psfFolder;
613 HRESULT hr;
614
615 RegCloseKey(hSFKey);
616 hr = SHGetDesktopFolder(&psfDesktop);
617 if (SUCCEEDED(hr)) {
618 hr = IShellFolder_BindToObject(psfDesktop, pidlFolder, NULL, &IID_IShellFolder,
619 (LPVOID*)&psfFolder);
620 if (SUCCEEDED(hr)) {
621 hr = IShellFolder_GetAttributesOf(psfFolder, 0, NULL, pdwAttributes);
622 IShellFolder_Release(psfFolder);
623 }
624 IShellFolder_Release(psfDesktop);
625 }
626 if (FAILED(hr)) return FALSE;
627 } else {
628 lResult = RegQueryValueExW(hSFKey, L"Attributes", 0, NULL, (LPBYTE)&dwTemp, &dwLen);
629 RegCloseKey(hSFKey);
630 if (lResult == ERROR_SUCCESS) {
631 *pdwAttributes &= dwTemp;
632 } else {
633 return FALSE;
634 }
635 }
636
637 TRACE("-- *pdwAttributes == 0x%08x\n", *pdwAttributes);
638
639 return TRUE;
640}
BOOL _ILIsDesktop(LPCITEMIDLIST pidl)
Definition: CBandSite.h:24
HRESULT WINAPI SHGetDesktopFolder(IShellFolder **psf)
#define ERR(fmt,...)
Definition: precomp.h:57
BOOL WINAPI _ILIsPidlSimple(LPCITEMIDLIST pidl)
#define SUCCEEDED(hr)
Definition: intsafe.h:50
#define memcpy(s1, s2, n)
Definition: mkisofs.h:878
#define DWORD
Definition: nt_native.h:44
IID * _ILGetGUIDPointer(LPCITEMIDLIST pidl)
Definition: pidl.c:2292
HRESULT hr
Definition: shlfolder.c:183

Referenced by CRegFolder::GetGuidItemAttributes().

◆ HCR_GetIconA()

BOOL HCR_GetIconA ( LPCSTR  szClass,
LPSTR  szDest,
LPCSTR  szName,
DWORD  len,
int picon_idx 
)

Definition at line 322 of file classes.c.

323{
324 HKEY hkey;
325 char sTemp[MAX_PATH];
326 BOOL ret = FALSE;
327
328 TRACE("%s\n",szClass );
329
330 sprintf(sTemp, "%s\\DefaultIcon",szClass);
331
332 if (!RegOpenKeyExA(HKEY_CLASSES_ROOT, sTemp, 0, KEY_READ, &hkey))
333 {
334 ret = HCR_RegGetIconA(hkey, szDest, szName, len, picon_idx);
335 RegCloseKey(hkey);
336 }
337
338 if (ret)
339 TRACE("-- %s %i\n", szDest, *picon_idx);
340 else
341 TRACE("-- not found\n");
342
343 return ret;
344}
LONG WINAPI RegOpenKeyExA(_In_ HKEY hKey, _In_ LPCSTR lpSubKey, _In_ DWORD ulOptions, _In_ REGSAM samDesired, _Out_ PHKEY phkResult)
Definition: reg.c:3298
static BOOL HCR_RegGetIconA(HKEY hkey, LPSTR szDest, LPCSTR szName, DWORD len, int *picon_idx)
Definition: classes.c:273

◆ HCR_GetIconW()

BOOL HCR_GetIconW ( LPCWSTR  szClass,
LPWSTR  szDest,
LPCWSTR  szName,
DWORD  len,
int picon_idx 
)

Definition at line 297 of file classes.c.

298{
299 HKEY hkey;
300 WCHAR sTemp[MAX_PATH];
301 BOOL ret = FALSE;
302
303 TRACE("%s\n",debugstr_w(szClass) );
304
305 lstrcpynW(sTemp, szClass, MAX_PATH);
306 lstrcatW(sTemp, L"\\DefaultIcon");
307
308 if (!RegOpenKeyExW(HKEY_CLASSES_ROOT, sTemp, 0, KEY_READ, &hkey))
309 {
310 ret = HCR_RegGetIconW(hkey, szDest, szName, len, picon_idx);
311 RegCloseKey(hkey);
312 }
313
314 if(ret)
315 TRACE("-- %s %i\n", debugstr_w(szDest), *picon_idx);
316 else
317 TRACE("-- not found\n");
318
319 return ret;
320}
static BOOL HCR_RegGetIconW(HKEY hkey, LPWSTR szDest, LPCWSTR szName, DWORD len, int *picon_idx)
Definition: classes.c:249

Referenced by CDrivesExtractIcon_CreateInstance(), CGuidItemExtractIcon_CreateInstance(), getDefaultIconLocation(), getIconLocationForFolder(), and SHGetFileInfoW().

◆ HCR_MapTypeToValueA()

BOOL HCR_MapTypeToValueA ( LPCSTR  szExtension,
LPSTR  szFileType,
LONG  len,
BOOL  bPrependDot 
)

Definition at line 91 of file classes.c.

92{
93 HKEY hkey;
94 char szTemp[MAX_EXTENSION_LENGTH + 2];
95
96 TRACE("%s %p\n", szExtension, szFileType);
97
98 /* added because we do not want to have double dots */
99 if (szExtension[0] == '.')
100 bPrependDot = FALSE;
101
102 if (bPrependDot)
103 szTemp[0] = '.';
104
105 lstrcpynA(szTemp + (bPrependDot?1:0), szExtension, MAX_EXTENSION_LENGTH);
106
107 if (RegOpenKeyExA(HKEY_CLASSES_ROOT, szTemp, 0, KEY_READ, &hkey))
108 {
109 return FALSE;
110 }
111
112#ifdef __REACTOS__
113 if (!RegLoadMUIStringA(hkey, "FriendlyTypeName", szFileType, len, NULL, 0, NULL))
114 {
115 RegCloseKey(hkey);
116 return TRUE;
117 }
118#endif
119
120 if (RegQueryValueA(hkey, NULL, szFileType, &len))
121 {
122 RegCloseKey(hkey);
123 return FALSE;
124 }
125
126 RegCloseKey(hkey);
127
128 TRACE("--UE;\n} %s\n", szFileType);
129
130 return TRUE;
131}
LSTATUS WINAPI RegQueryValueA(HKEY hkey, LPCSTR name, LPSTR data, LPLONG count)
Definition: reg.c:4212
#define lstrcpynA
Definition: compat.h:751
#define MAX_EXTENSION_LENGTH
Definition: classes.c:47

◆ HCR_MapTypeToValueW()

BOOL HCR_MapTypeToValueW ( LPCWSTR  szExtension,
LPWSTR  szFileType,
LONG  len,
BOOL  bPrependDot 
)

Definition at line 49 of file classes.c.

50{
51 HKEY hkey;
52 WCHAR szTemp[MAX_EXTENSION_LENGTH + 2];
53
54 TRACE("%s %p\n", debugstr_w(szExtension), szFileType);
55
56 /* added because we do not want to have double dots */
57 if (szExtension[0] == '.')
58 bPrependDot = FALSE;
59
60 if (bPrependDot)
61 szTemp[0] = '.';
62
63 lstrcpynW(szTemp + (bPrependDot?1:0), szExtension, MAX_EXTENSION_LENGTH);
64
65 if (RegOpenKeyExW(HKEY_CLASSES_ROOT, szTemp, 0, KEY_READ, &hkey))
66 {
67 return FALSE;
68 }
69
70#ifdef __REACTOS__
71 if (!RegLoadMUIStringW(hkey, L"FriendlyTypeName", szFileType, len, NULL, 0, NULL))
72 {
73 RegCloseKey(hkey);
74 return TRUE;
75 }
76#endif
77
78 if (RegQueryValueW(hkey, NULL, szFileType, &len))
79 {
80 RegCloseKey(hkey);
81 return FALSE;
82 }
83
84 RegCloseKey(hkey);
85
86 TRACE("--UE;\n} %s\n", debugstr_w(szFileType));
87
88 return TRUE;
89}

Referenced by _ILGetFileType(), SHELL_IsShortcut(), and SHGetFileInfoW().

◆ HCR_RegGetIconA()

static BOOL HCR_RegGetIconA ( HKEY  hkey,
LPSTR  szDest,
LPCSTR  szName,
DWORD  len,
int picon_idx 
)
static

Definition at line 273 of file classes.c.

274{
275 DWORD dwType;
276 char sTemp[MAX_PATH];
277 char sNum[5];
278
279 if (!RegQueryValueExA(hkey, szName, 0, &dwType, (LPBYTE)szDest, &len))
280 {
281 if (dwType == REG_EXPAND_SZ)
282 {
283 ExpandEnvironmentStringsA(szDest, sTemp, MAX_PATH);
284 lstrcpynA(szDest, sTemp, len);
285 }
286 if (ParseFieldA (szDest, 2, sNum, 5))
287 *picon_idx=atoi(sNum);
288 else
289 *picon_idx=0; /* sometimes the icon number is missing */
290 ParseFieldA (szDest, 1, szDest, len);
291 PathUnquoteSpacesA(szDest);
292 return TRUE;
293 }
294 return FALSE;
295}
DWORD WINAPI ExpandEnvironmentStringsA(IN LPCSTR lpSrc, IN LPSTR lpDst, IN DWORD nSize)
Definition: environ.c:399
VOID WINAPI PathUnquoteSpacesA(LPSTR lpszPath)
Definition: path.c:1012
_Check_return_ int __cdecl atoi(_In_z_ const char *_Str)
#define REG_EXPAND_SZ
Definition: nt_native.h:1494
DWORD WINAPI ParseFieldA(LPCSTR src, DWORD nField, LPSTR dst, DWORD len) DECLSPEC_HIDDEN
Definition: shellord.c:83

Referenced by HCR_GetIconA().

◆ HCR_RegGetIconW()

static BOOL HCR_RegGetIconW ( HKEY  hkey,
LPWSTR  szDest,
LPCWSTR  szName,
DWORD  len,
int picon_idx 
)
static

Definition at line 249 of file classes.c.

250{
251 DWORD dwType, size = len * sizeof(WCHAR);
252 WCHAR sTemp[MAX_PATH];
253 WCHAR sNum[5];
254
255 if (!RegQueryValueExW(hkey, szName, 0, &dwType, (LPBYTE)szDest, &size))
256 {
257 if (dwType == REG_EXPAND_SZ)
258 {
259 ExpandEnvironmentStringsW(szDest, sTemp, MAX_PATH);
260 lstrcpynW(szDest, sTemp, len);
261 }
262 if (ParseFieldW (szDest, 2, sNum, _countof(sNum)))
263 *picon_idx = atoiW(sNum);
264 else
265 *picon_idx=0; /* sometimes the icon number is missing */
266 ParseFieldW (szDest, 1, szDest, len);
267 PathUnquoteSpacesW(szDest);
268 return TRUE;
269 }
270 return FALSE;
271}
DWORD WINAPI ExpandEnvironmentStringsW(IN LPCWSTR lpSrc, IN LPWSTR lpDst, IN DWORD nSize)
Definition: environ.c:519
VOID WINAPI PathUnquoteSpacesW(LPWSTR lpszPath)
Definition: path.c:1034
#define atoiW(s)
Definition: unicode.h:60
DWORD WINAPI ParseFieldW(LPCWSTR src, DWORD nField, LPWSTR dst, DWORD len) DECLSPEC_HIDDEN
Definition: shellord.c:117

Referenced by HCR_GetIconW().

◆ HCR_RegOpenClassIDKey()

BOOL HCR_RegOpenClassIDKey ( REFIID  riid,
HKEY hkey 
)

Definition at line 236 of file classes.c.

237{
238 char xriid[50];
239 sprintf( xriid, "CLSID\\{%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x}",
240 riid->Data1, riid->Data2, riid->Data3,
241 riid->Data4[0], riid->Data4[1], riid->Data4[2], riid->Data4[3],
242 riid->Data4[4], riid->Data4[5], riid->Data4[6], riid->Data4[7] );
243
244 TRACE("%s\n",xriid );
245
246 return !RegOpenKeyExA(HKEY_CLASSES_ROOT, xriid, 0, KEY_READ, hkey);
247}

Referenced by CRegFolder::GetDetailsOf(), CRegFolder::GetDisplayNameOf(), HCR_GetClassNameA(), and HCR_GetClassNameW().

◆ SHELL32_EnumDefaultVerbList()

EXTERN_C HRESULT SHELL32_EnumDefaultVerbList ( LPCWSTR  List,
UINT  Index,
LPWSTR  Verb,
SIZE_T  cchMax 
)

Definition at line 113 of file CDefaultContextMenu.cpp.

114{
115 for (UINT i = 0; *List; ++i)
116 {
117 while (IsVerbListSeparator(*List))
118 List++;
120 while (*List && !IsVerbListSeparator(*List))
121 List++;
122 if (List > Start && i == Index)
123 return StringCchCopyNW(Verb, cchMax, Start, List - Start);
124 }
126}
static bool IsVerbListSeparator(WCHAR Ch)
UINT cchMax
#define ERROR_NO_MORE_ITEMS
Definition: compat.h:105
return pTarget Start()
STRSAFEAPI StringCchCopyNW(STRSAFE_LPWSTR pszDest, size_t cchDest, STRSAFE_LPCWSTR pszSrc, size_t cchToCopy)
Definition: strsafe.h:236
_In_ WDFCOLLECTION _In_ ULONG Index
_Must_inspect_result_ _In_ WDFCMRESLIST List
Definition: wdfresource.h:550
#define HRESULT_FROM_WIN32(x)
Definition: winerror.h:92
const WCHAR * LPCWSTR
Definition: xmlstorage.h:185

Referenced by HCR_GetDefaultVerbW().

◆ WINE_DEFAULT_DEBUG_CHANNEL()

WINE_DEFAULT_DEBUG_CHANNEL ( shell  )