Добавление URL в кеш IE из сервиса
У меня есть сервис, который должен добавить URL-адреса в кеш IE вошедшего в систему пользователя
Для этого я сначала получаю токен пользователя с OpenProcessToken и вызываю ImpersonateLoggedOnUser
Я попытался добавить URL с помощью 2 методов
- Использование COM-интерфейса IUrlHistoryStg2 и вызов метода AddUrlAndNotify
- Использование 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
Я хотел бы помочь со следующими вопросами:
- Могу ли я использовать IUrlHistoryStg2 из службы для доступа к истории URL вошедшего в систему пользователя?
- Как я могу использовать CommitUrlCacheEntryW или более тонкую функцию из службы для доступа к истории URL вошедшего в систему пользователя?
- Есть ли третий вариант, который я до сих пор не использовал?
1 ответ
После изменения API CommitUrlCacheEntryW я обнаружил, что он проверяет
- Если текущий поток был олицетворением
- Если процессы Сервис
Если какая-либо из проверок верна, она существует с кодом ошибки 0x80070078
Итак, то, чего я хотел достичь, невозможно из сервиса