Skip to content

About

Lightweight Windows tool that shows Everything-indexed folder sizes in File Explorer native Size column.

Topics

Resources

Security policy

Stars

2 stars

Watchers

0 watching

Forks

Repository files navigation

Everything Folder Size Column

Affiche la taille des dossiers dans la colonne native Taille de l’Explorateur Windows, en utilisant l’index local d’Everything plutôt qu’un parcours récursif du disque.

Statut : 0.2.0-rc.2 est une préversion publique. Le build, les tests unitaires et le paquet sont automatisés. L’installation persistante, l’affichage de 64 tailles et l’ouverture d’un second processus Explorer ont été acceptés sur Windows 11. Une release stable demande encore une validation sur un Windows propre.

English quick overview

This lightweight Windows tool shows folder sizes in File Explorer’s native Size column by querying Everything’s local index. It never scans folders recursively. Its low-priority worker, bounded caches and event-driven Explorer watcher are designed to stay idle when there is no work. The current-user installer needs no administrator rights; see INSTALL.md.

The current release candidate is unsigned and relies on an internal Windows symbol, so it should be treated as a preview and revalidated after major Windows updates.

Pourquoi un hook natif ?

IColumnProvider n’est plus pris en charge depuis Windows Vista et un PropertyHandler ne remplace pas de façon fiable System.Size pour les dossiers dans l’Explorateur moderne. Le produit limite donc son hook au seul processus explorer.exe.

Il ne se charge pas dans PowerShell, Node.js, les services audio ou les autres applications.

Fonctionnement

Le paquet installe trois fichiers dans %LOCALAPPDATA%\EverythingFolderSizeColumn :

  • EverythingFolderSizeNativeHook.dll : remplit la taille native des dossiers ;
  • EverythingFolderSizeHookLoader.exe : injecte le hook dans chaque processus Explorer éligible, attend un signal de disponibilité explicite, puis surveille sans polling les redémarrages et les nouvelles fenêtres de dossiers ;
  • EverythingFolderSizeColumnInstaller.exe : installe, met à jour et désinstalle le produit pour l’utilisateur courant.

Le chemin chaud reste borné :

  • aucune mesure récursive du système de fichiers ;
  • un manque dans le cache retourne immédiatement une valeur vide et rejoint une file de fond limitée à 512 dossiers ;
  • un seul thread de priorité basse interroge Everything, puis demande à l’Explorateur de rafraîchir le dossier concerné ;
  • cache insensible à la casse limité à 2 048 dossiers ;
  • cache de succès de 60 s et cache d’échec de 2 s ;
  • une seule requête IPC en vol pour éviter les rafales ;
  • une panne globale d’Everything vide la file en attente et applique un recul de 2 s au lieu d’accumuler les délais ;
  • logs rotatifs limités à 256 Kio chacun.

Le démarrage est lui aussi borné. Le module chargé ne vaut pas « prêt » : la DLL doit terminer la résolution du symbole et l’installation du hook, signaler Ready, puis recevoir l’acquittement Accepted du loader. Un échec, une expiration ou un arrêt avant cet acquittement déclenche le retrait du hook. Une fois Accepted choisi, cette décision est terminale pour le processus Explorer concerné. Après l’initialisation, aucun thread de contrôle ne persiste dans l’Explorateur ; quatre handles d’événement légers restent ouverts pour la durée du processus.

Everything 1.4 et 1.5 utilisent l’IPC local WM_COPYDATA. Une échéance unique borne l’attente du verrou, l’envoi et la réponse dans le worker ; le fil d’interface de l’Explorateur ne l’attend jamais.

Prérequis

  • Windows 10 ou Windows 11, 64 bits ;
  • Everything lancé et configuré pour indexer la taille des dossiers ;
  • pour compiler : Visual Studio Build Tools C++ et CMake.

Limites connues

La taille apparaît pour les dossiers physiques dont Everything connaît la taille. Elle reste vide pour les emplacements virtuels de l’Explorateur, les archives ouvertes comme des dossiers, les chemins exclus ou non indexés, les fichiers cloud hors ligne et les chemins réseau/UNC.

Lors du premier affichage d’un dossier, un manque de cache peut laisser la cellule vide un court instant. La requête part alors sur le worker de priorité basse et l’Explorateur est rafraîchi après la réponse d’Everything. Une cellule qui reste vide doit d’abord être vérifiée directement dans Everything.

Au premier chargement sur une nouvelle version de Windows, le hook peut télécharger le PDB public de Windows.Storage.dll depuis le serveur de symboles Microsoft. Les chemins et tailles de dossiers restent locaux.

Compiler et tester

pwsh -NoProfile -File scripts/build.ps1

Le script compile le hook natif et lance les tests hors Explorateur : validation du vrai chemin système d’Explorer, cache négatif, panne fournisseur, capacité, file asynchrone, concurrence, protocole Ready/Accepted et chemins de timeout du banc sous Windows PowerShell 5.1. Le build normal force aussi le délai d’injection réservé aux tests à OFF, même si un ancien cache CMake l’avait activé.

Si le checkout est trop profond pour les fichiers internes de MSBuild, le script choisit automatiquement un cache de build court sous %LOCALAPPDATA%\EverythingFolderSizeColumnDevCache\build. Le paramètre -BuildRoot permet de choisir un autre emplacement.

Ce cache de compilation est distinct du produit installé. Il peut être inspecté puis supprimé explicitement :

pwsh -NoProfile -File scripts/clean-dev-cache.ps1
pwsh -NoProfile -File scripts/clean-dev-cache.ps1 -Apply

Test direct de l’IPC Everything :

build\Release\everything_size_probe.exe "$env:USERPROFILE\Documents"

Préparer l’acceptation dans une VM

Par défaut, le banc ne modifie ni le produit ni la configuration système :

pwsh -NoProfile -File scripts/test-vm-acceptance.ps1 -Phase Preview

Cette prévisualisation écrit seulement ses preuves, crée puis retire des fichiers temporaires de vérification et lance le test négatif de l’installateur.

Les phases Prepare, Execute et Complete refusent de démarrer sans les trois preuves suivantes : -Apply, confirmation explicite d’une VM jetable et nom exact de la machine. Elles refusent aussi un modèle matériel qui ne correspond pas à une VM connue. Prepare exige en plus la référence de l’instantané ou du lancement neuf de Windows Sandbox.

Pour le test d’arrêt pendant une injection volontairement lente, produire un loader séparé qui ne sera jamais empaqueté :

cmake -S . -B build-vm-acceptance -A x64 `
  -DEFSC_BUILD_NATIVE_HOOK=ON `
  -DBUILD_TESTING=ON `
  -DEFSC_ENABLE_TEST_INJECTION_DELAY=ON
cmake --build build-vm-acceptance --config Release `
  --target EverythingFolderSizeHookLoader everything_size_probe

Le résultat reste releasePass: false tant qu’une personne n’a pas relu la capture de la colonne native Taille. Un fichier de capture et un module chargé sont des preuves à examiner, pas une validation visuelle automatique. Le parcours complet est décrit dans docs/vm-acceptance.md.

Produire le ZIP

pwsh -NoProfile -File scripts/package-release.ps1

Le ZIP contient l’installateur, le hook, son watcher, les deux commandes d’installation/désinstallation, les licences, la documentation et un manifeste SHA-256 par fichier. FolderSizeColumn.dll, ancien diagnostic COM, n’est pas distribué.

Installer et désinstaller

Depuis le ZIP extrait :

install-current-user.cmd
uninstall-current-user.cmd

L’installation et la désinstallation redémarrent automatiquement l’Explorateur afin de ne jamais décharger à chaud une DLL en cours d’exécution. Le produit ajoute une entrée de démarrage utilisateur pour son watcher léger, mais aucun service, aucune nouvelle tâche planifiée et aucun droit administrateur. Une ancienne tâche du prototype est migrée seulement après vérification de sa signature complète ; une tâche homonyme étrangère reste intacte.

Avant d’annoncer le succès, l’installateur exécute un contrôle ponctuel et attend que le hook soit réellement prêt. Ce contrôle n’ajoute aucune charge permanente. S’il échoue, les fichiers restent désinstallables et le message renvoie vers les journaux au lieu de présenter une installation partielle comme fonctionnelle. Le contrôle reprend aussi un instantané neuf des processus Explorer : le premier PID transitoire créé pendant un redémarrage ne peut donc pas produire un faux succès si le shell le remplace immédiatement. La comparaison utilise le PID et l’heure de création du processus, pas le PID seul. L’inventaire des modules est également réessayé pendant au plus 175 ms : une mise à jour rapide ne peut pas annuler un hook accepté sur la seule base d’un instantané Toolhelp transitoire. Si l’inventaire reste non concluant, la tentative échoue sans modifier l’état terminal Accepted. Cette attente n’existe que pendant l’installation ou la réinjection.

La désinstallation est aussi disponible dans Paramètres > Applications > Applications installées.

Limites du candidat

  • le hook dépend d’un symbole interne de Windows et doit être revalidé après une mise à jour importante de Windows ;
  • les binaires locaux ne sont pas signés et peuvent déclencher SmartScreen ;
  • la preuve live finale doit couvrir stabilité de l’Explorateur, charge, redémarrage d’Everything, mise à jour et désinstallation dans une VM propre.

Voir INSTALL.md, docs/architecture.md et SECURITY.md.

Licence et attribution

Le projet est distribué sous GNU GPL v3.0. Il s’appuie sur des idées et du code adapté du mod Better file sizes in Explorer details de m417z. Les modifications, l’indépendance du projet et les licences tierces sont détaillées dans NOTICE.md. MinHook conserve sa licence BSD 2-Clause.

About

Lightweight Windows tool that shows Everything-indexed folder sizes in File Explorer native Size column.

Topics

Resources

Security policy

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages