+static inline HICON
+DoExtractIcon(PFOLDER_FILE_TYPE_ENTRY Entry, LPCWSTR IconPath,
+ INT iIndex = 0, BOOL bSmall = FALSE)
+{
+ HICON hIcon = NULL;
+
+ if (iIndex < 0)
+ {
+ // A negative value will be interpreted as a negated resource ID.
+ iIndex = -iIndex;
+
+ INT cx, cy;
+ HINSTANCE hDLL = LoadLibraryExW(IconPath, NULL, LOAD_LIBRARY_AS_DATAFILE);
+ if (bSmall)
+ {
+ cx = GetSystemMetrics(SM_CXSMICON);
+ cy = GetSystemMetrics(SM_CYSMICON);
+ }
+ else
+ {
+ cx = GetSystemMetrics(SM_CXICON);
+ cy = GetSystemMetrics(SM_CYICON);
+ }
+ hIcon = HICON(LoadImageW(hDLL, MAKEINTRESOURCEW(iIndex), IMAGE_ICON,
+ cx, cy, 0));
+ FreeLibrary(hDLL);
+ }
+ else
+ {
+ // A positive value is icon index.
+ if (bSmall)
+ ExtractIconExW(IconPath, iIndex, NULL, &hIcon, 1);
+ else
+ ExtractIconExW(IconPath, iIndex, &hIcon, NULL, 1);
+ }
+ return hIcon;
+}
+
+static void
+DoFileTypeIconLocation(PFOLDER_FILE_TYPE_ENTRY Entry, LPCWSTR IconLocation)
+{
+ // Expand the REG_EXPAND_SZ string by environment variables
+ WCHAR szLocation[MAX_PATH + 32];
+ if (!ExpandEnvironmentStringsW(IconLocation, szLocation, _countof(szLocation)))
+ {
+ return;
+ }
+
+ INT nIndex = PathParseIconLocationW(szLocation);
+ Entry->hIconLarge = DoExtractIcon(Entry, szLocation, nIndex, FALSE);
+ Entry->hIconSmall = DoExtractIcon(Entry, szLocation, nIndex, TRUE);
+}
+
+static BOOL
+GetFileTypeIconsEx(PFOLDER_FILE_TYPE_ENTRY Entry, LPCWSTR IconLocation)
+{
+ Entry->hIconLarge = Entry->hIconSmall = NULL;
+
+ if (lstrcmpiW(Entry->FileExtension, L".exe") == 0 ||
+ lstrcmpiW(Entry->FileExtension, L".scr") == 0)
+ {
+ // It's an executable
+ Entry->hIconLarge = LoadIconW(shell32_hInstance, MAKEINTRESOURCEW(IDI_SHELL_EXE));
+ Entry->hIconSmall = HICON(LoadImageW(shell32_hInstance, MAKEINTRESOURCEW(IDI_SHELL_EXE), IMAGE_ICON,
+ GetSystemMetrics(SM_CXSMICON), GetSystemMetrics(SM_CYSMICON), 0));
+ }
+ else if (lstrcmpW(IconLocation, L"%1") == 0)
+ {
+ return FALSE; // self icon
+ }
+ else
+ {
+ DoFileTypeIconLocation(Entry, IconLocation);
+ }
+
+ return Entry->hIconLarge && Entry->hIconSmall;
+}
+
+static BOOL
+GetFileTypeIconsByKey(HKEY hKey, PFOLDER_FILE_TYPE_ENTRY Entry)
+{
+ Entry->hIconLarge = Entry->hIconSmall = NULL;
+
+ // Open the "DefaultIcon" registry key
+ HKEY hDefIconKey;
+ LONG nResult = RegOpenKeyExW(hKey, L"DefaultIcon", 0, KEY_READ, &hDefIconKey);
+ if (nResult != ERROR_SUCCESS)
+ return FALSE;
+
+ // Get the icon location
+ WCHAR szLocation[MAX_PATH + 32] = { 0 };
+ DWORD dwSize = sizeof(szLocation);
+ nResult = RegQueryValueExW(hDefIconKey, NULL, NULL, NULL, LPBYTE(szLocation), &dwSize);
+
+ RegCloseKey(hDefIconKey);
+
+ if (nResult != ERROR_SUCCESS || szLocation[0] == 0)
+ return FALSE;
+
+ return GetFileTypeIconsEx(Entry, szLocation);
+}
+
+static BOOL
+QueryFileDescription(LPCWSTR ProgramPath, LPWSTR pszName, INT cchName)
+{
+ SHFILEINFOW FileInfo = { 0 };
+ if (SHGetFileInfoW(ProgramPath, 0, &FileInfo, sizeof(FileInfo), SHGFI_DISPLAYNAME))
+ {
+ StringCchCopyW(pszName, cchName, FileInfo.szDisplayName);
+ return TRUE;
+ }
+
+ return !!GetFileTitleW(ProgramPath, pszName, cchName);
+}
+
+static BOOL
+InsertFileType(HWND hListView, LPCWSTR szName, INT iItem, LPCWSTR szFile)