ReactOS 0.4.17-dev-784-g3812a95
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
29public:
30 CSnapinCacheEntry(const CAtlString& guidString, const CAtlString& aboutGuidString, const CAtlString& name, HIMAGELIST hImageList);
32
33 const CAtlString& GuidString() const { return m_GuidString; }
34 const CAtlString& AboutGuidString() const { return m_AboutGuidString; }
35 const CAtlString& Name() const { return m_Name; }
36 const CAtlString& Provider() const { return m_Provider; }
37 const CAtlString& Description() const { return m_Description; }
38 const CAtlString& Version() const { return m_Version; }
39
41 int OpenImageIndex() { return m_ImageOpen; }
42
43 static CSnapinCacheEntry* Create(CRegKey& SnapinsKey, PWSTR guidString, HIMAGELIST hImageList)
44 {
45 DPRINT1("Create(%S)\n", guidString);
46 WCHAR IndirectBuffer[MAX_PATH];
49 LONG ret;
50
51 CRegKey SnapinKey;
52 ret = SnapinKey.Open(SnapinsKey, guidString, KEY_READ);
53 if (ret != ERROR_SUCCESS)
54 {
55 return NULL;
56 }
57
58 CRegKey NodeTypesKey;
59 ret = NodeTypesKey.Open(SnapinKey, L"StandAlone", KEY_READ);
60 if (ret != ERROR_SUCCESS)
61 {
62 SnapinKey.Close();
63 return NULL;
64 }
65 NodeTypesKey.Close();
66
67 CAtlString Name;
68 dwSize = MAX_PATH * sizeof(WCHAR);
69 if (SnapinKey.QueryStringValue(L"NameStringIndirect", IndirectBuffer, &dwSize) == ERROR_SUCCESS)
70 {
71 if (SUCCEEDED(SHLoadIndirectString(IndirectBuffer, Buffer, MAX_PATH, NULL)))
72 {
73 Name = Buffer;
74 }
75 else
76 {
77 Name.Empty();
78 }
79 }
80
81 if (Name.IsEmpty())
82 {
83 dwSize = MAX_PATH * sizeof(WCHAR);
84 if (SnapinKey.QueryStringValue(L"NameString", Buffer, &dwSize) == ERROR_SUCCESS)
85 {
86 Name = Buffer;
87 }
88 }
89
90 if (Name.IsEmpty())
91 {
92 SnapinKey.Close();
93 return NULL;
94 }
95
96 CAtlString AboutGuidString;
97 dwSize = MAX_PATH * sizeof(WCHAR);
98 if (SnapinKey.QueryStringValue(L"About", Buffer, &dwSize) == ERROR_SUCCESS)
99 {
101 }
102
103 SnapinKey.Close();
104
105 if (AboutGuidString.IsEmpty())
106 {
107 return NULL;
108 }
109
110 CAtlString GuidString = guidString;
111
112 return new CSnapinCacheEntry(GuidString, AboutGuidString, Name, hImageList);
113 }
114};
#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
#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