WIA 驱动程序的进程外 COM 对象

如果驱动程序在进程外组件上调用 coCreatInstance (Microsoft Windows SDK文档) 中所述,该调用将失败,除非该组件具有适当的权限设置为允许驱动程序访问。

有关 COM 安全模型的详细信息,请参阅 COM 编程书籍或联机文档。 下面是简要说明。

有两种类型的权限与进程外 COM 组件相关联:

  • 启动权限

    启动权限指示谁有权启动 COM 组件(如果当前未运行)。 例如,如果组件是在未运行的本地服务器中实现的,则为该组件调用 CoCreateInstance 会导致 COM 尝试启动本地服务器 (假定调用方有权) 启动本地服务器。

  • 访问权限

    访问权限指示允许谁调用该进程以检索这些 COM 组件的 COM 接口。

    启动权限和访问权限不必匹配。 例如,启动权限可以设置为“仅管理员”,但访问权限可以设置为“交互式用户和管理员”。 或者,管理员可能被授予启动 COM 服务器的权限,但普通用户只有在 COM 服务器已在运行的情况下才能使用这些组件。

一种好的做法是将 COM 服务器的启动和访问权限存储在组件的 AppId 注册表子项下的适当位置。 这允许管理员根据需要使用组件服务管理工具更改这些权限。 若要使 COM 服务器在运行时使用这些访问权限,请确保使用 EOAC_APPID 标志调用 Windows SDK 文档) (中所述的 CoInitializeSecurity (,并传入组件的 AppId。 这会导致 COM 转到注册表中组件的 AppId 子项,并使用 AccessPermissionLaunchPermission 条目中设置的权限。