Как найти надежный процесс DllHost.exe для присоединения / Как создать свой собственный

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

Итак, это действительно странный вопрос. И полное раскрытие информации: я знаком с проблемой XY и с тем, как она применима здесь, поэтому я просто хочу уточнить, что то, что я делаю, больше является упражнением для меня, а не конкретно для решения практической проблемы.

С этим разобрались, я пишу скрипт PowerShell и мне нужен процесс DllHost.exe, чтобы он действовал как родитель для процесса, который я собираюсь запустить. Get-Process -Name DllHost | Select-Object -First 1 работает достаточно хорошо, но из-за природы COM Surrogate нет гарантии, что процесс, к которому я подключусь, не завершится между выбором и выполнением моей задачи, или даже что он будет (хотя такое состояние маловероятно). Я попытался запустить свой собственный DllHost, чтобы обойти это, но без какой-либо DLL для хостинга он просто завершается немедленно.

Итак, мой вопрос: существует ли какой-нибудь процесс DllHost.exe, который я могу надежно ожидать увидеть постоянно работающим на системе Windows 11, и как я могу его идентифицировать; ИЛИ как я могу запустить свой собственный процесс DllHost.exe, который не завершится, пока я этого не захочу.

Спасибо.

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

Создание или поиск надежного процесса DllHost.exe для использования в качестве родительского является нестандартной задачей, но интересной с точки зрения изучения поведения и возможностей Windows. Рассмотрим два аспекта вашего вопроса: как найти существующий надежный процесс DllHost.exe и как создать свой собственный.

Поиск надежного процесса DllHost.exe

Процесс DllHost.exe используется в Windows как COM Surrogate, что означает, что он выступает в роли запускающей среды для других COM объектов, изолируя их от ядра системы для повышения безопасности и стабильности. Однако из-за этой роли DllHost.exe может запускаться и завершаться динамически.

  1. Мониторинг существующих процессов: Используйте PowerShell для проверки существующих процессов DllHost.exe. Вы уже упомянули об использовании команды Get-Process -Name DllHost | Select-Object -First 1, однако результат может быть недолговечным. Чтобы уменьшить вероятность задержки или ошибки, можно разработать цикл, который будет периодически проверять наличие процессов DllHost.ex, используя, например, команду:

    while ($true) {
        $dllhost = Get-Process -Name DllHost | Select-Object -First 1
        if ($dllhost) {
            break
        }
        Start-Sleep -Seconds 1
    }
  2. Обнаружение процессов с долгим временем работы: Можно отфильтровать процессы по времени их выполнения, выбирая те, которые работают уже долгое время, что может указать на их стабильность и вероятность продолжения работы:

    Get-Process -Name DllHost | Where-Object { $_.StartTime -lt (Get-Date).AddMinutes(-10) } | Select-Object -First 1

Создание собственного процесса DllHost.exe

Запуск собственного DllHost.exe без привязанной библиотеки DLL приведет к его немедленному завершению. Чтобы этого избежать, можно использовать следующий подход:

  1. Создание собственной загрузочной DLL: Если вам нужен долгосрочный процесс, создайте специальную DLL, которая будет дожидаться ваших команд. Простая заглушка может быть написана на C++, C# или другом языке, поддерживающем COM/ActiveX.

  2. Регистрация DLL: Вам необходимо зарегистрировать эту DLL в системе так, чтобы DllHost.exe мог её выполнять. Далее, с помощью DllHost.exe /Processid:<Ваш COM ID>, можно запустить DllHost.exe с этой DLL, что позволит процессу оставаться активным.

  3. Использование автономного COM объекта: Если у вас есть собственная библиотека, зарегистрированная на вашем компьютере, вы можете использовать её GUID для запуска COM Surrogate.

Важные замечания

  • Безопасность и производительность: Убедитесь, что любые создаваемые вами DLL безопасны и не содержат кода, который может негативно сказаться на производительности или безопасности системы.
  • Административные права: Для регистрации и манипуляций с DLL могут потребоваться административные права.
  • Рискованность операций: Поскольку вы экспериментируете в тестовых целях, делайте это в среде, безопасной для тестирования, возможно, на виртуальной машине.

Эти решения могут помочь вам лучше понять и контролировать процессы DllHost.exe на вашем компьютере, предоставляя дополнительное пространство для экспериментов и изучения механизмов работы Windows.

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

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