reactos/dll/win32
Oleg Dubinskiy f9a5344254
[SHELL32] Allow using custom desktop/folders/drives icons (#6421)
Implement proper reading the current user's icons from registry.

CORE-14758

- Load the icons specified by user in registry in the following keys:
  "HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CLSID\{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}\DefaultIcon"
  (virtual namespace folders)
  "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Icons"
  (filesystem folders and drives)
- Implement two functions HCU/HLM_GetIconW for reading the icons
  from mentioned HKCU and HKLM keys accordingly.
- Use HCR_RegGetIconW for falling back to default icons.
  This function always loads only default icons, even when
  the custom ones are specified by user.
- Refactor SIC_LoadOverlayIcon to use newly implemented HLM_GetIconW.

These changes apply to:
- virtual namespace folders and other desktop items (like My Computer,
  My Documents, Network Places, Recycle Bin, Web Browser (aka Internet
  Explorer), Control Panel and some of its items);
- normal filesystem directories;
- all types of drives (fixed disk drives, removable drives, CD-ROMs,
  RamDisks and network drives). Handle invalid drives, setting blank
  icon for them, since they cannot be recognized or mounted correctly.
  Also, load the autorun icons first to avoid overriding them by the
  icons defined in registry.

I've rechecked twice: excluding Start Menu icons, Desktop Workspace icon
and some FS folder icons that have their own desktop.ini configuration
files (we probably should write the custom icons we load to these configs,
as Windows does it, perhaps with WritePrivateProfileStringW), all other
icons can be changed now (only ones that can be changed on XP SP3 / 2003
SP2) via built-in system tools (like Desktop icons in desk.cpl) or any
3rd-party tools without modifying system resources.

Also all icons for the known file types can be changed,
same as before my changes.

Regarding Start Menu icons:
- changing them should be correctly implemented in explorer
  instead of shell32, as the former is responsible for the Start Menu
  and partially for the taskbar;
- in order to actually use all of them, we need to implement modern
  Start Menu first.

Useful reference: http://www.winfaq.de/faq_html/Content/tip0000/onlinefaq.php?h=tip0162.htm
2024-02-29 00:20:47 +03:00
..
acledit [ACLEDIT][MSIMG32][HIDCLASS] Fix DLL-main function argument type in spec file. 2022-10-06 16:16:40 +02:00
aclui [ACLUI] Let image list be automatically deleted (#5890) 2023-11-05 21:36:05 +09:00
activeds
actxprxy
advapi32 [ADVAPI32][IDL][SERVICES] Implement I_ScValidatePnPService 2023-12-31 15:33:19 +01:00
advapi32_vista [SERVICES] Use RegCopyTreeW from advapi32_vista 2023-12-18 23:14:14 +02:00
advpack [ADVPACK] Handle ADN_DEL_IF_EMPTY in DelNodeW and DelNodeRunDLL32 (#5821) 2023-11-13 16:42:26 +01:00
atl
atl80
atl100
authz
avicap32
avifil32
batt [BATT] Add the composite battery installer 2022-04-25 23:33:51 +02:00
bcrypt
beepmidi [BEEPMIDI] Make DeviceInfo structure 64 bit compatible 2023-01-04 10:32:28 +01:00
browseui [BROWSEUI] Implement 'Add to Favorites' (#6543) 2024-02-27 19:55:57 +09:00
bthci
cabinet
cards
cfgmgr32
clusapi
comcat
comctl32 [REACTOS] Standardize <imm.h> and <immdev.h> (#6493) 2024-02-13 20:33:14 +09:00
comdlg32 [COMDLG32] Update Romanian (ro-RO) translation (#6485) 2024-02-11 23:30:42 +01:00
compstui
credui
crtdll
crypt32 [TRANSLATION] Update Bulgarian translation (#4429) 2022-09-30 18:08:13 +02:00
cryptdlg
cryptdll
cryptnet
cryptui [CRYPTUI] Update Romanian (ro-RO) translation (#6487) 2024-02-12 18:10:25 +01:00
dbgeng
dbghelp [DBGHELP] Avoid call of wine_get_dos_file_name 2024-02-20 08:56:53 +01:00
dciman32
devmgr [DEVMGR] Fix diagnostic message when device is failing with CM_PROB_FAILED_ADD 2024-02-01 09:57:02 +01:00
dnsapi [DNSAPI] DNSRSLVR_HANDLE_bind(): Demote 1 DPRINT1() (#4733) 2022-09-28 22:38:35 +03:00
dwmapi [WINESYNC][SDK][DWMAPI] Import DWMAPI from WINE 8-14 (#5594) 2023-09-18 07:30:44 -07:00
esent
faultrep
fltlib
fmifs
fontsub
framedyn [FRAMEDYN] Do not define GCC <-> MSVC aliases when building the DLL 2023-07-23 23:58:42 +02:00
fusion [FUSION] Provide baseaddress for fusion_1_1 and fusion_2_0 2023-11-10 19:20:24 +02:00
gdiplus
getuname [GETUNAME] Build only english on DBG builds (#5670) 2023-09-10 14:43:41 +03:00
hhctrl.ocx [HHCTRL.OCX] Reduce ROS diff 2023-04-16 18:53:19 +02:00
hid
hlink
hnetcfg
httpapi
iccvid [ICCVID][MSRLE32][MSVIDC32] Add VfW codecs version info (#6118) 2023-12-10 06:50:58 +09:00
icmp
ieframe [IEFRAME] Update Romanian (ro-RO) translation (#5923) 2023-11-08 20:07:04 +01:00
iernonce [IERNONCE] Update Romanian (ro-RO) translation (#6126) 2023-12-09 20:00:40 +01:00
imaadp32.acm
imagehlp
imm32 [REACTOS] Standardize <imm.h> and <immdev.h> (#6493) 2024-02-13 20:33:14 +09:00
inetcomm
inetmib1
initpki
inseng
iologmsg
iphlpapi [IPHLPAPI] Silence obsolete FIXME in GetAdaptersAddresses (#5834) 2023-10-26 16:45:44 +00:00
iprtprio
itircl
itss
jscript [TRANSLATION] Big Romanian (ro-RO) translation update - part 1 (#4701) 2022-10-09 14:00:20 +03:00
jsproxy
kernel32 [KERNEL32] OpenFile(): Use InitializeObjectAttributes (#6323) 2024-01-11 12:31:12 +01:00
loadperf
lpk [IMM32][LPK] Remove msvcrt dependency; fix entrypoint. (#4759) 2022-10-06 15:52:20 +02:00
lsasrv [LSASRV] Update Romanian (ro-RO) translation (#6380) 2024-01-21 22:08:19 +01:00
lz32
mapi32 [REACTOS] Fix typos (#6198) 2023-12-23 21:37:08 +01:00
mciavi32 [MCIAVI32] Add ifdef guards to prevent regression (#5090) 2023-02-20 20:23:37 +01:00
mcicda
mciqtz32
mciseq
mciwave
mgmtapi
mlang
mmdevapi
mmdrv
modemui [MODEMUI] Update Romanian (ro-RO) translation (#6300) 2024-01-09 11:03:12 +01:00
mpr [MPR] Update Romanian (ro-RO) translation (#5990) 2023-11-18 22:39:02 +01:00
mprapi
msacm32 [MSACM32] Update Romanian (ro-RO) translation (#5999) 2023-11-19 16:37:43 +01:00
msacm32.drv
msadp32.acm
msafd [MSAFD] Fix non-blocking sockets support for recv() (#5575) CORE-14486 2023-08-17 23:13:13 +02:00
mscat32 [MSCAT32] Convert stubs into forwarders 2023-08-05 09:00:13 +03:00
mscms
mscoree
msctf [CTFMON][MSCTFIME][MSCTF][MSUTB][CICERO] Fix TFUninitLib (#6504) 2024-02-20 14:36:24 +09:00
msftedit
msg711.acm
msgina 🎊 🍾 🥳 Happy New Year 2024 to the ReactOS Community! 🎆 ⚛️ ☢️ 2024-01-01 00:00:00 +01:00
msgsm32.acm
mshtml Fix Wine Internet Explorer Print hang (#5064) 2023-02-12 19:17:55 +01:00
mshtml.tlb
msi [MSI] Update Romanian (ro-RO) translation (#6429) 2024-02-11 22:51:15 +01:00
msimg32 [ACLEDIT][MSIMG32][HIDCLASS] Fix DLL-main function argument type in spec file. 2022-10-06 16:16:40 +02:00
msimtf
msisip
msisys.ocx
msnet32
mspatcha
msports [MSPORTS] Update Romanian (ro-RO) translation (#6256) 2024-01-06 22:26:42 +01:00
msrle32 [ICCVID][MSRLE32][MSVIDC32] Add VfW codecs version info (#6118) 2023-12-10 06:50:58 +09:00
mssign32
mssip32
mstask
msutb [CTFMON][MSCTFIME][MSCTF][MSUTB][CICERO] Fix TFUninitLib (#6504) 2024-02-20 14:36:24 +09:00
msv1_0 [REACTOS] Add '\n' to debug logs 2022-05-04 03:28:38 +03:00
msvcrt [CRT] Sync $I10_OUTPUT and test with wine head 2023-12-30 12:51:22 +02:00
msvcrt20 [CRT] Sync $I10_OUTPUT and test with wine head 2023-12-30 12:51:22 +02:00
msvcrt40 [CRT] Sync $I10_OUTPUT and test with wine head 2023-12-30 12:51:22 +02:00
msvfw32
msvidc32 [MSVIDC32] Keep using CRAM_MAGIC for info structure validation (#6498) 2024-02-15 17:08:47 +04:00
mswsock [SDK:REACTOS][SVCHOST] Add/complete all missing definitions in the SVCHOST global header. (#4295) 2022-04-01 04:55:31 +02:00
msxml
msxml2
msxml3 [MSXML3][MSXML3_WINETEST] Partial sync to Wine to enable libxml2 update. CORE-17766 2022-11-23 22:02:47 -05:00
msxml3r
msxml4
msxml6
mycomput [TRANSLATION] Update Hong Kong Chinese (zh-HK) translation - Part 2 (#4347) 2022-03-31 17:10:21 +03:00
nddeapi
netapi32 [NETAPI32] NetSessionEnum: UncClientName and username are optional 2022-05-07 16:54:04 +02:00
netcfgx [NETCFGX] Create only one "Alternative Configuration" tab 2023-12-17 21:50:20 +01:00
netevent
netid [TRANSLATION] Update and fix Bulgarian (bg-BG) translation (#5581) 2023-12-21 18:09:34 +01:00
netmsg
newdev [NEWDEV] Update Romanian (ro-RO) translation (#6457) 2024-02-11 23:12:49 +01:00
npptools
ntdsapi
ntlanman
ntmarta
objsel
odbc32
odbccp32
ole32
oleacc [OLEACC] Update Romanian (ro-RO) translation (#6438) 2024-02-11 22:59:02 +01:00
oleaut32 [OLEAUT32] OaBuildVersion: Add Windows Server 2003 case (#5004) 2023-01-22 21:34:54 +03:00
olecli32
oledlg [OLEDLG] Update Romanian (ro-RO) translation (#6293) 2024-01-09 11:05:31 +01:00
olepro32
olesvr32
olethk32
pdh
pidgen
powrprof [POWRPROF] Create a security descriptor for power management semaphore 2022-05-06 10:09:51 +02:00
profmap [REACTOS] Update email in all my copyrights (#4415) 2022-03-31 01:53:30 +02:00
propsys
psapi [PSAPI] Don't make the dll depend on MSVCRT 2024-02-22 22:41:04 +01:00
pstorec
qmgr
qmgrprxy
query
rasadhlp
rasapi32
rasdlg [RASDLG] Update Romanian (ro-RO) translation (#6483) 2024-02-12 17:58:22 +01:00
rasman
regapi
resutils
riched20 [REACTOS] Standardize <imm.h> and <immdev.h> (#6493) 2024-02-13 20:33:14 +09:00
riched32
rpcrt4 [RPCRT4] Fix x64 assembly code 2023-09-23 11:06:24 +03:00
rsabase
rsaenh
samlib [REACTOS] Add '\n' to debug logs 2022-05-04 03:28:38 +03:00
samsrv [SAMSRV] Update Romanian (ro-RO) translation (#6381) 2024-01-21 22:07:35 +01:00
sccbase
schannel
scrrun
secur32 [SECUR32] Do not declare global variables in a header 2022-04-26 03:38:38 +03:00
security
sensapi
serialui [REACTOS] "http://www.reactos" -> "https://reactos" (#5043) 2023-02-06 17:01:52 +03:00
setupapi [SETUPAPI] Update Romanian (ro-RO) translation (#6396) 2024-01-21 21:07:06 +01:00
sfc
sfc_os
sfcfiles
shdoclc [SHDOCLC] Update Romanian (ro-RO) translation (#6357) 2024-01-15 22:15:57 +01:00
shdocvw [SHDOCVW][SHDOCVW_APITEST] Implement MRU List for Shell Bag, Part 6 (#5699) 2023-09-18 20:13:29 +09:00
shell32 [SHELL32] Allow using custom desktop/folders/drives icons (#6421) 2024-02-29 00:20:47 +03:00
shfolder
shimgvw [SHIMGVW] Update Romanian (ro-RO) translation (#6356) 2024-01-15 22:19:09 +01:00
shlwapi [SHLWAPI] Fix SHCreateMemStream corner case (#6224) 2023-12-25 08:22:08 +09:00
slbcsp
sndblst
snmpapi
softpub
srclient
stdole2.tlb
stdole32.tlb
sti
storprop
streamci
sxs
syssetup [SYSSETUP] Update Romanian (ro-RO) translation (#6475) 2024-02-11 23:15:44 +01:00
t2embed [T2EMBED] Improve spec file 2023-10-09 02:34:30 +03:00
tapi32
tapiui [TAPIUI] Improve Romanian (ro-RO) translation (#6124) 2023-12-09 20:01:57 +01:00
themeui [THEMEUI] Fix Japanese translation (ja-JP) as UTF-8 2023-07-04 19:35:31 +09:00
traffic
twain_32 [TWAIN_32] Global variable compatibility update for gcc 10. 2022-04-26 03:38:38 +03:00
ubtrfs [BTRFS][UBTRFS][SHELLBTRFS] Upgrade to 1.8.1 (#4729) 2022-09-28 18:08:10 +02:00
ucdfs
uext2
ufat
ufatx
untfs
updspapi
url [URL] Add icon resource for .url files (#6081) 2023-12-02 12:38:09 +01:00
urlmon [INF] Update Romanian (ro-RO) translation (#6359) 2024-01-21 22:25:00 +01:00
userenv [USERENV] Update Romanian (ro-RO) translation (#6389) 2024-01-21 21:56:37 +01:00
usp10
uxtheme [UXTHEME] Add Ukrainian (uk-UA) translation (#6502) 2024-02-16 22:50:13 +03:00
vbscript
verifier [NTDLL:LDR] SAL improvements and fixes 2023-10-04 12:26:18 +03:00
version
vssapi
wbemdisp
wbemprox [WBEMPROX] Global variable compatibility update for gcc 10. 2022-04-26 03:38:38 +03:00
wdmaud.drv
windowscodecs
windowscodecsext
winemp3.acm
winfax
wing32
winhttp [WINHTTP] Fix 1 MSVC x86 warning LNK4199 (#4414) CORE-18104 2022-04-07 00:36:52 +02:00
wininet [WININET] Update Romanian (ro-RO) translation (#5992) 2023-11-18 22:41:25 +01:00
winmm [WINMM] Update Romanian (ro-RO) translation (#6376) 2024-01-21 22:11:26 +01:00
winscard
winsta
wintrust
wlanapi
wldap32 [WLDAP32] Improve Romanian (ro-RO) translation (#6275) 2024-01-09 11:11:04 +01:00
wlnotify
wmi
wmiutils
wmvcore
ws2_32 [WS2_32] Fix Two DPRINT typo errors (#5113) 2023-03-06 12:22:28 +01:00
ws2help [WS2HELP] Add ws2help.rc to CMakeLists (#6055) 2023-11-29 07:03:28 +07:00
wshirda
wshom.ocx [WSHOM.OCX] WshShell::Run intWindowStyle parameter is optional (#6180) 2023-12-23 21:27:00 +01:00
wshtcpip [WSHTCPIP] Remove unneeded headers + Fix bugs. 2023-10-08 17:11:26 +02:00
wsock32
wtsapi32
wuapi
xinput1_1
xinput1_2
xinput1_3
xinput9_1_0
xmllite
xolehlp
CMakeLists.txt [CTFMON][MSCTF][MSUTB][SDK] Add msutb.dll (stub) (#6222) 2023-12-25 22:29:57 +09:00