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.2est 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.
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.
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.
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.
- 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.
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.
pwsh -NoProfile -File scripts/build.ps1Le 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 -ApplyTest direct de l’IPC Everything :
build\Release\everything_size_probe.exe "$env:USERPROFILE\Documents"Par défaut, le banc ne modifie ni le produit ni la configuration système :
pwsh -NoProfile -File scripts/test-vm-acceptance.ps1 -Phase PreviewCette 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_probeLe 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.
pwsh -NoProfile -File scripts/package-release.ps1Le 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é.
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.
- 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.
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.