Un utilisateur de DriveSort m'a remonté ne pas arriver à trier son disque de 2TO ce qui est un effet intéressant de la loi de Moore appliquée au stockage, ce programme ayant été initialement conçu pour trier des clefs USB de 128MB-256MB.
Après investigation, lorsque la taille d'une partition FAT-32 à trier dépasse quelque centaines de giga-octets les drivers de système de fichier de Windows deviennent plus récalcitrant à permettre l'écriture directe sur le disque aux programmes vu que des volumes de telle taille dépassent les recommandations de Microsoft concernant le formattage FAT-32 et de nombreux programmes ne sont pas conçus pour tolérer ces excès.
Dans ces conditions la lecture directe depuis le disque reste possible pour tous les programmes pré-existants, mais si un programme souhaite écrire directement dans les parties du disque réservées aux structures du système de fichier il doit prendre quelques mesures en plus pour signaler a Windows qu'il est pret a gérer les formattage FAT-32 dépassant les limites recommandées.
J'ai donc modifié DriveSort pour qu'il gère correctement ces grand volumes en:
- Désactivant les caches lors de l'ouverture du disque (FILE_FLAG_NO_BUFFERING)
- Utilisant une opération permettant de déleguer les controles de bornes de lecture et écriture au périphérique plutôt que de laisser le pilote de système de fichier FAT le faire (FSCTL_ALLOW_EXTENDED_DASD_IO)
- Alignant les tampons de lecture et écriture sur des adresses mémoires multiples de la taille d'un secteur en utilisant VirtualAlloc plutot que des allocations standard
Ces évolutions ont aussi été appliquées aux fonctions de sauvegarde et restoration du menu contextuel dans l'arbre des volumes du dialogue d'ouverture de disque, on peut donc maintenant travailler sur des disques de la taille maximum possible pour FAT-32 (2TO) sans problème.
Vu que mon ancien compilateur était vraiment dépassé (VC++6), j'ai du migrer les sources DriveSort pour être compatibles avec VisualStudio 2017, mais j'ai continué de viser la version de Windows la plus ancienne supportée par cet outil (Windows XP).
Pour que DriveSort puisse fonctionner sur les anciennes versions de Windows, il sera donc peut être nécessaire d'installer les nouveaux composants redistribuables pour Visual C++ (vc_redist.x86.exe dans les derniers téléchargements de Visual C supportés, [ Lien de Téléchargement Direct ]).
Les programmes compilés par cette version de Visual C++ requierent en effet la présence de certaines DLLs qui ne sont pas systématiquement fournies via Windows Update (mfc140u.dll, et les DLLs de la runtime C universelle nommées api-ms-win-crt-*.dll), mais d'après Microsoft le package VCRedist à l'air de faire le nécessaire pour installer tout ça la ou il faut.
Si vous rencontrez des problèmes pour lancer DriveSort, n'hésitez pas a me contacter.