Ответы пользователя по тегу Операционные системы
  • Что такое расширение файла на системном уровне?

    @UndefinedBehaivor
    Там просто расширения ассоциируются через реестр. При двойном клике например передается управление в shell32.dll!ShellExecute оттуда идет парсинг расширения, после расширение ищется из ассоциированных и врубается соответствующая программа. Например, для .txt - по дефолту notepad.exe, тогда врубается notepad.exe file.txt, можно поставить собственный софт и будет врубаться он.

    Кстати, по этому принципу можешь сделать свой проводник. Берешь убиваешь основной, свой ставишь в авторан, при старте прогружаешь все с авторана через ShellExecute ( парсишь реестр ветки Run/RunOnce, после из RunOnce удаляешь ), потом парсишь десктоп и отрисовываешь иконки, создавая ассоциативный массив с сектором пикселей и путем до файла. После двойного клика передаешь путь до файла через ShellExecute. Профит


    Есть также жестко зашитые расширения, например "PE Executable" в реестре пишут - и это тогда передается в загрузчик винды через ntdll.dll!RtlCreateProcessAsUser с уведомлением csrss.exe. Примерно так. Можешь свои проги так попробовать поврубать, только они могут некорректно работать, т.к система будет не знать, что они запущены. Будет просто дескриптор процесса зареган в ядре и создан поток на EntryPoint ( ну или TLS-коллбеки, у кого что ).

    Ты можешь зарегать например .program как PE Executable и переименовать все экзешники в нее и тогда они будут врубаться. Или вообще вставить путь до своего софта, тогда сможешь перехватить запуск любой программы через шелл-оболочку, но вызовы в обход shell32 будут игнорироваться. Чтобы и их ловить надо поставить фильтр в драйвере через ntoskrnl.exe!PsSetCreateProcessNotifyRoutine

    Т.е попробуй из любого кода на нативном языке ( делфи/си и т.д ) вызвать ShellExecute(0, "open", "file.txt", 0, 0, SW_SHOW) - откроется нотпад с файлом, а если пропишешь CreateProcess утебя вернет ошибку
    Ответ написан
    Комментировать