xref: /aosp_15_r20/external/lzma/CPP/7zip/UI/FileManager/RegistryPlugins.cpp (revision f6dc9357d832569d4d1f5d24eacdb3935a1ae8e6)
1*f6dc9357SAndroid Build Coastguard Worker // RegistryPlugins.cpp
2*f6dc9357SAndroid Build Coastguard Worker 
3*f6dc9357SAndroid Build Coastguard Worker #include "StdAfx.h"
4*f6dc9357SAndroid Build Coastguard Worker 
5*f6dc9357SAndroid Build Coastguard Worker /*
6*f6dc9357SAndroid Build Coastguard Worker #include "../../../Windows/DLL.h"
7*f6dc9357SAndroid Build Coastguard Worker #include "../../../Windows/FileFind.h"
8*f6dc9357SAndroid Build Coastguard Worker #include "../../../Windows/PropVariant.h"
9*f6dc9357SAndroid Build Coastguard Worker 
10*f6dc9357SAndroid Build Coastguard Worker #include "IFolder.h"
11*f6dc9357SAndroid Build Coastguard Worker */
12*f6dc9357SAndroid Build Coastguard Worker #include "RegistryPlugins.h"
13*f6dc9357SAndroid Build Coastguard Worker 
14*f6dc9357SAndroid Build Coastguard Worker // using namespace NWindows;
15*f6dc9357SAndroid Build Coastguard Worker // using namespace NFile;
16*f6dc9357SAndroid Build Coastguard Worker 
17*f6dc9357SAndroid Build Coastguard Worker /*
18*f6dc9357SAndroid Build Coastguard Worker typedef UINT32 (WINAPI * Func_GetPluginProperty)(PROPID propID, PROPVARIANT *value);
19*f6dc9357SAndroid Build Coastguard Worker 
20*f6dc9357SAndroid Build Coastguard Worker static bool ReadPluginInfo(CPluginInfo &plugin, bool needCheckDll)
21*f6dc9357SAndroid Build Coastguard Worker {
22*f6dc9357SAndroid Build Coastguard Worker   if (needCheckDll)
23*f6dc9357SAndroid Build Coastguard Worker   {
24*f6dc9357SAndroid Build Coastguard Worker     NDLL::CLibrary lib;
25*f6dc9357SAndroid Build Coastguard Worker     if (!lib.LoadEx(plugin.FilePath, LOAD_LIBRARY_AS_DATAFILE))
26*f6dc9357SAndroid Build Coastguard Worker       return false;
27*f6dc9357SAndroid Build Coastguard Worker   }
28*f6dc9357SAndroid Build Coastguard Worker   NDLL::CLibrary lib;
29*f6dc9357SAndroid Build Coastguard Worker   if (!lib.Load(plugin.FilePath))
30*f6dc9357SAndroid Build Coastguard Worker     return false;
31*f6dc9357SAndroid Build Coastguard Worker   const
32*f6dc9357SAndroid Build Coastguard Worker   Func_GetPluginProperty
33*f6dc9357SAndroid Build Coastguard Worker      f_GetPluginProperty = ZIP7_GET_PROC_ADDRESS(
34*f6dc9357SAndroid Build Coastguard Worker   Func_GetPluginProperty, lib.Get_HMODULE(),
35*f6dc9357SAndroid Build Coastguard Worker       "GetPluginProperty");
36*f6dc9357SAndroid Build Coastguard Worker   if (!f_GetPluginProperty)
37*f6dc9357SAndroid Build Coastguard Worker     return false;
38*f6dc9357SAndroid Build Coastguard Worker 
39*f6dc9357SAndroid Build Coastguard Worker   NCOM::CPropVariant prop;
40*f6dc9357SAndroid Build Coastguard Worker   if (f_GetPluginProperty(NPlugin::kType, &prop) != S_OK)
41*f6dc9357SAndroid Build Coastguard Worker     return false;
42*f6dc9357SAndroid Build Coastguard Worker   if (prop.vt == VT_EMPTY)
43*f6dc9357SAndroid Build Coastguard Worker     plugin.Type = kPluginTypeFF;
44*f6dc9357SAndroid Build Coastguard Worker   else if (prop.vt == VT_UI4)
45*f6dc9357SAndroid Build Coastguard Worker     plugin.Type = (EPluginType)prop.ulVal;
46*f6dc9357SAndroid Build Coastguard Worker   else
47*f6dc9357SAndroid Build Coastguard Worker     return false;
48*f6dc9357SAndroid Build Coastguard Worker   prop.Clear();
49*f6dc9357SAndroid Build Coastguard Worker 
50*f6dc9357SAndroid Build Coastguard Worker   if (f_GetPluginProperty(NPlugin::kName, &prop) != S_OK)
51*f6dc9357SAndroid Build Coastguard Worker     return false;
52*f6dc9357SAndroid Build Coastguard Worker   if (prop.vt != VT_BSTR)
53*f6dc9357SAndroid Build Coastguard Worker     return false;
54*f6dc9357SAndroid Build Coastguard Worker   plugin.Name = prop.bstrVal;
55*f6dc9357SAndroid Build Coastguard Worker   prop.Clear();
56*f6dc9357SAndroid Build Coastguard Worker 
57*f6dc9357SAndroid Build Coastguard Worker   if (f_GetPluginProperty(NPlugin::kClassID, &prop) != S_OK)
58*f6dc9357SAndroid Build Coastguard Worker     return false;
59*f6dc9357SAndroid Build Coastguard Worker   if (prop.vt == VT_EMPTY)
60*f6dc9357SAndroid Build Coastguard Worker     plugin.ClassID_Defined = false;
61*f6dc9357SAndroid Build Coastguard Worker   else if (prop.vt != VT_BSTR)
62*f6dc9357SAndroid Build Coastguard Worker     return false;
63*f6dc9357SAndroid Build Coastguard Worker   else
64*f6dc9357SAndroid Build Coastguard Worker   {
65*f6dc9357SAndroid Build Coastguard Worker     plugin.ClassID_Defined = true;
66*f6dc9357SAndroid Build Coastguard Worker     plugin.ClassID = *(const GUID *)(const void *)prop.bstrVal;
67*f6dc9357SAndroid Build Coastguard Worker   }
68*f6dc9357SAndroid Build Coastguard Worker   prop.Clear();
69*f6dc9357SAndroid Build Coastguard Worker   return true;
70*f6dc9357SAndroid Build Coastguard Worker */
71*f6dc9357SAndroid Build Coastguard Worker 
72*f6dc9357SAndroid Build Coastguard Worker /*
73*f6dc9357SAndroid Build Coastguard Worker {
74*f6dc9357SAndroid Build Coastguard Worker   if (f_GetPluginProperty(NPlugin::kOptionsClassID, &prop) != S_OK)
75*f6dc9357SAndroid Build Coastguard Worker     return false;
76*f6dc9357SAndroid Build Coastguard Worker   if (prop.vt == VT_EMPTY)
77*f6dc9357SAndroid Build Coastguard Worker     plugin.OptionsClassID_Defined = false;
78*f6dc9357SAndroid Build Coastguard Worker   else if (prop.vt != VT_BSTR)
79*f6dc9357SAndroid Build Coastguard Worker     return false;
80*f6dc9357SAndroid Build Coastguard Worker   else
81*f6dc9357SAndroid Build Coastguard Worker   {
82*f6dc9357SAndroid Build Coastguard Worker     plugin.OptionsClassID_Defined = true;
83*f6dc9357SAndroid Build Coastguard Worker     plugin.OptionsClassID = *(const GUID *)(const void *)prop.bstrVal;
84*f6dc9357SAndroid Build Coastguard Worker   }
85*f6dc9357SAndroid Build Coastguard Worker }
86*f6dc9357SAndroid Build Coastguard Worker */
87*f6dc9357SAndroid Build Coastguard Worker 
88*f6dc9357SAndroid Build Coastguard Worker     /*
89*f6dc9357SAndroid Build Coastguard Worker     {
90*f6dc9357SAndroid Build Coastguard Worker       // very old 7-zip used agent plugin in "7-zip.dll"
91*f6dc9357SAndroid Build Coastguard Worker       // but then agent code was moved to 7zfm.
92*f6dc9357SAndroid Build Coastguard Worker       // so now we don't need to load "7-zip.dll" here
93*f6dc9357SAndroid Build Coastguard Worker       CPluginInfo plugin;
94*f6dc9357SAndroid Build Coastguard Worker       plugin.FilePath = baseFolderPrefix + FTEXT("7-zip.dll");
95*f6dc9357SAndroid Build Coastguard Worker       if (::ReadPluginInfo(plugin, false))
96*f6dc9357SAndroid Build Coastguard Worker       if (plugin.Type == kPluginTypeFF)
97*f6dc9357SAndroid Build Coastguard Worker         plugins.Add(plugin);
98*f6dc9357SAndroid Build Coastguard Worker     }
99*f6dc9357SAndroid Build Coastguard Worker     */
100*f6dc9357SAndroid Build Coastguard Worker     /*
101*f6dc9357SAndroid Build Coastguard Worker     FString folderPath = NDLL::GetModuleDirPrefix();
102*f6dc9357SAndroid Build Coastguard Worker     folderPath += "Plugins" STRING_PATH_SEPARATOR;
103*f6dc9357SAndroid Build Coastguard Worker     NFind::CEnumerator enumerator;
104*f6dc9357SAndroid Build Coastguard Worker     enumerator.SetDirPrefix(folderPath);
105*f6dc9357SAndroid Build Coastguard Worker     NFind::CFileInfo fi;
106*f6dc9357SAndroid Build Coastguard Worker     while (enumerator.Next(fi))
107*f6dc9357SAndroid Build Coastguard Worker     {
108*f6dc9357SAndroid Build Coastguard Worker       if (fi.IsDir())
109*f6dc9357SAndroid Build Coastguard Worker         continue;
110*f6dc9357SAndroid Build Coastguard Worker       CPluginInfo plugin;
111*f6dc9357SAndroid Build Coastguard Worker       plugin.FilePath = folderPath + fi.Name;
112*f6dc9357SAndroid Build Coastguard Worker       if (::ReadPluginInfo(plugin, true))
113*f6dc9357SAndroid Build Coastguard Worker       if (plugin.Type == kPluginTypeFF)
114*f6dc9357SAndroid Build Coastguard Worker         plugins.Add(plugin);
115*f6dc9357SAndroid Build Coastguard Worker     }
116*f6dc9357SAndroid Build Coastguard Worker     */
117*f6dc9357SAndroid Build Coastguard Worker 
118*f6dc9357SAndroid Build Coastguard Worker   /*
119*f6dc9357SAndroid Build Coastguard Worker   ReadPluginInfoList(plugins);
120*f6dc9357SAndroid Build Coastguard Worker   for (unsigned i = 0; i < plugins.Size();)
121*f6dc9357SAndroid Build Coastguard Worker     if (plugins[i].Type != kPluginTypeFF)
122*f6dc9357SAndroid Build Coastguard Worker       plugins.Delete(i);
123*f6dc9357SAndroid Build Coastguard Worker     else
124*f6dc9357SAndroid Build Coastguard Worker       i++;
125*f6dc9357SAndroid Build Coastguard Worker   */
126*f6dc9357SAndroid Build Coastguard Worker 
127*f6dc9357SAndroid Build Coastguard Worker /*
128*f6dc9357SAndroid Build Coastguard Worker void ReadFileFolderPluginInfoList(CObjectVector<CPluginInfo> &plugins)
129*f6dc9357SAndroid Build Coastguard Worker {
130*f6dc9357SAndroid Build Coastguard Worker   plugins.Clear();
131*f6dc9357SAndroid Build Coastguard Worker   {
132*f6dc9357SAndroid Build Coastguard Worker   }
133*f6dc9357SAndroid Build Coastguard Worker 
134*f6dc9357SAndroid Build Coastguard Worker   {
135*f6dc9357SAndroid Build Coastguard Worker     CPluginInfo &plugin = plugins.AddNew();
136*f6dc9357SAndroid Build Coastguard Worker     // p.FilePath.Empty();
137*f6dc9357SAndroid Build Coastguard Worker     plugin.Type = kPluginTypeFF;
138*f6dc9357SAndroid Build Coastguard Worker     plugin.Name = "7-Zip";
139*f6dc9357SAndroid Build Coastguard Worker     // plugin.ClassID = CLSID_CAgentArchiveHandler;
140*f6dc9357SAndroid Build Coastguard Worker     // plugin.ClassID_Defined = true;
141*f6dc9357SAndroid Build Coastguard Worker     // plugin.ClassID_Defined = false;
142*f6dc9357SAndroid Build Coastguard Worker     // plugin.OptionsClassID_Defined = false;
143*f6dc9357SAndroid Build Coastguard Worker   }
144*f6dc9357SAndroid Build Coastguard Worker }
145*f6dc9357SAndroid Build Coastguard Worker */
146