我注意到 Process Monitor 通过 IAccessible (MSAA) 接口访问 Mozilla Firefox 会导致文件访问名为“Accessibility.api”的 Adobe Reader 文件。当我使用 Microsoft 的 Inspect.exe(使用 MSAA)访问 Mozilla Firefox 时,我没有获得这些文件访问权限。
这是导致大约 28 次访问“Accessibility.api”文件访问的代码 (C++):
CComPtr<IAccessible> mainElement;
::AccessibleObjectFromWindow(mainWindowHandle, static_cast<DWORD>(OBJID_CLIENT), IID_IAccessible, reinterpret_cast<void**>(&mainElement));
每个::AccessibleChildren
orIEnumVariant::Next
调用也会导致每个子元素大约 28 次访问。
如何防止像 Inspect.exe 这样的文件访问?
2018-11-30 更新
我用 Chrome 得到了同样的结果。
Adobe Reader 未作为插件安装在这些浏览器上。
我尝试重命名 Accessible.api 文件(位于 C:\Program Files (x86)\Adobe\Acrobat Reader DC\Reader\plug_ins\Accessibility.api)以禁用它,但之后我无法访问任何浏览器元素更多的。生成的子元素不同。Inspect.exe(使用 MSAA)或Ranorex Spy(没有浏览器扩展)没有这些问题。我也用AccProbe检查了结果,这个工具产生了和我一样的结果。
2018-12-03 更新
看起来这只影响 32 位应用程序。Inspect.exe 和 Ranorex Spy 是 64 位应用程序。我的应用程序和 AccProbe(安装的 JRE 是 32 位)都是 32 位的。因为 Adobe Reader 是 32 位的,所以我认为这就是为什么只有 32 位应用程序会受到影响。我还可以使用 32 位版本的 Ranorex Spy 重现此行为。
现在我知道该行为不是由错误的实现引起的。但是为什么对这个 Adobe Reader Accessibility.api 文件进行如此多的访问的问题仍然悬而未决......