WIA ドライバーのアウト プロセス COM オブジェクト
ドライバーが別プロセスのコンポーネントに CoCreatInstance (Microsoft Windows SDK のドキュメントで説明) を呼び出すと、その呼び出しは、コンポーネントがドライバーへのアクセスを許可する適切なアクセス許可が設定されていない限り失敗します。
COM のセキュリティ モデルの詳細については、COM プログラミングの書籍またはオンライン ドキュメントを参照してください。 次に簡潔に説明します。
プロセスで実行される COM コンポーネントには、次の 2 種類のアクセス許可が関連付けられています。
起動のアクセス許可
起動のアクセス許可は、COM コンポーネントが現在実行されていない場合にどのユーザーやプロセスが起動するアクセス許可を持っているのかを表します。 たとえば、コンポーネントが実行されていないローカル サーバーに実装されている場合、そのコンポーネントに対して CoCreateInstance を呼び出すと、呼び出し元にサーバー起動の権限が与えられていれば、COM はローカル サーバーの起動を試行します。
アクセス許可
アクセス許可は、COM コンポーネントの COM インターフェイスを取得するために、そのプロセスを呼び出すことを許可されているユーザーを示します。
起動のアクセス許可とアクセス許可は一致する必要はありません。 たとえば、起動のアクセス許可は管理者のみに設定できますが、アクセス許可は対話型ユーザーと管理者に設定できます。 または、COM サーバーを起動するアクセス許可を管理者に付与し、COM サーバーがすでに実行されている場合にのみ、一般ユーザーがコンポーネントを使用できるようにする、といったことも可能です。
COM サーバーの起動およびアクセス許可は、コンポーネントの AppId レジストリ サブキーの適切な場所に保存することをお勧めします。 これにより、管理者は、コンポーネント サービス管理ツールを使用して、必要に応じてこれらのアクセス許可を変更できます。 COM サーバーで実行時にこれらのアクセス許可を使用できるようにするには、CoInitializeSecurity (Windows SDK のドキュメントで説明) の呼び出し時に EOAC_APPID フラグを指定し、対象コンポーネントの AppId を渡す必要があります。 これにより、COM はレジストリ内のコンポーネントの AppId サブキーにアクセスし、AccessPermission エントリと LaunchPermission エントリで設定されたアクセス許可を使用するようになります。