Это из-за 32-битных приложений, работающих в 64-битной Windows, и из-за того, как Windows обрабатывает папку System32 для этих программ.
Некоторое время это также сводило меня с ума, потому что я не мог понять, почему определенные файлы в System32 (а именно .dlls и .exes) возвращали разные хэши в зависимости от того, с чем я их проверял.
Используя HxD и Firefox для загрузки файла и проверки его хэша, я получил разные результаты по сравнению с с помощью средства проверки хэша QTTabBar, которое выполняется внутри explorer.exe.
Но если бы я скопировал один из этих файлов в другое место, то получил бы одинаковые результаты для всех программ.
Между тем, HxD показал разную длину скопированного файла по сравнению с файлом в System32, и, хотя оба они показали одинаковое распределение байтов, также были существенные различия.
Но потом я подумал попробовать то же самое в другой папке и, наконец, взломал ее с небольшой помощью Википедии :
Операционная система использует каталог % SystemRoot% \ System32 для своей 64-разрядной библиотеки и исполняемых файлов. Это сделано по причинам обратной совместимости, поскольку многие устаревшие приложения жестко запрограммированы для использования этого пути. При выполнении 32-битных приложений WoW64 прозрачно перенаправляет 32-битные библиотеки DLL в папку % SystemRoot% \ SysWOW64, которая содержит 32-битные библиотеки и исполняемые файлы.
32-битные приложения обычно не знают, что они работают в 64-битной операционной системе. 32-разрядные приложения могут получить доступ к % SystemRoot% \ System32 через псевдокаталог % SystemRoot% \ Sysnative.
Поскольку HxD и Firefox (и большинство других браузеров) являются 32-разрядными приложениями, когда вы загружаете в них файл, Windows фактически прозрачно перенаправляет их в файл с тем же именем в папке SysWOW64 (предположительно, если вы запускали 64-разрядную версию). bit-браузер, вы не столкнетесь с этой проблемой).
Точно так же, когда вы копируете файл из System32 в другое место, explorer.exe, будучи 64-битным процессом, копирует исходный файл System32, а не его эквивалент (со странным названием) SysWOW64.
Итак, как говорится в вики, если вы введете %SystemRoot%\Sysnative
в путь к диалогу открытия файла в вашем 32-битном приложении, оно должно загрузить файл из реальной папки System32 и дать вам правильный результат.
И если вы проверите файлы в каталоге SysWOW64, все файлы должны возвращать одинаковые соответствующие хэши, независимо от того, чем вы их открываете.
Дальнейшее чтение:
person
hair pin
schedule
04.12.2015