Добавление URL в кеш IE из сервиса

У меня есть сервис, который должен добавить URL-адреса в кеш IE вошедшего в систему пользователя

Для этого я сначала получаю токен пользователя с OpenProcessToken и вызываю ImpersonateLoggedOnUser

Я попытался добавить URL с помощью 2 методов

  1. Использование COM-интерфейса IUrlHistoryStg2 и вызов метода AddUrlAndNotify
  2. Использование CommitUrlCacheEntryW следующим образом CommitUrlCacheEntryW(urlToEnterWithPrefix, 0, ExpireTime, LastModifiedTime, URLHISTORY_CACHE_ENTRY | NORMAL_CACHE_ENTRY, NULL, 0, NULL, NULL);

Оба метода работают нормально, когда процессы выполняются от имени вошедшего в систему пользователя, но не работают, когда он работает под локальной системой

Статистика документации CommitUrlCacheEntryW, которая:

WinINet не поддерживает серверные реализации. Кроме того, он не должен использоваться из службы. Для серверных реализаций или служб используйте Microsoft Windows HTTP Services (WinHTTP).

Но я не смог найти какой-либо метод в WinHTTP, который соответствует CommitUrlCacheEntryW

Я хотел бы помочь со следующими вопросами:

  1. Могу ли я использовать IUrlHistoryStg2 из службы для доступа к истории URL вошедшего в систему пользователя?
  2. Как я могу использовать CommitUrlCacheEntryW или более тонкую функцию из службы для доступа к истории URL вошедшего в систему пользователя?
  3. Есть ли третий вариант, который я до сих пор не использовал?

1 ответ

Решение

После изменения API CommitUrlCacheEntryW я обнаружил, что он проверяет

  • Если текущий поток был олицетворением
  • Если процессы Сервис

Если какая-либо из проверок верна, она существует с кодом ошибки 0x80070078

Итак, то, чего я хотел достичь, невозможно из сервиса

Другие вопросы по тегам