ReactOS 0.4.17-dev-1183-g3b30a2a
CSnapinCacheEntry.h
Go to the documentation of this file.
1/*
2 * PROJECT: ReactOS Management Console
3 * LICENSE: GPL-2.0+ (https://spdx.org/licenses/GPL-2.0+)
4 * PURPOSE: Snapin cache entry class
5 * COPYRIGHT: Copyright 2026 Eric Kohl (eric.kohl@reactos.org)
6 */
7
8#pragma once
9
11{
12private:
13 CAtlString m_GuidString;
15 CAtlString m_Name;
16
17 CAtlString m_Provider;
18 CAtlString m_Description;
19 CAtlString m_Version;
20
23
26
28
30
31public:
32 CSnapinCacheEntry(const CAtlString& guidString, const CAtlString& aboutGuidString, const CAtlString& name, HIMAGELIST hImageList);
34
35 const CAtlString& GuidString() const { return m_GuidString; }
36 const CAtlString& AboutGuidString() const { return m_AboutGuidString; }
37 const CAtlString& Name() const { return m_Name; }
38 const CAtlString& Provider() const { return m_Provider; }
39 const CAtlString& Description() const { return m_Description; }
40 const CAtlString& Version() const { return m_Version; }
41
42 HICON Icon() { return m_hIcon; }
43
45 int OpenImageIndex() { return m_ImageOpen; }
46
47 static CSnapinCacheEntry* Create(CRegKey& SnapinsKey, PWSTR guidString, HIMAGELIST hImageList)
48 {
49 DPRINT1("Create(%S)\n", guidString);
50 WCHAR IndirectBuffer[MAX_PATH];
53 LONG ret;
54
55 CRegKey SnapinKey;
56 ret = SnapinKey.Open(SnapinsKey, guidString, KEY_READ);
57 if (ret != ERROR_SUCCESS)
58 {
59 return NULL;
60 }
61
62 CRegKey NodeTypesKey;
63 ret = NodeTypesKey.Open(SnapinKey, L"StandAlone", KEY_READ);
64 if (ret != ERROR_SUCCESS)
65 {
66 SnapinKey.Close();
67 return NULL;
68 }
69 NodeTypesKey.Close();
70
71 CAtlString Name;
72 dwSize = MAX_PATH * sizeof(WCHAR);
73 if (SnapinKey.QueryStringValue(L"NameStringIndirect", IndirectBuffer, &dwSize) == ERROR_SUCCESS)
74 {
75 if (SUCCEEDED(SHLoadIndirectString(IndirectBuffer, Buffer, MAX_PATH, NULL)))
76 {
77 Name = Buffer;
78 }
79 else
80 {
81 Name.Empty();
82 }
83 }
84
85 if (Name.IsEmpty())
86 {
87 dwSize = MAX_PATH * sizeof(WCHAR);
88 if (SnapinKey.QueryStringValue(L"NameString", Buffer, &dwSize) == ERROR_SUCCESS)
89 {
90 Name = Buffer;
91 }
92 }
93
94 if (Name.IsEmpty())
95 {
96 SnapinKey.Close();
97 return NULL;
98 }
99
100 CAtlString AboutGuidString;
101 dwSize = MAX_PATH * sizeof(WCHAR);
102 if (SnapinKey.QueryStringValue(L"About", Buffer, &dwSize) == ERROR_SUCCESS)
103 {
105 }
106
107 SnapinKey.Close();
108
109 if (AboutGuidString.IsEmpty())
110 {
111 return NULL;
112 }
113
114 CAtlString GuidString = guidString;
115
116 return new CSnapinCacheEntry(GuidString, AboutGuidString, Name, hImageList);
117 }
118};
#define DPRINT1
Definition: precomp.h:8
Definition: bufpool.h:45
static CSnapinCacheEntry * Create(CRegKey &SnapinsKey, PWSTR guidString, HIMAGELIST hImageList)
const CAtlString & Description() const
const CAtlString & GuidString() const
const CAtlString & AboutGuidString() const
CAtlString m_AboutGuidString
const CAtlString & Version() const
CAtlString m_Description
const CAtlString & Provider() const
const CAtlString & Name() const
#define ERROR_SUCCESS
Definition: deptool.c:10
#define NULL
Definition: types.h:112
#define MAX_PATH
Definition: compat.h:34
HRESULT WINAPI SHLoadIndirectString(const WCHAR *src, WCHAR *dst, UINT dst_len, void **reserved)
Definition: string.c:1499
return ret
Definition: mutex.c:147
#define L(x)
Definition: resources.c:13
unsigned int BOOL
Definition: ntddk_ex.h:94
#define SUCCEEDED(hr)
Definition: intsafe.h:50
PSDBQUERYRESULT_VISTA PVOID DWORD * dwSize
Definition: env.c:56
static HICON
Definition: imagelist.c:80
#define KEY_READ
Definition: nt_native.h:1026
short WCHAR
Definition: pedump.c:58
long LONG
Definition: pedump.c:60
Definition: name.c:39
uint16_t * PWSTR
Definition: typedefs.h:56
uint32_t ULONG
Definition: typedefs.h:59