【问题标题】:Adding URL to IE cache from a service从服务将 URL 添加到 IE 缓存
【发布时间】:2016-04-14 08:12:30
【问题描述】:

我有一个服务需要将 URL 添加到登录用户的 IE 缓存中

为此,我首先使用OpenProcessToken 获取用户的令牌并调用ImpersonateLoggedOnUser

我尝试使用 2 种方法添加 URL

  1. 使用IUrlHistoryStg2 COM 接口,并调用AddUrlAndNotify 方法
  2. 按以下方式使用CommitUrlCacheEntryW CommitUrlCacheEntryW(urlToEnterWithPrefix, 0, ExpireTime, LastModifiedTime, URLHISTORY_CACHE_ENTRY | NORMAL_CACHE_ENTRY, NULL, 0, NULL, NULL);

当进程在登录用户下运行时,这两种方法都可以正常工作,但在 LocalSystem 下运行时会失败

CommitUrlCacheEntryW 文档统计:

WinINet 不支持服务器实现。此外,它 不应从服务中使用。对于服务器实现或 服务使用 Microsoft Windows HTTP 服务 (WinHTTP)。

但我在WinHTTP 中找不到任何与CommitUrlCacheEntryW 对应的方法

我想就以下问题寻求帮助:

  1. 我可以使用服务中的IUrlHistoryStg2 来访问登录用户的 url-history 吗?
  2. 如何使用CommitUrlCacheEntryW 或服务中的更简洁的函数来访问已登录用户的 url-history?
  3. 是否还有第三个选项我仍然没有使用?

【问题讨论】:

  • 3) 在用户登录时运行的桌面应用程序,然后您的服务与之通信。
  • 感谢@AlexK。此时我试图避免添加额外的应用程序\进程。你知道这是否可以只用服务来完成吗?
  • 那么 Commit 方法已经失效,因为文档告诉您不要这样做,当您使用服务中的接口方法时会发生什么?
  • 作为服务运行时,两个:* AddUrlAndNotify * CommitUrlCacheEntryW 产生错误:This function is not supported on this system

标签: c++ internet-explorer winapi browser-history com-object


【解决方案1】:

在反转 CommitUrlCacheEntryW API 后发现它检查了

  • 如果当前线程正在模拟
  • 如果处理一个服务

如果任一检查为真,则存在错误代码 0x80070078

所以,我想通过服务实现是不可能的

【讨论】:

    猜你喜欢
    • 2014-07-11
    • 2013-12-06
    • 1970-01-01
    • 2011-12-04
    • 1970-01-01
    • 1970-01-01
    • 2012-02-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多