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/ネイティブなどに依存して、これを完全に管理したいと考えています。
ServiceController を使用して、既にインストールされている Windows サービスを管理 ( start/stop/etc ) する方法は知っていますが、それ (または他のクラス) を使用してカーネル ドライバーのサービスを作成する方法についてはわかりません。
ご協力いただきありがとうございます。