[SHELL32] Fix Control_RunDLLW (#5400)
[reactos.git] / dll / shellext / acppage / CLayerStringList.hpp
index e1b253d..d251599 100644 (file)
@@ -2,9 +2,10 @@
  * PROJECT:     ReactOS Compatibility Layer Shell Extension
  * LICENSE:     GPL-2.0+ (https://spdx.org/licenses/GPL-2.0+)
  * PURPOSE:     CLayerStringList implementation
- * COPYRIGHT:   Copyright 2015-2017 Mark Jansen (mark.jansen@reactos.org)
+ * COPYRIGHT:   Copyright 2015-2018 Mark Jansen (mark.jansen@reactos.org)
  */
 
+#pragma once
 
 /* TODO: Use HSDB instead of PDB */
 class CLayerStringList :
@@ -27,7 +28,7 @@ public:
         SdbCloseDatabase(m_db);
     }
 
-    virtual HRESULT STDMETHODCALLTYPE Next(ULONG celt, LPOLESTR *rgelt, ULONG *pceltFetched)
+    STDMETHOD(Next)(ULONG celt, LPOLESTR *rgelt, ULONG *pceltFetched) override
     {
         if (pceltFetched)
             *pceltFetched = 0;
@@ -35,29 +36,29 @@ public:
         while (celt && m_layer)
         {
             TAGID nameid = SdbFindFirstTag(m_db, m_layer, TAG_NAME);
-            if (!nameid)
-                return S_FALSE;
-
-            LPWSTR name = SdbGetStringTagPtr(m_db, nameid);
-            if (!name)
-                return S_FALSE;
-
-            ULONG Size = wcslen(name) + 1;
+            if (nameid)
+            {
+                LPWSTR name = SdbGetStringTagPtr(m_db, nameid);
+                if (name && !IsBuiltinLayer(name))
+                {
+                    ULONG Size = wcslen(name) + 1;
 
-            *rgelt = (LPOLESTR)::CoTaskMemAlloc(Size * sizeof(WCHAR));
-            StringCchCopyW(*rgelt, Size, name);
+                    *rgelt = (LPOLESTR)::CoTaskMemAlloc(Size * sizeof(WCHAR));
+                    StringCchCopyW(*rgelt, Size, name);
 
-            if (pceltFetched)
-                (*pceltFetched)++;
+                    if (pceltFetched)
+                        (*pceltFetched)++;
 
+                    celt--;
+                    rgelt++;
+                }
+            }
             m_layer = SdbFindNextTag(m_db, m_root, m_layer);
-            celt--;
-            rgelt++;
         }
         return celt ? S_FALSE : S_OK;
     }
 
-    virtual HRESULT STDMETHODCALLTYPE Skip(ULONG celt)
+    STDMETHOD(Skip)(ULONG celt) override
     {
         while (m_layer && celt)
         {
@@ -67,7 +68,7 @@ public:
         return celt ? S_FALSE : S_OK;
     }
 
-    virtual HRESULT STDMETHODCALLTYPE Reset()
+    STDMETHOD(Reset)() override
     {
         m_root = m_layer = TAGID_NULL;
         if (m_db)
@@ -82,7 +83,7 @@ public:
         return E_FAIL;
     }
 
-    virtual HRESULT STDMETHODCALLTYPE Clone(IEnumString **ppenum)
+    STDMETHOD(Clone)(IEnumString **ppenum) override
     {
         return E_NOTIMPL;
     }