WIA セキュリティ上の一般的な問題
LocalService アカウントで (LocalSystem で正常に動作していた) 既存の WIA ドライバーが正常に実行されない原因となる可能性がある、一般的な問題がいくつかあります。
最も一般的な問題は、次の場合に発生します。
ファイル システムへのアクセス
LocalService アカウントでは、ファイル アクセスが厳しく制限されています。 たとえば、ドライバーを %windir% ディレクトリに書き込むことができなくなりました。
レジストリ アクセス
LocalSystem アカウントに対して開いている多くのレジストリ キーは、LocalService に対して読み取り専用です。 たとえば、ドライバーは HKLM サブツリーのレジストリ キーに書き込むことができなくなります。
名前付きカーネル オブジェクト
WIA ドライバーと外部コンポーネント (バンドルされたアプリケーションなど) の両方からアクセスされる名前付きオブジェクト (イベントやミューテックスなど) に適切な ACL があることを確認します。 アプリケーションが名前付きイベント オブジェクトを作成しても、LocalService アカウントへのアクセスを明示的に許可しない場合、ドライバーはそれを使用できません。 同様に、ミニドライバーが名前付きイベント オブジェクトを作成する場合、同じアクセス権を付与する必要があります。そうしないと、アプリケーションはイベント オブジェクトを使用できません。
アウトプロセス COM オブジェクト
アウトプロセス COM インターフェイスを作成または使用しようとすると、そのコンポーネントが LocalService アカウントに適切なアクセス許可を明示的に付与しない限り失敗します。 たとえば、コンポーネントが LocalService アカウントへのアクセス許可を付与していない場合、CLSCTX_LOCAL_SERVER フラグが設定された CoCreateInstanceEx または CoCreateInstanceEx (どちらも Microsoft Windows SDK ドキュメントで説明されています) の呼び出しが失敗する可能性があります。 同様に、ドライバーに対してインプロセスではない COM インターフェイスへのポインターを使用しようとするドライバーは失敗する可能性があります。 これは、コンポーネントがドライバーを呼び出し、ドライバーがインターフェイスにコールバックできるインターフェイスへのポインターを渡した場合に発生する可能性があります。
プロセスを作成して開く
WIA ドライバーは、他のプロセスを手動で開始しないでください (たとえば、CreateProcess または CreateProcessAsUser を呼び出すことにより)。 この動作は LocalSystem アカウントのドライバーで成功しましたが、新しい LocalService アカウントではドライバーが実行できなくなります。 CreateProcess と CreateProcessAsUser の詳細については、Windows SDK のドキュメントを参照してください。