2016-04-14 6 views
3

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

Для того, чтобы сделать это, я сначала получить маркер пользователя с OpenProcessToken и вызвать ImpersonateLoggedOnUser

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

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

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

CommitUrlCacheEntryW статистика документации, что:

WinINet does not support server implementations. In addition, it should not be used from a service. For server implementations or services use Microsoft Windows HTTP Services (WinHTTP).

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

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

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

3) Настольное приложение, которое запускается при входе пользователя в систему, с которым обменивается ваш сервис. –

+0

Спасибо @AlexK., Я пытаюсь избежать добавления дополнительного приложения \ процесса на данный момент. Вы знаете, можно ли это сделать только с помощью сервиса? – 4x6hw

+0

Ну, метод Commit отсутствует, поскольку документы говорят вам не делать этого, что происходит, когда вы используете метод интерфейса из службы? –

ответ

0

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

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

В случае любой из проверок верно , он существует с кодом ошибки 0x80070078

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