Использование ServiceController или другого для программного создания неуправляемой службы драйвера ядра

У меня есть смешанный проект C/C#, составленный из драйвера ядра, написанного на C, и приложения, написанного на C#. Прямо сейчас, чтобы создать службу драйвера ядра и запустить ее, я использую нативные API OpenSCManager и CreateService со службами взаимодействия, фрагмент кода:

string sDriverFileName = @"c:\path\of\my\driver.sys";
IntPtr hServiceManager = IntPtr.Zero;
IntPtr hService = IntPtr.Zero;

if (System.IO.File.Exists(sDriverFileName) == false)
    throw new IOException( string.Format( "Driver file '{0}' does not exist.", sDriverFileName ) );

hServiceManager = WIN32.OpenSCManager(IntPtr.Zero, IntPtr.Zero, WIN32.SC_MANAGER_ALL_ACCESS);
if (hServiceManager == IntPtr.Zero)
    throw new Win32Exception(Marshal.GetLastWin32Error(), "Could not open service manager.");

hService = WIN32.CreateService
(
    hServiceManager,
    "DriverServiceName",
    "Driver Service Display Name",
    WIN32.SERVICE_ACCESS.SERVICE_ALL_ACCESS,
    WIN32.SERVICE_TYPE.SERVICE_KERNEL_DRIVER,
    WIN32.SERVICE_START.SERVICE_DEMAND_START,
    WIN32.SERVICE_ERROR.SERVICE_ERROR_NORMAL,
    sDriverFileName,
    IntPtr.Zero,
    IntPtr.Zero,
    IntPtr.Zero,
    IntPtr.Zero,
    IntPtr.Zero
);

Но я бы хотел (если это возможно) сделать это полностью управляемым, используя только драйвер, написанный на C, и полагаясь на системный API/natives/ что угодно.

Я знаю, как использовать ServiceController для управления (запуск / остановка и т. Д.) Уже установленной службой Windows, но я понятия не имею, как использовать ее (или любой другой класс) для создания службы для драйвера ядра.

Спасибо за вашу помощь.

0 ответов

Другие вопросы по тегам