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 子项,并使用 AccessPermission 和 LaunchPermission 条目中设置的权限。