Почему некоторые исполняемые файлы не могут увидеть все файлы в System32?

Вопрос или проблема

Я только что обнаружил механизм в Windows 10, о котором ранее не знал. У меня установлены две среды Python на системе. Обе являются установками пользователя (их исполняемые файлы находятся в AppData).

Я попытался запустить программу в папке system32 (через subprocess.Popen) и обнаружил, что мой скрипт не может её найти. Затем я попытался перечислить всю папку разными методами и обнаружил, что около половины исполняемых файлов скрыты (хотя они существуют). Метод, которым я перечисляю содержимое директории (будь то cmd /k dir ... или powershell -Command Get-ChildItem ... или их прямое выполнение), не имеет значения, файлы остаются скрытыми, когда я пытаюсь получить к ним доступ через свою среду python3.12.

Забавно, но при использовании среды python3.11 (также установка пользователя) я не сталкиваюсь ни с одной из этих проблем.

Здесь вы можете увидеть сравнение diff, где указано, какие исполняемые файлы скрыты в моей установке python 3.12. (Создано с помощью powershell -Command Get-ChildItem -Name C:\Windows\System32\*.exe).

Кто-нибудь знает, какой механизм может здесь действовать?

Ответ или решение

Вопрос о том, почему определенные исполняемые файлы не видны во всех сценариях в папке System32 в Windows 10, требует глубокого понимания того, как Windows управляет файлами и привилегиями пользователей. Поняв это, можно объяснить наблюдаемую проблему с двумя средами Python и их различное поведение при доступе к файлам в System32.

Теория

Windows 10 использует механизмы безопасности, такие как контроль учетных записей пользователей (UAC) и виртуализацию файловой системы (File System Redirection), для защиты критически важных системных файлов и папок. Папка System32 является стандартным каталогом для системных файлов, необходимых для корректной работы операционной системы. Однако важно отметить, что фактическая папка System32 используется 64-битными версиями Windows для размещения 64-битных библиотек DLL и исполняемых файлов. В то же время, для 32-битных приложений, работающих на 64-битной версии Windows, используется "перенаправление" на папку SysWOW64. Это поведение указывает операционной системе, что приложение, когда просит необходимые системные файлы, будет получать их из папки SysWOW64, даже если оно пытается получить к ним доступ напрямую по пути System32.

Пример

Представим, у вас есть две версии Python – 3.11 и 3.12, обе установлены в папке AppData и поэтому работают в контексте пользователя, а не системы. Если ваша среда Python 3.12 каким-то образом интерпретируется как 32-битное приложение, она будет подвержена перенаправлению файловой системы. Таким образом, процедуры, которые пытаются получить доступ к папке System32, фактически обращаются к папке SysWOW64. Это может объяснить, почему часть исполняемых файлов недоступна: многие из них могут быть специфичными только для 64-битной среды, и, следовательно, они просто отсутствуют в 32-битной SysWOW64.

Применение

Чтобы применить данное понимание, вы можете подтвердить, какая версия среды Python (в 32-битной или 64-битной версии) вызывает проблему. Запустите команду platform.architecture() в обоих окружениях Python. Это поможет определить, переадресуются ли ваши команды Python в SysWOW64. Если отличия выявлены, попробуйте следующее для решения проблемы:

  1. Удостоверьтесь, что вашу среду Python установлена как 64-битный интерпретатор: Переустановите вашу Python 3.12 уверившись, что выбрана 64-битная версия. Это должно установить правильное соответствие между архитектурой приложения и системой операционной системы.

  2. Используйте абсолютные пути: Чтобы обойти механизм перенаправления, можно использовать абсолютные пути, которые указывают прямо на исполняемые файлы в нужной папке, избегая автоматического перенаправления.

  3. Запустите Python с повышенными привилегиями: Иногда доступны исполняемые файлы могут быть ограничены политикой безопасности учетных записей пользователя. Попробуйте запустить ваш Python интерпретатор как администратор.

Надеюсь, вышеупомянутые шаги и понимание помогут вам лучше разобраться в проблеме и успешно внедрить решения. Глубокое понимание системных операций и архитектурных различий 32-битных и 64-битных систем имеет решающее значение для управления и эффективного использования ресурсов Windows, особенно при работе с системой безопасности и привилегиями.

Оцените материал
Добавить комментарий

Капча загружается...