0

我有一个 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/whatever。

我知道如何使用 ServiceController 来管理(启动/停止/等)已安装的 Windows 服务,但我不知道如何使用它(或任何其他类)为内核驱动程序创建服务。

谢谢你的帮助。

4

0 回答 0