1 | //////////////////////////////////////////////////////////// |
---|
2 | // Copyright (C) Roman Ryltsov, 2013 |
---|
3 | // Created by Roman Ryltsov roman@alax.info |
---|
4 | // |
---|
5 | // A permission to use the source code is granted as long as reference to |
---|
6 | // source website http://alax.info is retained. |
---|
7 | |
---|
8 | #include "stdafx.h" |
---|
9 | |
---|
10 | VOID ProcessKey(LPCTSTR pszClassKeyName) |
---|
11 | { |
---|
12 | _ATLTRY |
---|
13 | { |
---|
14 | CRegKey ClassKey; |
---|
15 | __C(HRESULT_FROM_WIN32(ClassKey.Open(HKEY_CLASSES_ROOT, pszClassKeyName, KEY_READ))); |
---|
16 | DWORD nIndex, nFoundCount = 0; |
---|
17 | for(nIndex = 0; ; nIndex++) |
---|
18 | { |
---|
19 | TCHAR pszName[1024] = { 0 }; |
---|
20 | DWORD nNameLength = DIM(pszName); |
---|
21 | const HRESULT nResult = HRESULT_FROM_WIN32(ClassKey.EnumKey(nIndex, pszName, &nNameLength)); |
---|
22 | if(FAILED(nResult)) |
---|
23 | { |
---|
24 | _A(nResult == HRESULT_FROM_WIN32(ERROR_NO_MORE_ITEMS)); |
---|
25 | break; // Done |
---|
26 | } |
---|
27 | CRegKey TreatAsKey; |
---|
28 | if(FAILED(HRESULT_FROM_WIN32(TreatAsKey.Open(ClassKey, AtlFormatString(_T("%s\\TreatAs"), pszName), KEY_READ)))) |
---|
29 | continue; // No TreatAs |
---|
30 | CString sClassIdentifier = pszName; |
---|
31 | CString sClassDescription = _RegKeyHelper::QueryStringValue((HKEY) ClassKey, pszName); |
---|
32 | CString sTreatAsKeyClassIdentifier = _RegKeyHelper::QueryStringValue(TreatAsKey); |
---|
33 | CString sTreatAsKeyClassDescription; |
---|
34 | CRegKey TreatAsClassKey; |
---|
35 | if(SUCCEEDED(HRESULT_FROM_WIN32(TreatAsClassKey.Open(HKEY_CLASSES_ROOT, AtlFormatString(_T("%s\\%s"), pszClassKeyName, sTreatAsKeyClassIdentifier), KEY_READ)))) |
---|
36 | sTreatAsKeyClassDescription = _RegKeyHelper::QueryStringValue((HKEY) ClassKey, sTreatAsKeyClassIdentifier); |
---|
37 | _tprintf(_StringHelper::Join<CString>(4, _T("\t"), |
---|
38 | sClassIdentifier, |
---|
39 | sClassDescription, |
---|
40 | sTreatAsKeyClassIdentifier, |
---|
41 | sTreatAsKeyClassDescription, |
---|
42 | 0) + _T("\n")); |
---|
43 | nFoundCount++; |
---|
44 | } |
---|
45 | _tprintf(_T("Processed %d keys, %d TreatAs items found\n"), nIndex, nFoundCount); |
---|
46 | } |
---|
47 | _ATLCATCH(Exception) |
---|
48 | { |
---|
49 | _tprintf(_T("Exception: 0x%08x %s\n"), (HRESULT) Exception, AtlFormatSystemMessage(Exception).TrimRight(_T("\t\n\r ."))); |
---|
50 | } |
---|
51 | } |
---|
52 | int _tmain(int argc, _TCHAR* argv[]) |
---|
53 | { |
---|
54 | _tprintf(_T("Enumerating CLSID class identifiers...\n")); |
---|
55 | ProcessKey(_T("CLSID")); |
---|
56 | #if defined(_WIN64) |
---|
57 | _tprintf(_T("Enumerating WOW64 CLSID class identifiers...\n")); |
---|
58 | ProcessKey(_T("Wow6432Node\\CLSID")); |
---|
59 | #endif // defined(_WIN64) |
---|
60 | return 0; |
---|
61 | } |
---|
62 | |
---|