我有一个C / C#混合项目,由用C编写的内核驱动程序和用C#编写的应用程序组成。 现在,要创建内核驱动程序服务并运行它,我使用本机API OpenSCManager和CreateService与interop服务,代码片段是:
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服务,但我不知道如何使用它(或任何其他类)来为内核驱动程序创建服务。
感谢您的帮助。