Связь драйвера мини-фильтра со службой Windows

Я создаю драйвер мини-фильтра. В этом я общаюсь с приложением пользовательского режима, чтобы получить некоторые данные пользователя формы. я общаюсь с пользовательским режимом, используя «коммуникационный порт». я пытался связаться с приложением пользовательского режима, он работал нормально.

Одно из предложений, которое я получил от других, - использовать службу Windows для получения данных, поскольку она всегда будет работать, и мы хотим, чтобы приложение пользовательского режима работало всегда.

мой вопрос

1) Могу ли я создать «коммуникационный порт» в службе Windows?

2) Если я создаю службу Windows, как получить конкретную информацию о пользователе. я имею в виду, когда я отправляю запрос в службу, как служба узнает, из какого пользовательского сеанса необходимо извлечь данные?

3) какой из них лучше, я имею в виду, что пользовательский режим или служба Windows - лучшее решение.


person Umesha MS    schedule 10.07.2014    source источник
comment
Служба Windows в значительной степени подпадает под термин «приложение пользовательского режима». Он использует определенный API, чтобы идентифицировать себя как службу, может работать с привилегиями SYSTEM и не иметь возможности отображать пользовательский интерфейс, но в остальном это в значительной степени приложение пользовательского режима, как и любое другое. Обратите внимание, что служба не связана с конкретным сеансом пользователя.   -  person Dark Falcon    schedule 10.07.2014
comment
Хорошо, сформируйте драйвер мини-фильтра, можем ли мы получить форму того, какой сеанс мы получили в драйвере мини-фильтра.   -  person Umesha MS    schedule 10.07.2014
comment
Сессии нет. Сервис не взаимодействует с пользователем. Существует один сервисный процесс, и он выполняется независимо от того, сколько пользователей (в том числе ни одного) не вошли в систему.   -  person Dark Falcon    schedule 10.07.2014
comment
хорошо, если я хочу общаться с пользовательским режимом, мне нужно выдать себя за этого пользователя, чтобы я мог получить данные о пользователе. но единственное, для какого пользователя имперсинировать   -  person Umesha MS    schedule 10.07.2014
comment
Если вам нужно быть этим пользователем, просто запустите обычное приложение от имени этого пользователя. Для олицетворения пользователя потребуется получить токен для этого пользователя, что [легко] сделать только через LogonUser (для чего требуется пароль) или путем поиска существующего токена для этого пользователя из программы, которая уже запущена как этот пользователь.   -  person Dark Falcon    schedule 10.07.2014


Ответы (1)


1) Могу ли я создать «коммуникационный порт» в службе Windows?

Да, вы можете создать его в сервисе.

2) Если я создаю службу Windows, как получить конкретную информацию о пользователе. я имею в виду, когда я отправляю запрос в службу, как служба узнает, из какого пользовательского сеанса необходимо извлечь данные?

Служба работает под системной учетной записью, а не под пользователем, вошедшим в систему. Таким образом, чтобы показать всплывающее окно или диалоговое окно текущему вошедшему в систему пользователю, вы можете посмотреть WTSGetActiveConsoleSessionId() или аналогичный API для получения сеанса консоли.

3) какой из них лучше, я имею в виду, что пользовательский режим или служба Windows - лучшее решение.

Зависит от вашего дизайна. Как вы упомянули, служба всегда работает, если ваш драйвер зависит от такого требования, а затем выполните службу. Но для реального взаимодействия с пользователем потребуется больше усилий.

Но если ваш драйвер может работать без какого-либо подключения к сервису/приложению как таковому, используйте приложение.

person Rohan    schedule 10.07.2014
comment
У нас есть требование, чтобы служба/приложение всегда работали в любое время, когда драйвер фильтра может прийти и запросить некоторые данные. Итак, какой сервис или приложение предпочтительнее? - person Umesha MS; 10.07.2014
comment
@UmeshaMS, я думаю, тогда сервис. Но что произойдет, если пользователь не войдет в систему? - person Rohan; 10.07.2014
comment
хммм, в мини-драйвере фильтра, если я хочу получить пользовательские данные, то как мы можем их получить. и моя идея запуска приложения заключается в том, что служба будет контролировать это приложение, когда оно убьет его, перезапустит его. - person Umesha MS; 10.07.2014
comment
@UmeshaMS: пользователь может убить приложение так же, как и остановить работающую службу. Сервис больше не будет обеспечивать защиту от завершения. - person IInspectable; 10.07.2014