常见 WIA 安全问题

有几个常见问题可能会阻止现有的 WIA 驱动程序 (在 LocalSystem) 无法在 LocalService 帐户下成功运行。

最常见的问题发生在:

  • 文件系统访问

    LocalService 帐户的文件访问受到严重限制。 例如,驱动程序无法再写入 %windir% 目录。

  • 注册表访问

    许多对 LocalSystem 帐户打开的注册表项对 LocalService 都是只读的。 例如,驱动程序不再能够写入 HKLM 子树下的注册表项。

  • 命名内核对象

    确保命名对象 (例如,事件和互斥体) 由 WIA 驱动程序和外部组件(如捆绑应用程序)访问,具有适当的 ACL。 如果应用程序创建命名事件对象,但没有专门授予 对 LocalService 帐户的访问权限,驱动程序将无法使用它。 同样,如果微型驱动程序创建命名事件对象,则必须授予相同的访问权限,否则应用程序将无法使用该事件对象。

  • 进程外 COM 对象

    任何创建或使用进程外 COM 接口的尝试都将失败,除非该组件显式授予 对 LocalService 帐户的适当权限。 例如,Microsoft Windows SDK文档中介绍了对 CoCreateInstanceCoCreateInstanceEx (的调用,如果组件未向 LocalService 帐户授予权限,CLSCTX_LOCAL_SERVER标志集) 可能会失败。 同样,尝试使用指向不是驱动程序进程内 COM 接口的指针的驱动程序可能会失败。 如果组件调用驱动程序并向其提供指向接口的指针,驱动程序可以通过该指针回调接口,则可能会发生这种情况。

  • 创建和打开进程

    WIA 驱动程序不应手动启动其他进程 (,例如,通过调用 CreateProcessCreateProcessAsUser) 。 尽管此行为对于 LocalSystem 帐户下的驱动程序而言会成功,但在新的 LocalService 帐户下,驱动程序再也不可能这样做。 有关 CreateProcessCreateProcessAsUser 的详细信息,请参阅 Windows SDK 文档。