3

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

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

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

  1. 使用IUrlHistoryStg2 COM 接口,并调用AddUrlAndNotify方法
  2. 按以下方式 使用CommitUrlCacheEntryWCommitUrlCacheEntryW(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. 有没有我仍然没有使用的第三种选择?
4

1 回答 1

0

反转 CommitUrlCacheEntryW API 后,我发现它检查

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

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

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

于 2016-04-19T14:44:57.177 回答