https://git.reactos.org/?p=reactos.git;a=commitdiff;h=960a305e5c5f503363d7cc8914d1839b61b0187a

commit 960a305e5c5f503363d7cc8914d1839b61b0187a
Author:     Katayama Hirofumi MZ <katayama.hirofumi...@gmail.com>
AuthorDate: Fri Aug 2 04:12:02 2024 +0900
Commit:     GitHub <nore...@github.com>
CommitDate: Fri Aug 2 04:12:02 2024 +0900

    [BROWSEUI][SHDOCVW] Move CExplorerBand to shdocvw (#7163)
    
    CExplorerBand should be
    implemented in shdocvw.dll.
    
https://github.com/reactos/reactos/blob/894ad4f17d119d312d4ae816cb41db12369389e8/modules/rostests/apitests/com/shdocvw.c#L37
    JIRA issue: CORE-19698
    - Move CExplorerBand code
      from browseui to shdocvw.
    - Delete IDS_FOLDERSLABEL
      resource string from browseui.
    - Add IDS_FOLDERSLABEL
      resource string to shdocvw.
    - Adapt code to these changes.
    - Add sdk/include/reactos/
     shdocvw_undoc.h.
    - Implement IEILIsEqual function.
---
 dll/win32/browseui/CMakeLists.txt                  |  2 -
 dll/win32/browseui/browseui.cpp                    |  2 +-
 dll/win32/browseui/browseui.h                      |  2 +-
 dll/win32/browseui/browseui.rc                     |  1 -
 dll/win32/browseui/lang/bg-BG.rc                   |  5 --
 dll/win32/browseui/lang/de-DE.rc                   |  5 --
 dll/win32/browseui/lang/en-US.rc                   |  5 --
 dll/win32/browseui/lang/es-ES.rc                   |  5 --
 dll/win32/browseui/lang/et-EE.rc                   |  5 --
 dll/win32/browseui/lang/eu-ES.rc                   |  5 --
 dll/win32/browseui/lang/fr-FR.rc                   |  5 --
 dll/win32/browseui/lang/he-IL.rc                   |  5 --
 dll/win32/browseui/lang/hi-IN.rc                   |  5 --
 dll/win32/browseui/lang/hu-HU.rc                   |  5 --
 dll/win32/browseui/lang/id-ID.rc                   |  5 --
 dll/win32/browseui/lang/it-IT.rc                   |  5 --
 dll/win32/browseui/lang/ja-JP.rc                   |  5 --
 dll/win32/browseui/lang/pl-PL.rc                   |  5 --
 dll/win32/browseui/lang/pt-BR.rc                   |  5 --
 dll/win32/browseui/lang/pt-PT.rc                   |  5 --
 dll/win32/browseui/lang/ro-RO.rc                   |  5 --
 dll/win32/browseui/lang/ru-RU.rc                   |  5 --
 dll/win32/browseui/lang/sq-AL.rc                   |  5 --
 dll/win32/browseui/lang/tr-TR.rc                   |  5 --
 dll/win32/browseui/lang/uk-UA.rc                   |  5 --
 dll/win32/browseui/lang/zh-CN.rc                   |  5 --
 dll/win32/browseui/lang/zh-TW.rc                   |  5 --
 dll/win32/browseui/precomp.h                       |  1 -
 dll/win32/browseui/resource.h                      |  1 -
 dll/win32/browseui/utility.h                       |  8 --
 .../explorerband.cpp => shdocvw/CExplorerBand.cpp} | 10 +--
 .../explorerband.h => shdocvw/CExplorerBand.h}     |  0
 dll/win32/shdocvw/CFavBand.cpp                     | 83 +-----------------
 dll/win32/shdocvw/CFavBand.h                       |  6 --
 dll/win32/shdocvw/CMakeLists.txt                   | 10 ++-
 dll/win32/shdocvw/lang/bg-BG.rc                    |  9 ++
 dll/win32/shdocvw/lang/de-DE.rc                    |  9 ++
 dll/win32/shdocvw/lang/en-US.rc                    |  5 +-
 dll/win32/shdocvw/lang/es-ES.rc                    |  9 ++
 dll/win32/shdocvw/lang/et-EE.rc                    |  9 ++
 dll/win32/shdocvw/lang/eu-ES.rc                    |  9 ++
 dll/win32/shdocvw/lang/fr-FR.rc                    |  9 ++
 dll/win32/shdocvw/lang/he-IL.rc                    |  9 ++
 dll/win32/shdocvw/lang/hi-IN.rc                    |  9 ++
 dll/win32/shdocvw/lang/hu-HU.rc                    |  9 ++
 dll/win32/shdocvw/lang/id-ID.rc                    |  9 ++
 dll/win32/shdocvw/lang/it-IT.rc                    |  9 ++
 dll/win32/shdocvw/lang/ja-JP.rc                    |  9 ++
 dll/win32/shdocvw/lang/pl-PL.rc                    |  9 ++
 dll/win32/shdocvw/lang/pt-BR.rc                    |  9 ++
 dll/win32/shdocvw/lang/pt-PT.rc                    |  9 ++
 dll/win32/shdocvw/lang/ro-RO.rc                    |  9 ++
 dll/win32/shdocvw/lang/ru-RU.rc                    |  9 ++
 dll/win32/shdocvw/lang/sq-AL.rc                    |  9 ++
 dll/win32/shdocvw/lang/tr-TR.rc                    |  9 ++
 dll/win32/shdocvw/lang/uk-UA.rc                    |  9 ++
 dll/win32/shdocvw/lang/zh-CN.rc                    |  9 ++
 dll/win32/shdocvw/lang/zh-TW.rc                    |  9 ++
 dll/win32/shdocvw/mrulist.cpp                      | 42 ++-------
 dll/win32/shdocvw/objects.cpp                      | 99 ++++++++++++++++++++++
 dll/win32/shdocvw/objects.h                        | 42 +++++++++
 .../{browseui => shdocvw}/res/explorerband.rgs     |  0
 dll/win32/shdocvw/{ => res}/favband.rgs            |  0
 dll/win32/shdocvw/{ => res}/shdocvw_v1.idl         |  0
 dll/win32/shdocvw/{ => res}/shdocvw_v1.rgs         |  0
 dll/win32/shdocvw/resource.h                       |  6 +-
 dll/win32/shdocvw/shdocvw.h                        |  9 +-
 dll/win32/shdocvw/shdocvw.rc                       | 73 +++++++++++++++-
 dll/win32/shdocvw/shdocvw.spec                     |  2 +-
 dll/win32/shdocvw/shdocvw_main.c                   | 30 ++-----
 dll/win32/{browseui => shdocvw}/utility.cpp        | 60 ++++++++-----
 dll/win32/shdocvw/utility.h                        | 13 +++
 sdk/include/reactos/shdocvw_undoc.h                | 22 +++++
 73 files changed, 523 insertions(+), 319 deletions(-)

diff --git a/dll/win32/browseui/CMakeLists.txt 
b/dll/win32/browseui/CMakeLists.txt
index 83a78e085dc..e420dc69686 100644
--- a/dll/win32/browseui/CMakeLists.txt
+++ b/dll/win32/browseui/CMakeLists.txt
@@ -25,7 +25,6 @@ list(APPEND SOURCE
     CTaskbarList.h
     commonbrowser.cpp
     desktopipc.cpp
-    explorerband.cpp
     globalfoldersettings.cpp
     internettoolbar.cpp
     parsecmdline.cpp
@@ -34,7 +33,6 @@ list(APPEND SOURCE
     shellbrowser.cpp
     toolsband.cpp
     travellog.cpp
-    utility.cpp
     CProgressDialog.cpp
     CUserAssist.cpp
     CUserAssist.h)
diff --git a/dll/win32/browseui/browseui.cpp b/dll/win32/browseui/browseui.cpp
index 8634429bfc9..80812ba7d25 100644
--- a/dll/win32/browseui/browseui.cpp
+++ b/dll/win32/browseui/browseui.cpp
@@ -153,7 +153,7 @@ OBJECT_ENTRY(CLSID_InternetToolbar, CInternetToolbar)
 OBJECT_ENTRY(CLSID_CRegTreeOptions, CRegTreeOptions)
 OBJECT_ENTRY(CLSID_ShellTaskScheduler, CShellTaskScheduler)
 OBJECT_ENTRY(CLSID_TaskbarList, CTaskbarList)
-OBJECT_ENTRY(CLSID_ExplorerBand, CExplorerBand)
+//OBJECT_ENTRY(CLSID_ExplorerBand, CExplorerBand) // Moved to shdocvw.dll
 OBJECT_ENTRY(CLSID_FileSearchBand, CSearchBar)
 OBJECT_ENTRY(CLSID_ProgressDialog, CProgressDialog)
 OBJECT_ENTRY(CLSID_ISFBand, CISFBand)
diff --git a/dll/win32/browseui/browseui.h b/dll/win32/browseui/browseui.h
index 46907ad0ad7..9702bd5fa88 100644
--- a/dll/win32/browseui/browseui.h
+++ b/dll/win32/browseui/browseui.h
@@ -6,7 +6,7 @@
 #define USE_CUSTOM_ADDRESSEDITBOX 1
 #define USE_CUSTOM_BANDPROXY 1
 #define USE_CUSTOM_BRANDBAND 1
-#define USE_CUSTOM_EXPLORERBAND 1
+#define USE_CUSTOM_EXPLORERBAND 0 // Moved to shdocvw.dll
 #define USE_CUSTOM_SEARCHBAND 1
 #define USE_CUSTOM_INTERNETTOOLBAR 1
 
diff --git a/dll/win32/browseui/browseui.rc b/dll/win32/browseui/browseui.rc
index 789486938cb..0db5999a2c1 100644
--- a/dll/win32/browseui/browseui.rc
+++ b/dll/win32/browseui/browseui.rc
@@ -43,7 +43,6 @@ IDR_GLOBALFOLDERSETTINGS REGISTRY 
"res/globalfoldersettings.rgs"
 IDR_INTERNETTOOLBAR REGISTRY "res/internettoolbar.rgs"
 IDR_REGTREEOPTIONS REGISTRY "res/regtreeoptions.rgs"
 IDR_SHELLTASKSCHEDULER REGISTRY "res/shelltaskscheduler.rgs"
-IDR_EXPLORERBAND REGISTRY "res/explorerband.rgs"
 IDR_PROGRESSDIALOG REGISTRY "res/progressdialog.rgs"
 IDR_AUTOCOMPLETE REGISTRY "res/autocomplete.rgs"
 IDR_ACLISTISF REGISTRY "res/shellautocomplete.rgs"
diff --git a/dll/win32/browseui/lang/bg-BG.rc b/dll/win32/browseui/lang/bg-BG.rc
index 85eb1cd35eb..37dbe925083 100644
--- a/dll/win32/browseui/lang/bg-BG.rc
+++ b/dll/win32/browseui/lang/bg-BG.rc
@@ -291,11 +291,6 @@ BEGIN
     IDS_ADDRESSBANDLABEL "&Адрес"
 END
 
-STRINGTABLE
-BEGIN
-    IDS_FOLDERSLABEL "Папки"
-END
-
 STRINGTABLE
 BEGIN
     IDS_ADDRESSMENUTEXT "&Адрес"
diff --git a/dll/win32/browseui/lang/de-DE.rc b/dll/win32/browseui/lang/de-DE.rc
index c38adff1d86..825dc9b7962 100644
--- a/dll/win32/browseui/lang/de-DE.rc
+++ b/dll/win32/browseui/lang/de-DE.rc
@@ -298,11 +298,6 @@ BEGIN
     IDS_ADDRESSBANDLABEL "Adre&sse"
 END
 
-STRINGTABLE
-BEGIN
-    IDS_FOLDERSLABEL "Ordner"
-END
-
 STRINGTABLE
 BEGIN
     IDS_ADDRESSMENUTEXT "&Address"
diff --git a/dll/win32/browseui/lang/en-US.rc b/dll/win32/browseui/lang/en-US.rc
index 0cc96a612a8..64098afe576 100644
--- a/dll/win32/browseui/lang/en-US.rc
+++ b/dll/win32/browseui/lang/en-US.rc
@@ -309,11 +309,6 @@ BEGIN
     IDS_ADDRESSBANDLABEL "A&ddress"
 END
 
-STRINGTABLE
-BEGIN
-    IDS_FOLDERSLABEL "Folders"
-END
-
 STRINGTABLE
 BEGIN
     IDS_ADDRESSMENUTEXT "&Address"
diff --git a/dll/win32/browseui/lang/es-ES.rc b/dll/win32/browseui/lang/es-ES.rc
index 97be2a77f22..567ff90a0bc 100644
--- a/dll/win32/browseui/lang/es-ES.rc
+++ b/dll/win32/browseui/lang/es-ES.rc
@@ -300,11 +300,6 @@ BEGIN
     IDS_ADDRESSBANDLABEL "Dire&cción"
 END
 
-STRINGTABLE
-BEGIN
-    IDS_FOLDERSLABEL "Carpetas"
-END
-
 STRINGTABLE
 BEGIN
     IDS_ADDRESSMENUTEXT "&Address"
diff --git a/dll/win32/browseui/lang/et-EE.rc b/dll/win32/browseui/lang/et-EE.rc
index 692178b4aeb..3cd0d001535 100644
--- a/dll/win32/browseui/lang/et-EE.rc
+++ b/dll/win32/browseui/lang/et-EE.rc
@@ -298,11 +298,6 @@ BEGIN
     IDS_ADDRESSBANDLABEL "Aa&dress"
 END
 
-STRINGTABLE
-BEGIN
-    IDS_FOLDERSLABEL "Kaustad"
-END
-
 STRINGTABLE
 BEGIN
     IDS_ADDRESSMENUTEXT "&Address"
diff --git a/dll/win32/browseui/lang/eu-ES.rc b/dll/win32/browseui/lang/eu-ES.rc
index 71f1a4b89da..19aa87830de 100644
--- a/dll/win32/browseui/lang/eu-ES.rc
+++ b/dll/win32/browseui/lang/eu-ES.rc
@@ -298,11 +298,6 @@ BEGIN
     IDS_ADDRESSBANDLABEL "Dire&cción"
 END
 
-STRINGTABLE
-BEGIN
-    IDS_FOLDERSLABEL "Carpetas"
-END
-
 STRINGTABLE
 BEGIN
     IDS_ADDRESSMENUTEXT "&Address"
diff --git a/dll/win32/browseui/lang/fr-FR.rc b/dll/win32/browseui/lang/fr-FR.rc
index dc4eec607ae..63dd8eb93b7 100644
--- a/dll/win32/browseui/lang/fr-FR.rc
+++ b/dll/win32/browseui/lang/fr-FR.rc
@@ -309,11 +309,6 @@ BEGIN
     IDS_ADDRESSBANDLABEL "A&dresse"
 END
 
-STRINGTABLE
-BEGIN
-    IDS_FOLDERSLABEL "Dossiers"
-END
-
 STRINGTABLE
 BEGIN
     IDS_ADDRESSMENUTEXT "&Address"
diff --git a/dll/win32/browseui/lang/he-IL.rc b/dll/win32/browseui/lang/he-IL.rc
index d8514bd5b2a..30c0a9c8f5c 100644
--- a/dll/win32/browseui/lang/he-IL.rc
+++ b/dll/win32/browseui/lang/he-IL.rc
@@ -293,11 +293,6 @@ BEGIN
     IDS_ADDRESSBANDLABEL "&כתובת"
 END
 
-STRINGTABLE
-BEGIN
-    IDS_FOLDERSLABEL "תיקיות"
-END
-
 STRINGTABLE
 BEGIN
     IDS_ADDRESSMENUTEXT "&Address"
diff --git a/dll/win32/browseui/lang/hi-IN.rc b/dll/win32/browseui/lang/hi-IN.rc
index a9869c7f850..a26363efd33 100644
--- a/dll/win32/browseui/lang/hi-IN.rc
+++ b/dll/win32/browseui/lang/hi-IN.rc
@@ -291,11 +291,6 @@ BEGIN
     IDS_ADDRESSBANDLABEL "&एड्रेस"
 END
 
-STRINGTABLE
-BEGIN
-    IDS_FOLDERSLABEL "फ़ोल्डरों"
-END
-
 STRINGTABLE
 BEGIN
     IDS_ADDRESSMENUTEXT "&Address"
diff --git a/dll/win32/browseui/lang/hu-HU.rc b/dll/win32/browseui/lang/hu-HU.rc
index 6e3a31ac28f..463c43710a6 100644
--- a/dll/win32/browseui/lang/hu-HU.rc
+++ b/dll/win32/browseui/lang/hu-HU.rc
@@ -309,11 +309,6 @@ BEGIN
     IDS_ADDRESSBANDLABEL "&Cím"
 END
 
-STRINGTABLE
-BEGIN
-    IDS_FOLDERSLABEL "Mappák"
-END
-
 STRINGTABLE
 BEGIN
     IDS_ADDRESSMENUTEXT "&Cím"
diff --git a/dll/win32/browseui/lang/id-ID.rc b/dll/win32/browseui/lang/id-ID.rc
index 317e25762ee..c1d397fd70f 100644
--- a/dll/win32/browseui/lang/id-ID.rc
+++ b/dll/win32/browseui/lang/id-ID.rc
@@ -310,11 +310,6 @@ BEGIN
     IDS_ADDRESSBANDLABEL "A&lamat"
 END
 
-STRINGTABLE
-BEGIN
-    IDS_FOLDERSLABEL "Folder"
-END
-
 STRINGTABLE
 BEGIN
     IDS_ADDRESSMENUTEXT "&Alamat"
diff --git a/dll/win32/browseui/lang/it-IT.rc b/dll/win32/browseui/lang/it-IT.rc
index 5138b3cece3..e0813a0cf7f 100644
--- a/dll/win32/browseui/lang/it-IT.rc
+++ b/dll/win32/browseui/lang/it-IT.rc
@@ -291,11 +291,6 @@ BEGIN
     IDS_ADDRESSBANDLABEL "Indirizzo"
 END
 
-STRINGTABLE
-BEGIN
-    IDS_FOLDERSLABEL "Cartelle"
-END
-
 STRINGTABLE
 BEGIN
     IDS_ADDRESSMENUTEXT "&Indirizzo"
diff --git a/dll/win32/browseui/lang/ja-JP.rc b/dll/win32/browseui/lang/ja-JP.rc
index 4ffed19d1b7..ea4f0583ea7 100644
--- a/dll/win32/browseui/lang/ja-JP.rc
+++ b/dll/win32/browseui/lang/ja-JP.rc
@@ -309,11 +309,6 @@ BEGIN
     IDS_ADDRESSBANDLABEL "アドレス(&D)"
 END
 
-STRINGTABLE
-BEGIN
-    IDS_FOLDERSLABEL "フォルダー"
-END
-
 STRINGTABLE
 BEGIN
     IDS_ADDRESSMENUTEXT "アドレス(&A)"
diff --git a/dll/win32/browseui/lang/pl-PL.rc b/dll/win32/browseui/lang/pl-PL.rc
index b9aa53ff175..f7526430f54 100644
--- a/dll/win32/browseui/lang/pl-PL.rc
+++ b/dll/win32/browseui/lang/pl-PL.rc
@@ -300,11 +300,6 @@ BEGIN
     IDS_ADDRESSBANDLABEL "A&dres"
 END
 
-STRINGTABLE
-BEGIN
-    IDS_FOLDERSLABEL "Foldery"
-END
-
 STRINGTABLE
 BEGIN
     IDS_ADDRESSMENUTEXT "&Adres"
diff --git a/dll/win32/browseui/lang/pt-BR.rc b/dll/win32/browseui/lang/pt-BR.rc
index 845176e3e43..1a49d763777 100644
--- a/dll/win32/browseui/lang/pt-BR.rc
+++ b/dll/win32/browseui/lang/pt-BR.rc
@@ -293,11 +293,6 @@ BEGIN
     IDS_ADDRESSBANDLABEL "E&ndereço"
 END
 
-STRINGTABLE
-BEGIN
-    IDS_FOLDERSLABEL "Pastas"
-END
-
 STRINGTABLE
 BEGIN
     IDS_ADDRESSMENUTEXT "&Address"
diff --git a/dll/win32/browseui/lang/pt-PT.rc b/dll/win32/browseui/lang/pt-PT.rc
index 2d4b6d03f69..961b84e66a9 100644
--- a/dll/win32/browseui/lang/pt-PT.rc
+++ b/dll/win32/browseui/lang/pt-PT.rc
@@ -293,11 +293,6 @@ BEGIN
     IDS_ADDRESSBANDLABEL "E&ndereço"
 END
 
-STRINGTABLE
-BEGIN
-    IDS_FOLDERSLABEL "Pastas"
-END
-
 STRINGTABLE
 BEGIN
     IDS_ADDRESSMENUTEXT "&Address"
diff --git a/dll/win32/browseui/lang/ro-RO.rc b/dll/win32/browseui/lang/ro-RO.rc
index ea065d92cfa..3ce2a8fa364 100644
--- a/dll/win32/browseui/lang/ro-RO.rc
+++ b/dll/win32/browseui/lang/ro-RO.rc
@@ -299,11 +299,6 @@ BEGIN
     IDS_ADDRESSBANDLABEL "A&dresă"
 END
 
-STRINGTABLE
-BEGIN
-    IDS_FOLDERSLABEL "Foldere"
-END
-
 STRINGTABLE
 BEGIN
     IDS_ADDRESSMENUTEXT "&Adresă"
diff --git a/dll/win32/browseui/lang/ru-RU.rc b/dll/win32/browseui/lang/ru-RU.rc
index 582a53e31ac..c4eeffd39e9 100644
--- a/dll/win32/browseui/lang/ru-RU.rc
+++ b/dll/win32/browseui/lang/ru-RU.rc
@@ -300,11 +300,6 @@ BEGIN
     IDS_ADDRESSBANDLABEL "А&дрес"
 END
 
-STRINGTABLE
-BEGIN
-    IDS_FOLDERSLABEL "Папки"
-END
-
 STRINGTABLE
 BEGIN
     IDS_ADDRESSMENUTEXT "&Адрес"
diff --git a/dll/win32/browseui/lang/sq-AL.rc b/dll/win32/browseui/lang/sq-AL.rc
index 1d34450e988..0298e254089 100644
--- a/dll/win32/browseui/lang/sq-AL.rc
+++ b/dll/win32/browseui/lang/sq-AL.rc
@@ -310,11 +310,6 @@ BEGIN
     IDS_ADDRESSBANDLABEL "A&dresa"
 END
 
-STRINGTABLE
-BEGIN
-    IDS_FOLDERSLABEL "Dosje"
-END
-
 STRINGTABLE
 BEGIN
     IDS_ADDRESSMENUTEXT "&Address"
diff --git a/dll/win32/browseui/lang/tr-TR.rc b/dll/win32/browseui/lang/tr-TR.rc
index 5578a1e2f75..71039340ddd 100644
--- a/dll/win32/browseui/lang/tr-TR.rc
+++ b/dll/win32/browseui/lang/tr-TR.rc
@@ -293,11 +293,6 @@ BEGIN
     IDS_ADDRESSBANDLABEL "A&dres"
 END
 
-STRINGTABLE
-BEGIN
-    IDS_FOLDERSLABEL "Dizinler"
-END
-
 STRINGTABLE
 BEGIN
     IDS_ADDRESSMENUTEXT "&Address"
diff --git a/dll/win32/browseui/lang/uk-UA.rc b/dll/win32/browseui/lang/uk-UA.rc
index 9e606fa86b8..a5dc172200c 100644
--- a/dll/win32/browseui/lang/uk-UA.rc
+++ b/dll/win32/browseui/lang/uk-UA.rc
@@ -299,11 +299,6 @@ BEGIN
     IDS_ADDRESSBANDLABEL "А&дреса"
 END
 
-STRINGTABLE
-BEGIN
-    IDS_FOLDERSLABEL "Папки"
-END
-
 STRINGTABLE
 BEGIN
     IDS_ADDRESSMENUTEXT "&Address"
diff --git a/dll/win32/browseui/lang/zh-CN.rc b/dll/win32/browseui/lang/zh-CN.rc
index b5b58963be5..86c1ca80181 100644
--- a/dll/win32/browseui/lang/zh-CN.rc
+++ b/dll/win32/browseui/lang/zh-CN.rc
@@ -313,11 +313,6 @@ BEGIN
     IDS_ADDRESSBANDLABEL "地址(&D)"
 END
 
-STRINGTABLE
-BEGIN
-    IDS_FOLDERSLABEL "文件夹"
-END
-
 STRINGTABLE
 BEGIN
     IDS_ADDRESSMENUTEXT "地址(&A)"
diff --git a/dll/win32/browseui/lang/zh-TW.rc b/dll/win32/browseui/lang/zh-TW.rc
index 89b59c0672a..15665202889 100644
--- a/dll/win32/browseui/lang/zh-TW.rc
+++ b/dll/win32/browseui/lang/zh-TW.rc
@@ -315,11 +315,6 @@ BEGIN
     IDS_ADDRESSBANDLABEL "網址(&D)"
 END
 
-STRINGTABLE
-BEGIN
-    IDS_FOLDERSLABEL "資料夾"
-END
-
 STRINGTABLE
 BEGIN
     IDS_ADDRESSMENUTEXT "&Address"
diff --git a/dll/win32/browseui/precomp.h b/dll/win32/browseui/precomp.h
index cfed44eef59..a3175a99156 100644
--- a/dll/win32/browseui/precomp.h
+++ b/dll/win32/browseui/precomp.h
@@ -58,7 +58,6 @@
 #include "regtreeoptions.h"
 #include "CShellTaskScheduler.h"
 #include "CTaskbarList.h"
-#include "explorerband.h"
 #include "CProgressDialog.h"
 #include "CUserAssist.h"
 #include "browseui.h"
diff --git a/dll/win32/browseui/resource.h b/dll/win32/browseui/resource.h
index fecbd49a2df..ca58cf9651c 100644
--- a/dll/win32/browseui/resource.h
+++ b/dll/win32/browseui/resource.h
@@ -125,7 +125,6 @@
 #define IDS_SEARCHLABEL          12897
 #define IDS_STANDARD_TOOLBAR     12624
 #define IDS_ADDRESSBANDLABEL     12902
-#define IDS_FOLDERSLABEL         12919
 #define IDS_ADDRESSMENUTEXT      13137
 #define IDS_HISTORYTEXT          13169
 #define IDS_UP                   58434
diff --git a/dll/win32/browseui/utility.h b/dll/win32/browseui/utility.h
deleted file mode 100644
index b40d18c34a4..00000000000
--- a/dll/win32/browseui/utility.h
+++ /dev/null
@@ -1,8 +0,0 @@
-#pragma once
-
-void *operator new(size_t size);
-void operator delete(void *p);
-
-HRESULT SHELL_GetIDListFromObject(IUnknown *punk, PIDLIST_ABSOLUTE *ppidl);
-BOOL SHELL_IsEqualAbsoluteID(PCIDLIST_ABSOLUTE a, PCIDLIST_ABSOLUTE b);
-BOOL SHELL_IsVerb(IContextMenu *pcm, UINT_PTR idCmd, LPCWSTR Verb);
diff --git a/dll/win32/browseui/explorerband.cpp 
b/dll/win32/shdocvw/CExplorerBand.cpp
similarity index 99%
rename from dll/win32/browseui/explorerband.cpp
rename to dll/win32/shdocvw/CExplorerBand.cpp
index 5922c74f612..ab65442d847 100644
--- a/dll/win32/browseui/explorerband.cpp
+++ b/dll/win32/shdocvw/CExplorerBand.cpp
@@ -6,16 +6,12 @@
  *              Copyright 2020-2024 Katayama Hirofumi MZ 
<katayama.hirofumi...@gmail.com>
  */
 
-#include "precomp.h"
+#include "objects.h"
 #include <commoncontrols.h>
 #include <undocshell.h>
-#include "utility.h"
 
-#if 1
-#undef UNIMPLEMENTED
-
-#define UNIMPLEMENTED DbgPrint("%s is UNIMPLEMENTED!\n", __FUNCTION__)
-#endif
+#include <wine/debug.h>
+WINE_DEFAULT_DEBUG_CHANNEL(shdocvw);
 
 /*
  * TODO:
diff --git a/dll/win32/browseui/explorerband.h 
b/dll/win32/shdocvw/CExplorerBand.h
similarity index 100%
rename from dll/win32/browseui/explorerband.h
rename to dll/win32/shdocvw/CExplorerBand.h
diff --git a/dll/win32/shdocvw/CFavBand.cpp b/dll/win32/shdocvw/CFavBand.cpp
index b839f2cfdcd..38e7a4ebbdc 100644
--- a/dll/win32/shdocvw/CFavBand.cpp
+++ b/dll/win32/shdocvw/CFavBand.cpp
@@ -5,47 +5,11 @@
  * COPYRIGHT:   Copyright 2024 Katayama Hirofumi MZ 
<katayama.hirofumi...@gmail.com>
  */
 
-#include <windows.h>
-#include <shlobj.h>
-#include <shlwapi.h>
-#include <atlbase.h>
-#include <atlcom.h>
-#include <atlwin.h>
-#include <undocshell.h>
-#include <shlobj_undoc.h>
-#include <shlguid_undoc.h>
-#include <shlwapi_undoc.h>
-#include <shdeprecated.h>
-#include <olectlid.h>
-#include <exdispid.h>
-#include <shellutils.h>
-#include <ui/rosctrls.h>
-#include "shdocvw.h"
-#include "CFavBand.h"
+#include "objects.h"
 
 #include <wine/debug.h>
 WINE_DEFAULT_DEBUG_CHANNEL(shdocvw);
 
-void *operator new(size_t size)
-{
-    return ::LocalAlloc(LPTR, size);
-}
-
-void operator delete(void *ptr)
-{
-    ::LocalFree(ptr);
-}
-
-void operator delete(void *ptr, size_t size)
-{
-    ::LocalFree(ptr);
-}
-
-#if 1
-#undef UNIMPLEMENTED
-#define UNIMPLEMENTED ERR("%s is UNIMPLEMENTED!\n", __FUNCTION__)
-#endif
-
 CFavBand::CFavBand()
     : m_fVisible(FALSE)
     , m_bFocused(FALSE)
@@ -53,7 +17,7 @@ CFavBand::CFavBand()
     , m_hToolbarImageList(NULL)
     , m_hTreeViewImageList(NULL)
 {
-    ::InterlockedIncrement(&SHDOCVW_refCount);
+    SHDOCVW_LockModule();
     SHGetSpecialFolderLocation(NULL, CSIDL_FAVORITES, &m_pidlFav);
 }
 
@@ -69,7 +33,7 @@ CFavBand::~CFavBand()
         ImageList_Destroy(m_hTreeViewImageList);
         m_hTreeViewImageList = NULL;
     }
-    ::InterlockedDecrement(&SHDOCVW_refCount);
+    SHDOCVW_UnlockModule();
 }
 
 VOID CFavBand::OnFinalMessage(HWND)
@@ -615,44 +579,3 @@ STDMETHODIMP CFavBand::Invoke(
     }
     return E_INVALIDARG;
 }
-
-BEGIN_OBJECT_MAP(ObjectMap)
-    OBJECT_ENTRY(CLSID_SH_FavBand, CFavBand)
-END_OBJECT_MAP()
-
-class CFavBandModule : public CComModule
-{
-public:
-};
-
-static CFavBandModule gModule;
-
-EXTERN_C VOID
-CFavBand_Init(HINSTANCE hInstance)
-{
-    gModule.Init(ObjectMap, hInstance, NULL);
-}
-
-EXTERN_C HRESULT
-CFavBand_DllCanUnloadNow(VOID)
-{
-    return gModule.DllCanUnloadNow();
-}
-
-EXTERN_C HRESULT
-CFavBand_DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID *ppv)
-{
-    return gModule.DllGetClassObject(rclsid, riid, ppv);
-}
-
-EXTERN_C HRESULT
-CFavBand_DllRegisterServer(VOID)
-{
-    return gModule.DllRegisterServer(FALSE);
-}
-
-EXTERN_C HRESULT
-CFavBand_DllUnregisterServer(VOID)
-{
-    return gModule.DllUnregisterServer(FALSE);
-}
diff --git a/dll/win32/shdocvw/CFavBand.h b/dll/win32/shdocvw/CFavBand.h
index 9386a309784..ff6f86c282e 100644
--- a/dll/win32/shdocvw/CFavBand.h
+++ b/dll/win32/shdocvw/CFavBand.h
@@ -7,12 +7,6 @@
 
 #pragma once
 
-EXTERN_C VOID CFavBand_Init(HINSTANCE hInstance);
-EXTERN_C HRESULT CFavBand_DllCanUnloadNow(VOID);
-EXTERN_C HRESULT CFavBand_DllGetClassObject(REFCLSID rclsid, REFIID riid, 
LPVOID *ppv);
-EXTERN_C HRESULT CFavBand_DllRegisterServer(VOID);
-EXTERN_C HRESULT CFavBand_DllUnregisterServer(VOID);
-
 #define FAVBANDCLASSNAME L"ReactOS Favorites Band"
 
 #ifdef __cplusplus
diff --git a/dll/win32/shdocvw/CMakeLists.txt b/dll/win32/shdocvw/CMakeLists.txt
index 6110906a268..71ab7e8ddb3 100644
--- a/dll/win32/shdocvw/CMakeLists.txt
+++ b/dll/win32/shdocvw/CMakeLists.txt
@@ -10,12 +10,11 @@ list(APPEND SOURCE
     precomp.h
     ${CMAKE_CURRENT_BINARY_DIR}/shdocvw_stubs.c)
 
-add_typelib(shdocvw_v1.idl)
+add_typelib(res/shdocvw_v1.idl)
 set_source_files_properties(shdocvw.rc PROPERTIES OBJECT_DEPENDS 
${CMAKE_CURRENT_BINARY_DIR}/shdocvw_v1.tlb)
 
 add_library(shdocvw MODULE
     ${SOURCE}
-    mrulist.cpp
     shdocvw.rc
     $<TARGET_OBJECTS:shdocvw_sublib>
     ${CMAKE_CURRENT_BINARY_DIR}/shdocvw.def)
@@ -32,7 +31,12 @@ add_dependencies(shdocvw stdole2)
 add_pch(shdocvw precomp.h SOURCE)
 add_cd_file(TARGET shdocvw DESTINATION reactos/system32 FOR all)
 
-add_library(shdocvw_sublib OBJECT CFavBand.cpp)
+add_library(shdocvw_sublib OBJECT
+    CExplorerBand.cpp
+    CFavBand.cpp
+    mrulist.cpp
+    objects.cpp
+    utility.cpp)
 target_link_libraries(shdocvw_sublib PRIVATE atl_classes)
 target_compile_definitions(shdocvw_sublib PRIVATE 
$<TARGET_PROPERTY:shdocvw,COMPILE_DEFINITIONS>)
 target_compile_options(shdocvw_sublib PRIVATE 
$<TARGET_PROPERTY:shdocvw,COMPILE_OPTIONS>)
diff --git a/dll/win32/shdocvw/lang/bg-BG.rc b/dll/win32/shdocvw/lang/bg-BG.rc
new file mode 100644
index 00000000000..f83e20b8019
--- /dev/null
+++ b/dll/win32/shdocvw/lang/bg-BG.rc
@@ -0,0 +1,9 @@
+
+LANGUAGE LANG_BULGARIAN, SUBLANG_DEFAULT
+
+STRINGTABLE
+BEGIN
+    IDS_ADD "Add..."
+    IDS_ORGANIZE "Organize..."
+    IDS_FOLDERSLABEL "Папки"
+END
diff --git a/dll/win32/shdocvw/lang/de-DE.rc b/dll/win32/shdocvw/lang/de-DE.rc
new file mode 100644
index 00000000000..3c9eac042ed
--- /dev/null
+++ b/dll/win32/shdocvw/lang/de-DE.rc
@@ -0,0 +1,9 @@
+
+LANGUAGE LANG_GERMAN, SUBLANG_NEUTRAL
+
+STRINGTABLE
+BEGIN
+    IDS_ADD "Add..."
+    IDS_ORGANIZE "Organize..."
+    IDS_FOLDERSLABEL "Ordner"
+END
diff --git a/dll/win32/shdocvw/lang/en-US.rc b/dll/win32/shdocvw/lang/en-US.rc
index a5691c65715..12d6bbe94dd 100644
--- a/dll/win32/shdocvw/lang/en-US.rc
+++ b/dll/win32/shdocvw/lang/en-US.rc
@@ -3,6 +3,7 @@ LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
 
 STRINGTABLE
 BEGIN
-    IDS_ADD "Add"
-    IDS_ORGANIZE "Organize"
+    IDS_ADD "Add..."
+    IDS_ORGANIZE "Organize..."
+    IDS_FOLDERSLABEL "Folders"
 END
diff --git a/dll/win32/shdocvw/lang/es-ES.rc b/dll/win32/shdocvw/lang/es-ES.rc
new file mode 100644
index 00000000000..cedac65d717
--- /dev/null
+++ b/dll/win32/shdocvw/lang/es-ES.rc
@@ -0,0 +1,9 @@
+
+LANGUAGE LANG_SPANISH, SUBLANG_NEUTRAL
+
+STRINGTABLE
+BEGIN
+    IDS_ADD "Add..."
+    IDS_ORGANIZE "Organize..."
+    IDS_FOLDERSLABEL "Carpetas"
+END
diff --git a/dll/win32/shdocvw/lang/et-EE.rc b/dll/win32/shdocvw/lang/et-EE.rc
new file mode 100644
index 00000000000..a3a46d82942
--- /dev/null
+++ b/dll/win32/shdocvw/lang/et-EE.rc
@@ -0,0 +1,9 @@
+
+LANGUAGE LANG_ESTONIAN, SUBLANG_DEFAULT
+
+STRINGTABLE
+BEGIN
+    IDS_ADD "Add..."
+    IDS_ORGANIZE "Organize..."
+    IDS_FOLDERSLABEL "Kaustad"
+END
diff --git a/dll/win32/shdocvw/lang/eu-ES.rc b/dll/win32/shdocvw/lang/eu-ES.rc
new file mode 100644
index 00000000000..6f37fee0a8e
--- /dev/null
+++ b/dll/win32/shdocvw/lang/eu-ES.rc
@@ -0,0 +1,9 @@
+
+LANGUAGE LANG_BASQUE, SUBLANG_NEUTRAL
+
+STRINGTABLE
+BEGIN
+    IDS_ADD "Add..."
+    IDS_ORGANIZE "Organize..."
+    IDS_FOLDERSLABEL "Carpetas"
+END
diff --git a/dll/win32/shdocvw/lang/fr-FR.rc b/dll/win32/shdocvw/lang/fr-FR.rc
new file mode 100644
index 00000000000..3abed1c22b6
--- /dev/null
+++ b/dll/win32/shdocvw/lang/fr-FR.rc
@@ -0,0 +1,9 @@
+
+LANGUAGE LANG_FRENCH, SUBLANG_NEUTRAL
+
+STRINGTABLE
+BEGIN
+    IDS_ADD "Add..."
+    IDS_ORGANIZE "Organize..."
+    IDS_FOLDERSLABEL "Dossiers"
+END
diff --git a/dll/win32/shdocvw/lang/he-IL.rc b/dll/win32/shdocvw/lang/he-IL.rc
new file mode 100644
index 00000000000..7a933a2f963
--- /dev/null
+++ b/dll/win32/shdocvw/lang/he-IL.rc
@@ -0,0 +1,9 @@
+
+LANGUAGE LANG_HEBREW, SUBLANG_DEFAULT
+
+STRINGTABLE
+BEGIN
+    IDS_ADD "Add..."
+    IDS_ORGANIZE "Organize..."
+    IDS_FOLDERSLABEL "תיקיות"
+END
diff --git a/dll/win32/shdocvw/lang/hi-IN.rc b/dll/win32/shdocvw/lang/hi-IN.rc
new file mode 100644
index 00000000000..91c4b047f50
--- /dev/null
+++ b/dll/win32/shdocvw/lang/hi-IN.rc
@@ -0,0 +1,9 @@
+
+LANGUAGE LANG_HINDI, SUBLANG_HINDI_INDIA
+
+STRINGTABLE
+BEGIN
+    IDS_ADD "Add..."
+    IDS_ORGANIZE "Organize..."
+    IDS_FOLDERSLABEL "फ़ोल्डरों"
+END
diff --git a/dll/win32/shdocvw/lang/hu-HU.rc b/dll/win32/shdocvw/lang/hu-HU.rc
new file mode 100644
index 00000000000..257148a8114
--- /dev/null
+++ b/dll/win32/shdocvw/lang/hu-HU.rc
@@ -0,0 +1,9 @@
+
+LANGUAGE LANG_HUNGARIAN, SUBLANG_DEFAULT
+
+STRINGTABLE
+BEGIN
+    IDS_ADD "Add..."
+    IDS_ORGANIZE "Organize..."
+    IDS_FOLDERSLABEL "Mappák"
+END
diff --git a/dll/win32/shdocvw/lang/id-ID.rc b/dll/win32/shdocvw/lang/id-ID.rc
new file mode 100644
index 00000000000..de3b981a694
--- /dev/null
+++ b/dll/win32/shdocvw/lang/id-ID.rc
@@ -0,0 +1,9 @@
+
+LANGUAGE LANG_INDONESIAN, SUBLANG_DEFAULT
+
+STRINGTABLE
+BEGIN
+    IDS_ADD "Add..."
+    IDS_ORGANIZE "Organize..."
+    IDS_FOLDERSLABEL "Folder"
+END
diff --git a/dll/win32/shdocvw/lang/it-IT.rc b/dll/win32/shdocvw/lang/it-IT.rc
new file mode 100644
index 00000000000..80b1d4c8f37
--- /dev/null
+++ b/dll/win32/shdocvw/lang/it-IT.rc
@@ -0,0 +1,9 @@
+
+LANGUAGE LANG_ITALIAN, SUBLANG_NEUTRAL
+
+STRINGTABLE
+BEGIN
+    IDS_ADD "Add..."
+    IDS_ORGANIZE "Organize..."
+    IDS_FOLDERSLABEL "Cartelle"
+END
diff --git a/dll/win32/shdocvw/lang/ja-JP.rc b/dll/win32/shdocvw/lang/ja-JP.rc
new file mode 100644
index 00000000000..5b03707daa8
--- /dev/null
+++ b/dll/win32/shdocvw/lang/ja-JP.rc
@@ -0,0 +1,9 @@
+
+LANGUAGE LANG_JAPANESE, SUBLANG_DEFAULT
+
+STRINGTABLE
+BEGIN
+    IDS_ADD "追加..."
+    IDS_ORGANIZE "整理..."
+    IDS_FOLDERSLABEL "フォルダー"
+END
diff --git a/dll/win32/shdocvw/lang/pl-PL.rc b/dll/win32/shdocvw/lang/pl-PL.rc
new file mode 100644
index 00000000000..023ee07f7a4
--- /dev/null
+++ b/dll/win32/shdocvw/lang/pl-PL.rc
@@ -0,0 +1,9 @@
+
+LANGUAGE LANG_POLISH, SUBLANG_DEFAULT
+
+STRINGTABLE
+BEGIN
+    IDS_ADD "Add..."
+    IDS_ORGANIZE "Organize..."
+    IDS_FOLDERSLABEL "Foldery"
+END
diff --git a/dll/win32/shdocvw/lang/pt-BR.rc b/dll/win32/shdocvw/lang/pt-BR.rc
new file mode 100644
index 00000000000..8eb8b6bbf24
--- /dev/null
+++ b/dll/win32/shdocvw/lang/pt-BR.rc
@@ -0,0 +1,9 @@
+
+LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE_BRAZILIAN
+
+STRINGTABLE
+BEGIN
+    IDS_ADD "Add..."
+    IDS_ORGANIZE "Organize..."
+    IDS_FOLDERSLABEL "Pastas"
+END
diff --git a/dll/win32/shdocvw/lang/pt-PT.rc b/dll/win32/shdocvw/lang/pt-PT.rc
new file mode 100644
index 00000000000..ff2ed6ebeae
--- /dev/null
+++ b/dll/win32/shdocvw/lang/pt-PT.rc
@@ -0,0 +1,9 @@
+
+LANGUAGE LANG_PORTUGUESE, SUBLANG_NEUTRAL
+
+STRINGTABLE
+BEGIN
+    IDS_ADD "Add..."
+    IDS_ORGANIZE "Organize..."
+    IDS_FOLDERSLABEL "Pastas"
+END
diff --git a/dll/win32/shdocvw/lang/ro-RO.rc b/dll/win32/shdocvw/lang/ro-RO.rc
new file mode 100644
index 00000000000..26a2005fb85
--- /dev/null
+++ b/dll/win32/shdocvw/lang/ro-RO.rc
@@ -0,0 +1,9 @@
+
+LANGUAGE LANG_ROMANIAN, SUBLANG_NEUTRAL
+
+STRINGTABLE
+BEGIN
+    IDS_ADD "Add..."
+    IDS_ORGANIZE "Organize..."
+    IDS_FOLDERSLABEL "Foldere"
+END
diff --git a/dll/win32/shdocvw/lang/ru-RU.rc b/dll/win32/shdocvw/lang/ru-RU.rc
new file mode 100644
index 00000000000..b96b547feba
--- /dev/null
+++ b/dll/win32/shdocvw/lang/ru-RU.rc
@@ -0,0 +1,9 @@
+
+LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT
+
+STRINGTABLE
+BEGIN
+    IDS_ADD "Add..."
+    IDS_ORGANIZE "Organize..."
+    IDS_FOLDERSLABEL "Папки"
+END
diff --git a/dll/win32/shdocvw/lang/sq-AL.rc b/dll/win32/shdocvw/lang/sq-AL.rc
new file mode 100644
index 00000000000..9d5ec92b41e
--- /dev/null
+++ b/dll/win32/shdocvw/lang/sq-AL.rc
@@ -0,0 +1,9 @@
+
+LANGUAGE LANG_ALBANIAN, SUBLANG_NEUTRAL
+
+STRINGTABLE
+BEGIN
+    IDS_ADD "Add..."
+    IDS_ORGANIZE "Organize..."
+    IDS_FOLDERSLABEL "Dosje"
+END
diff --git a/dll/win32/shdocvw/lang/tr-TR.rc b/dll/win32/shdocvw/lang/tr-TR.rc
new file mode 100644
index 00000000000..1ff52043ffa
--- /dev/null
+++ b/dll/win32/shdocvw/lang/tr-TR.rc
@@ -0,0 +1,9 @@
+
+LANGUAGE LANG_TURKISH, SUBLANG_DEFAULT
+
+STRINGTABLE
+BEGIN
+    IDS_ADD "Add..."
+    IDS_ORGANIZE "Organize..."
+    IDS_FOLDERSLABEL "Dizinler"
+END
diff --git a/dll/win32/shdocvw/lang/uk-UA.rc b/dll/win32/shdocvw/lang/uk-UA.rc
new file mode 100644
index 00000000000..d009579a7cd
--- /dev/null
+++ b/dll/win32/shdocvw/lang/uk-UA.rc
@@ -0,0 +1,9 @@
+
+LANGUAGE LANG_UKRAINIAN, SUBLANG_DEFAULT
+
+STRINGTABLE
+BEGIN
+    IDS_ADD "Add..."
+    IDS_ORGANIZE "Organize..."
+    IDS_FOLDERSLABEL "Папки"
+END
diff --git a/dll/win32/shdocvw/lang/zh-CN.rc b/dll/win32/shdocvw/lang/zh-CN.rc
new file mode 100644
index 00000000000..37f2630ac3e
--- /dev/null
+++ b/dll/win32/shdocvw/lang/zh-CN.rc
@@ -0,0 +1,9 @@
+
+LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED
+
+STRINGTABLE
+BEGIN
+    IDS_ADD "Add..."
+    IDS_ORGANIZE "Organize..."
+    IDS_FOLDERSLABEL "文件夹"
+END
diff --git a/dll/win32/shdocvw/lang/zh-TW.rc b/dll/win32/shdocvw/lang/zh-TW.rc
new file mode 100644
index 00000000000..b02ae00c74e
--- /dev/null
+++ b/dll/win32/shdocvw/lang/zh-TW.rc
@@ -0,0 +1,9 @@
+
+LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_TRADITIONAL
+
+STRINGTABLE
+BEGIN
+    IDS_ADD "Add..."
+    IDS_ORGANIZE "Organize..."
+    IDS_FOLDERSLABEL "資料夾"
+END
diff --git a/dll/win32/shdocvw/mrulist.cpp b/dll/win32/shdocvw/mrulist.cpp
index ba3fcb11fc2..5714e6e8ae5 100644
--- a/dll/win32/shdocvw/mrulist.cpp
+++ b/dll/win32/shdocvw/mrulist.cpp
@@ -7,21 +7,11 @@
 
 #define COBJMACROS
 
-#include <windef.h>
-#include <winbase.h>
-#include <winreg.h>
-#include <objbase.h>
-#include <oleauto.h>
-#include <shlobj.h>
-#include <shlobj_undoc.h>
-#include <shlguid_undoc.h>
-#include <shlwapi.h>
-#include <shlwapi_undoc.h>
+#include "objects.h"
+#include <tchar.h>
 #include <strsafe.h>
-#include "shdocvw.h"
 
 #include <wine/debug.h>
-
 WINE_DEFAULT_DEBUG_CHANNEL(shdocvw);
 
 class CSafeMutex;
@@ -32,22 +22,6 @@ class CMruBase;
             class CMruPidlList;
 class CMruClassFactory;
 
-extern "C" void __cxa_pure_virtual(void)
-{
-    ERR("__cxa_pure_virtual\n");
-    ::DebugBreak();
-}
-
-BOOL IEILIsEqual(LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2, BOOL bUnknown)
-{
-    UINT cb1 = ILGetSize(pidl1), cb2 = ILGetSize(pidl2);
-    if (cb1 == cb2 && memcmp(pidl1, pidl2, cb1) == 0)
-        return TRUE;
-
-    FIXME("%p, %p\n", pidl1, pidl2);
-    return FALSE;
-}
-
 // The flags for SLOTITEMDATA.dwFlags
 #define SLOT_LOADED         0x1
 #define SLOT_SET            0x2
@@ -155,7 +129,7 @@ public:
 
 CMruBase::CMruBase()
 {
-    ::InterlockedIncrement(&SHDOCVW_refCount);
+    SHDOCVW_LockModule();
 }
 
 CMruBase::~CMruBase()
@@ -176,7 +150,7 @@ CMruBase::~CMruBase()
         m_pSlots = (SLOTITEMDATA*)::LocalFree(m_pSlots);
     }
 
-    ::InterlockedDecrement(&SHDOCVW_refCount);
+    SHDOCVW_UnlockModule();
 }
 
 STDMETHODIMP CMruBase::QueryInterface(REFIID riid, void **ppvObj)
@@ -1321,11 +1295,11 @@ protected:
 public:
     CMruClassFactory()
     {
-        ::InterlockedIncrement(&SHDOCVW_refCount);
+        SHDOCVW_LockModule();
     }
     virtual ~CMruClassFactory()
     {
-        ::InterlockedDecrement(&SHDOCVW_refCount);
+        SHDOCVW_UnlockModule();
     }
 
     // IUnknown methods
@@ -1389,9 +1363,9 @@ STDMETHODIMP CMruClassFactory::CreateInstance(IUnknown 
*pUnkOuter, REFIID riid,
 STDMETHODIMP CMruClassFactory::LockServer(BOOL fLock)
 {
     if (fLock)
-        ::InterlockedIncrement(&SHDOCVW_refCount);
+        SHDOCVW_LockModule();
     else
-        ::InterlockedDecrement(&SHDOCVW_refCount);
+        SHDOCVW_UnlockModule();
     return S_OK;
 }
 
diff --git a/dll/win32/shdocvw/objects.cpp b/dll/win32/shdocvw/objects.cpp
new file mode 100644
index 00000000000..8891cb70260
--- /dev/null
+++ b/dll/win32/shdocvw/objects.cpp
@@ -0,0 +1,99 @@
+/*
+ * PROJECT:     ReactOS Explorer
+ * LICENSE:     LGPL-2.1-or-later (https://spdx.org/licenses/LGPL-2.1-or-later)
+ * PURPOSE:     shdocvw.dll objects
+ * COPYRIGHT:   Copyright 2024 Katayama Hirofumi MZ 
<katayama.hirofumi...@gmail.com>
+ */
+
+#include "objects.h"
+
+#include <wine/debug.h>
+WINE_DEFAULT_DEBUG_CHANNEL(shdocvw);
+
+void *operator new(size_t size)
+{
+    return ::LocalAlloc(LMEM_FIXED, size);
+}
+
+void operator delete(void *ptr)
+{
+    ::LocalFree(ptr);
+}
+
+void operator delete(void *ptr, size_t size)
+{
+    ::LocalFree(ptr);
+}
+
+EXTERN_C void __cxa_pure_virtual(void)
+{
+    ERR("__cxa_pure_virtual\n");
+    ::DebugBreak();
+}
+
+BEGIN_OBJECT_MAP(ObjectMap)
+    OBJECT_ENTRY(CLSID_SH_FavBand, CFavBand)
+    OBJECT_ENTRY(CLSID_ExplorerBand, CExplorerBand)
+END_OBJECT_MAP()
+
+class SHDOCVW_Module : public CComModule
+{
+public:
+};
+
+static SHDOCVW_Module gModule;
+
+EXTERN_C VOID
+SHDOCVW_Init(HINSTANCE hInstance)
+{
+    gModule.Init(ObjectMap, hInstance, NULL);
+}
+
+EXTERN_C HRESULT
+SHDOCVW_DllCanUnloadNow(VOID)
+{
+    return gModule.DllCanUnloadNow();
+}
+
+EXTERN_C HRESULT CMruLongList_CreateInstance(DWORD_PTR dwUnused1, void **ppv, 
DWORD_PTR dwUnused3);
+EXTERN_C HRESULT CMruPidlList_CreateInstance(DWORD_PTR dwUnused1, void **ppv, 
DWORD_PTR dwUnused3);
+EXTERN_C HRESULT CMruClassFactory_CreateInstance(REFIID riid, void **ppv);
+
+EXTERN_C HRESULT
+SHDOCVW_DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID *ppv)
+{
+    HRESULT hr = gModule.DllGetClassObject(rclsid, riid, ppv);
+    if (SUCCEEDED(hr))
+        return hr;
+
+    if (IsEqualGUID(riid, IID_IClassFactory) || IsEqualGUID(riid, 
IID_IUnknown))
+    {
+        if (IsEqualGUID(rclsid, CLSID_MruLongList) ||
+            IsEqualGUID(rclsid, CLSID_MruPidlList))
+        {
+            return CMruClassFactory_CreateInstance(riid, ppv);
+        }
+    }
+    else if (IsEqualGUID(riid, IID_IMruDataList))
+    {
+        return CMruLongList_CreateInstance(0, ppv, 0);
+    }
+    else if (IsEqualGUID(riid, IID_IMruPidlList))
+    {
+        return CMruPidlList_CreateInstance(0, ppv, 0);
+    }
+
+    return CLASS_E_CLASSNOTAVAILABLE;
+}
+
+EXTERN_C HRESULT
+SHDOCVW_DllRegisterServer(VOID)
+{
+    return gModule.DllRegisterServer(FALSE);
+}
+
+EXTERN_C HRESULT
+SHDOCVW_DllUnregisterServer(VOID)
+{
+    return gModule.DllUnregisterServer(FALSE);
+}
diff --git a/dll/win32/shdocvw/objects.h b/dll/win32/shdocvw/objects.h
new file mode 100644
index 00000000000..91a02218f1e
--- /dev/null
+++ b/dll/win32/shdocvw/objects.h
@@ -0,0 +1,42 @@
+/*
+ * PROJECT:     ReactOS Explorer
+ * LICENSE:     LGPL-2.1-or-later (https://spdx.org/licenses/LGPL-2.1-or-later)
+ * PURPOSE:     shdocvw.dll objects
+ * COPYRIGHT:   Copyright 2024 Katayama Hirofumi MZ 
<katayama.hirofumi...@gmail.com>
+ */
+
+#pragma once
+
+#include <windows.h>
+#include <shlobj.h>
+#include <shlwapi.h>
+#include <olectlid.h>
+#include <exdispid.h>
+#include "shdocvw.h"
+
+#ifdef __cplusplus
+#include <atlbase.h>
+#include <atlcom.h>
+#include <atlwin.h>
+#include <undocshell.h>
+#include <shlobj_undoc.h>
+#include <shlguid_undoc.h>
+#include <shlwapi_undoc.h>
+#include <shdocvw_undoc.h>
+#include <shdeprecated.h>
+#include <shellutils.h>
+#include <ui/rosctrls.h>
+#include "CExplorerBand.h"
+#include "CFavBand.h"
+#include "utility.h"
+void *operator new(size_t size);
+void operator delete(void *ptr);
+void operator delete(void *ptr, size_t size);
+EXTERN_C void __cxa_pure_virtual(void);
+#endif /* def C++ */
+
+EXTERN_C VOID SHDOCVW_Init(HINSTANCE hInstance);
+EXTERN_C HRESULT SHDOCVW_DllCanUnloadNow(VOID);
+EXTERN_C HRESULT SHDOCVW_DllGetClassObject(REFCLSID rclsid, REFIID riid, 
LPVOID *ppv);
+EXTERN_C HRESULT SHDOCVW_DllRegisterServer(VOID);
+EXTERN_C HRESULT SHDOCVW_DllUnregisterServer(VOID);
diff --git a/dll/win32/browseui/res/explorerband.rgs 
b/dll/win32/shdocvw/res/explorerband.rgs
similarity index 100%
rename from dll/win32/browseui/res/explorerband.rgs
rename to dll/win32/shdocvw/res/explorerband.rgs
diff --git a/dll/win32/shdocvw/favband.rgs b/dll/win32/shdocvw/res/favband.rgs
similarity index 100%
rename from dll/win32/shdocvw/favband.rgs
rename to dll/win32/shdocvw/res/favband.rgs
diff --git a/dll/win32/shdocvw/shdocvw_v1.idl 
b/dll/win32/shdocvw/res/shdocvw_v1.idl
similarity index 100%
rename from dll/win32/shdocvw/shdocvw_v1.idl
rename to dll/win32/shdocvw/res/shdocvw_v1.idl
diff --git a/dll/win32/shdocvw/shdocvw_v1.rgs 
b/dll/win32/shdocvw/res/shdocvw_v1.rgs
similarity index 100%
rename from dll/win32/shdocvw/shdocvw_v1.rgs
rename to dll/win32/shdocvw/res/shdocvw_v1.rgs
diff --git a/dll/win32/shdocvw/resource.h b/dll/win32/shdocvw/resource.h
index b7c1b8f1d0e..12e0b62ce5d 100644
--- a/dll/win32/shdocvw/resource.h
+++ b/dll/win32/shdocvw/resource.h
@@ -1,5 +1,6 @@
 #define IDR_SHDOCVW 1
 #define IDR_FAVBAND 2
+#define IDR_EXPLORERBAND 3
 #define IDR_TYPELIB 1
 
 #define IDW_TOOLBAR  2
@@ -8,5 +9,6 @@
 #define ID_ADD          100
 #define ID_ORGANIZE     101
 
-#define IDS_ADD         1000
-#define IDS_ORGANIZE    1001
+#define IDS_ADD             1000
+#define IDS_ORGANIZE        1001
+#define IDS_FOLDERSLABEL    1002
diff --git a/dll/win32/shdocvw/shdocvw.h b/dll/win32/shdocvw/shdocvw.h
index 5119561691d..c086913518b 100644
--- a/dll/win32/shdocvw/shdocvw.h
+++ b/dll/win32/shdocvw/shdocvw.h
@@ -61,15 +61,8 @@ static inline void SHDOCVW_UnlockModule(void) { 
InterlockedDecrement( &SHDOCVW_r
 
 #ifdef __REACTOS__
 #include "resource.h"
-EXTERN_C HRESULT CMruLongList_CreateInstance(DWORD_PTR dwUnused1, void **ppv, 
DWORD_PTR dwUnused3);
-EXTERN_C HRESULT CMruPidlList_CreateInstance(DWORD_PTR dwUnused1, void **ppv, 
DWORD_PTR dwUnused3);
-EXTERN_C HRESULT CMruClassFactory_CreateInstance(REFIID riid, void **ppv);
+#include "objects.h"
 #define ARRAY_SIZE(array) _countof(array)
-#ifdef __cplusplus
-void *operator new(size_t size);
-void operator delete(void *ptr);
-void operator delete(void *ptr, size_t size);
-#endif
 EXTERN_C HINSTANCE instance;
 #endif // def __REACTOS__
 
diff --git a/dll/win32/shdocvw/shdocvw.rc b/dll/win32/shdocvw/shdocvw.rc
index 4bbcdbd5889..0990bd00269 100644
--- a/dll/win32/shdocvw/shdocvw.rc
+++ b/dll/win32/shdocvw/shdocvw.rc
@@ -19,10 +19,9 @@
 #include "windef.h"
 #include "resource.h"
 
-IDR_SHDOCVW WINE_REGISTRY "shdocvw_v1.rgs"
-
-IDR_FAVBAND REGISTRY "favband.rgs"
-
+IDR_SHDOCVW WINE_REGISTRY "res/shdocvw_v1.rgs"
+IDR_FAVBAND REGISTRY "res/favband.rgs"
+IDR_EXPLORERBAND REGISTRY "res/explorerband.rgs"
 IDR_TYPELIB TYPELIB "shdocvw_v1.tlb"
 
 LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
@@ -40,6 +39,72 @@ LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
 /* UTF-8 */
 #pragma code_page(65001)
 
+#ifdef LANGUAGE_BG_BG
+    #include "lang/bg-BG.rc"
+#endif
+#ifdef LANGUAGE_DE_DE
+    #include "lang/de-DE.rc"
+#endif
 #ifdef LANGUAGE_EN_US
     #include "lang/en-US.rc"
 #endif
+#ifdef LANGUAGE_ES_ES
+    #include "lang/es-ES.rc"
+#endif
+#ifdef LANGUAGE_ET_EE
+    #include "lang/et-EE.rc"
+#endif
+#ifdef LANGUAGE_EU_ES
+    #include "lang/eu-ES.rc"
+#endif
+#ifdef LANGUAGE_FR_FR
+    #include "lang/fr-FR.rc"
+#endif
+#ifdef LANGUAGE_HE_IL
+    #include "lang/he-IL.rc"
+#endif
+#ifdef LANGUAGE_HI_IN
+    #include "lang/hi-IN.rc"
+#endif
+#ifdef LANGUAGE_HU_HU
+    #include "lang/hu-HU.rc"
+#endif
+#ifdef LANGUAGE_ID_ID
+    #include "lang/id-ID.rc"
+#endif
+#ifdef LANGUAGE_IT_IT
+    #include "lang/it-IT.rc"
+#endif
+#ifdef LANGUAGE_JA_JP
+    #include "lang/ja-JP.rc"
+#endif
+#ifdef LANGUAGE_PL_PL
+    #include "lang/pl-PL.rc"
+#endif
+#ifdef LANGUAGE_PT_BR
+    #include "lang/pt-BR.rc"
+#endif
+#ifdef LANGUAGE_PT_PT
+    #include "lang/pt-PT.rc"
+#endif
+#ifdef LANGUAGE_RO_RO
+    #include "lang/ro-RO.rc"
+#endif
+#ifdef LANGUAGE_RU_RU
+    #include "lang/ru-RU.rc"
+#endif
+#ifdef LANGUAGE_SQ_AL
+    #include "lang/sq-AL.rc"
+#endif
+#ifdef LANGUAGE_TR_TR
+    #include "lang/tr-TR.rc"
+#endif
+#ifdef LANGUAGE_UK_UA
+    #include "lang/uk-UA.rc"
+#endif
+#ifdef LANGUAGE_ZH_CN
+    #include "lang/zh-CN.rc"
+#endif
+#ifdef LANGUAGE_PL_PL
+    #include "lang/zh-TW.rc"
+#endif
diff --git a/dll/win32/shdocvw/shdocvw.spec b/dll/win32/shdocvw/shdocvw.spec
index f90cd11c6f9..0a8bd10cd84 100644
--- a/dll/win32/shdocvw/shdocvw.spec
+++ b/dll/win32/shdocvw/shdocvw.spec
@@ -111,7 +111,7 @@
 216 stub -noname GetDefaultInternetSearchUrlW
 217 stub -noname GetDefaultInternetSearchUrlA
 218 stdcall -noname IEParseDisplayNameWithBCW(long wstr ptr ptr)
-219 stub -noname IEILIsEqual
+219 stdcall -noname IEILIsEqual(ptr ptr long)
 221 stub -noname IECreateFromPathCPWithBCA
 222 stub -noname IECreateFromPathCPWithBCW
 223 stub -noname ResetWebSettings # FIXME: Inspect
diff --git a/dll/win32/shdocvw/shdocvw_main.c b/dll/win32/shdocvw/shdocvw_main.c
index 1dd0b88c4ad..c817bbb3c5f 100644
--- a/dll/win32/shdocvw/shdocvw_main.c
+++ b/dll/win32/shdocvw/shdocvw_main.c
@@ -32,7 +32,7 @@
 #include "winnls.h"
 #include <shlguid_undoc.h>
 #include <rpcproxy.h> /* for __wine_register_resources / 
__wine_unregister_resources */
-#include "CFavBand.h"
+#include "objects.h"
 #endif
 #include "shlwapi.h"
 #include "wininet.h"
@@ -95,26 +95,10 @@ HRESULT WINAPI DllGetClassObject(REFCLSID rclsid, REFIID 
riid, void **ppv)
 
 #ifdef __REACTOS__
     {
-        HRESULT hr = CFavBand_DllGetClassObject(rclsid, riid, ppv);
-        if (hr != CLASS_E_CLASSNOTAVAILABLE)
+        HRESULT hr = SHDOCVW_DllGetClassObject(rclsid, riid, ppv);
+        if (SUCCEEDED(hr))
             return hr;
     }
-    if (IsEqualGUID(riid, &IID_IClassFactory) || IsEqualGUID(riid, 
&IID_IUnknown))
-    {
-        if (IsEqualGUID(rclsid, &CLSID_MruLongList) ||
-            IsEqualGUID(rclsid, &CLSID_MruPidlList))
-        {
-            return CMruClassFactory_CreateInstance(riid, ppv);
-        }
-    }
-    else if (IsEqualGUID(riid, &IID_IMruDataList))
-    {
-        return CMruLongList_CreateInstance(0, ppv, 0);
-    }
-    else if (IsEqualGUID(riid, &IID_IMruPidlList))
-    {
-        return CMruPidlList_CreateInstance(0, ppv, 0);
-    }
 #endif
 
     /* As a last resort, figure if the CLSID belongs to a 'Shell Instance 
Object' */
@@ -128,7 +112,7 @@ HRESULT WINAPI DllRegisterServer(void)
 {
     TRACE("\n");
 #ifdef __REACTOS__
-    CFavBand_DllRegisterServer();
+    SHDOCVW_DllRegisterServer();
     return __wine_register_resources(instance);
 #else
     return S_OK;
@@ -142,7 +126,7 @@ HRESULT WINAPI DllUnregisterServer(void)
 {
     TRACE("\n");
 #ifdef __REACTOS__
-    CFavBand_DllUnregisterServer();
+    SHDOCVW_DllUnregisterServer();
     return __wine_unregister_resources(instance);
 #else
     return S_OK;
@@ -189,7 +173,7 @@ BOOL WINAPI DllMain(HINSTANCE hinst, DWORD fdwReason, 
LPVOID fImpLoad)
     case DLL_PROCESS_ATTACH:
 #ifdef __REACTOS__
         instance = hinst;
-        CFavBand_Init(hinst);
+        SHDOCVW_Init(hinst);
 #endif
         DisableThreadLibraryCalls(hinst);
         break;
@@ -208,7 +192,7 @@ BOOL WINAPI DllMain(HINSTANCE hinst, DWORD fdwReason, 
LPVOID fImpLoad)
 HRESULT WINAPI DllCanUnloadNow(void)
 {
 #ifdef __REACTOS__
-    if (CFavBand_DllCanUnloadNow() != S_OK)
+    if (SHDOCVW_DllCanUnloadNow() != S_OK)
         return S_FALSE;
 #endif
     return SHDOCVW_refCount ? S_FALSE : S_OK;
diff --git a/dll/win32/browseui/utility.cpp b/dll/win32/shdocvw/utility.cpp
similarity index 57%
rename from dll/win32/browseui/utility.cpp
rename to dll/win32/shdocvw/utility.cpp
index ead564a1f6e..fdf3550d548 100644
--- a/dll/win32/browseui/utility.cpp
+++ b/dll/win32/shdocvw/utility.cpp
@@ -1,24 +1,21 @@
-#include "precomp.h"
-#ifndef SHCIDS_CANONICALONLY
-#define SHCIDS_CANONICALONLY 0x10000000L
-#endif
+/*
+ * PROJECT:     ReactOS Explorer
+ * LICENSE:     LGPL-2.1-or-later (https://spdx.org/licenses/LGPL-2.1-or-later)
+ * PURPOSE:     Utility for shdocvw.dll
+ * COPYRIGHT:   Copyright 2024 Whindmar Saksit <whinds...@proton.me>
+ */
 
-void *operator new(size_t size)
-{
-    return LocalAlloc(LMEM_ZEROINIT, size);
-}
+#include "objects.h"
 
-void operator delete(void *p)
-{
-    LocalFree(p);
-}
+#include <wine/debug.h>
+WINE_DEFAULT_DEBUG_CHANNEL(shdocvw);
 
-void operator delete(void *p, UINT_PTR)
-{
-    LocalFree(p);
-}
+#ifndef SHCIDS_CANONICALONLY
+#define SHCIDS_CANONICALONLY 0x10000000L
+#endif
 
-HRESULT SHELL_GetIDListFromObject(IUnknown *punk, PIDLIST_ABSOLUTE *ppidl)
+EXTERN_C HRESULT
+SHELL_GetIDListFromObject(IUnknown *punk, PIDLIST_ABSOLUTE *ppidl)
 {
 #if DLL_EXPORT_VERSION >= _WIN32_WINNT_VISTA && 0 // FIXME: SHELL32 not ready 
yet
     return SHGetIDListFromObject(punk, ppidl);
@@ -51,12 +48,14 @@ static HRESULT SHELL_CompareAbsoluteIDs(LPARAM lParam, 
PCIDLIST_ABSOLUTE a, PCID
     return hr;
 }
 
-BOOL SHELL_IsEqualAbsoluteID(PCIDLIST_ABSOLUTE a, PCIDLIST_ABSOLUTE b)
+EXTERN_C BOOL
+SHELL_IsEqualAbsoluteID(PCIDLIST_ABSOLUTE a, PCIDLIST_ABSOLUTE b)
 {
     return !SHELL_CompareAbsoluteIDs(SHCIDS_CANONICALONLY, a, b);
 }
 
-BOOL SHELL_IsVerb(IContextMenu *pcm, UINT_PTR idCmd, LPCWSTR Verb)
+EXTERN_C BOOL
+SHELL_IsVerb(IContextMenu *pcm, UINT_PTR idCmd, LPCWSTR Verb)
 {
     HRESULT hr;
     WCHAR wide[MAX_PATH];
@@ -71,3 +70,26 @@ BOOL SHELL_IsVerb(IContextMenu *pcm, UINT_PTR idCmd, LPCWSTR 
Verb)
     }
     return FALSE;
 }
+
+EXTERN_C BOOL
+_ILIsDesktop(LPCITEMIDLIST pidl)
+{
+    return (pidl == NULL || pidl->mkid.cb == 0);
+}
+
+/*************************************************************************
+ *      IEILIsEqual [SHDOCVW.219]
+ */
+EXTERN_C BOOL WINAPI
+IEILIsEqual(
+    _In_ LPCITEMIDLIST pidl1,
+    _In_ LPCITEMIDLIST pidl2,
+    _In_ BOOL bUnknown)
+{
+    UINT cb1 = ILGetSize(pidl1), cb2 = ILGetSize(pidl2);
+    if (cb1 == cb2 && memcmp(pidl1, pidl2, cb1) == 0)
+        return TRUE;
+
+    FIXME("%p, %p\n", pidl1, pidl2);
+    return FALSE;
+}
diff --git a/dll/win32/shdocvw/utility.h b/dll/win32/shdocvw/utility.h
new file mode 100644
index 00000000000..94c7ac5a3eb
--- /dev/null
+++ b/dll/win32/shdocvw/utility.h
@@ -0,0 +1,13 @@
+/*
+ * PROJECT:     ReactOS Explorer
+ * LICENSE:     LGPL-2.1-or-later (https://spdx.org/licenses/LGPL-2.1-or-later)
+ * PURPOSE:     Utility for shdocvw.dll
+ * COPYRIGHT:   Copyright 2024 Whindmar Saksit <whinds...@proton.me>
+ */
+
+#pragma once
+
+EXTERN_C HRESULT SHELL_GetIDListFromObject(IUnknown *punk, PIDLIST_ABSOLUTE 
*ppidl);
+EXTERN_C BOOL SHELL_IsEqualAbsoluteID(PCIDLIST_ABSOLUTE a, PCIDLIST_ABSOLUTE 
b);
+EXTERN_C BOOL SHELL_IsVerb(IContextMenu *pcm, UINT_PTR idCmd, LPCWSTR Verb);
+EXTERN_C BOOL _ILIsDesktop(LPCITEMIDLIST pidl);
diff --git a/sdk/include/reactos/shdocvw_undoc.h 
b/sdk/include/reactos/shdocvw_undoc.h
new file mode 100644
index 00000000000..57e3ee8b9d7
--- /dev/null
+++ b/sdk/include/reactos/shdocvw_undoc.h
@@ -0,0 +1,22 @@
+/*
+ * PROJECT:     ReactOS Headers
+ * LICENSE:     LGPL-2.1-or-later (https://spdx.org/licenses/LGPL-2.1-or-later)
+ * PURPOSE:     shdocvw.dll undocumented APIs
+ * COPYRIGHT:   Copyright 2024 Katayama Hirofumi MZ 
<katayama.hirofumi...@gmail.com>
+ */
+
+#pragma once
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* defined(__cplusplus) */
+
+BOOL WINAPI
+IEILIsEqual(
+    _In_ LPCITEMIDLIST pidl1,
+    _In_ LPCITEMIDLIST pidl2,
+    _In_ BOOL bUnknown);
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif /* defined(__cplusplus) */

Reply via email to