Можно ли перечислить именованные события в Windows?

StackOverflow https://stackoverflow.com/questions/35748

  •  09-06-2019
  •  | 
  •  

Вопрос

Я хотел бы создать события для определенных ресурсов, которые используются различными процессами, и обращаться к этим событиям по имени. Кажется, проблема в том, что имена событий должны быть известны всем приложениям, ссылающимся на них.

Есть ли способ получить список имен событий в системе?

Мне известно, что я мог бы использовать некоторые стандартные имена, но это кажется довольно негибким в отношении будущей расширяемости (для всех приложений потребуется перекомпиляция).

<Ч>

Боюсь, я даже не могу рассмотреть ZwOpenDirectoryObject, потому что он описан как нуждающийся в Windows XP или выше, поэтому об этом не может быть и речи. Спасибо за предложение, хотя.

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

Идея с ProcessExplorer звучит многообещающе. Кто-нибудь знает API, который можно использовать для перечисления событий для процесса? И работает ли он без административных прав?

<Ч>

Спасибо за разъяснения.

На самом деле нет мастер-процесса. Это скорее dll драйвера, который используется в разных процессах, а события будут использоваться для «блокировки». ресурсы, используемые этими процессами.

Я думаю о настройке центральной службы с достаточными правами доступа даже в Vista. Это, безусловно, усложнит ситуацию, но, возможно, это единственное, что останется перед лицом проблем с безопасностью.

Это было полезно?

Решение

Не путайте пользовательский режим ZwOpenDirectoryObject с режимом ядра ZwOpenDirectoryObject - API режима ядра ( http://msdn.microsoft.com/en-us/library/ms800966.aspx ) действительно доступен только для XP, но версия в режиме пользователя должна быть доступна по крайней мере начиная с NT 4. В любом случае, я бы не рекомендовал использовать ZwOpenDirectoryObject.

Почему файлы конфигурации и ключи реестра не работают в Vista? Конечно, вы должны правильно настроить параметры безопасности - но вы должны сделать это и для названных событий - поэтому здесь не должно быть большой разницы. Может быть, вы должны рассказать нам больше подробностей о природе ваших процессов - все они работают в одном сеансе входа или даже под разными пользователями? И есть ли какой-нибудь основной процесс или кто вообще создает события?

Честно говоря, я нахожу идею Process Explorer не очень удачной. Несмотря на то, что вы, вероятно, не сможете достичь этого без использования недокументированных API и / или драйвера устройства, я не думаю, что процесс должен быть запущен в таблице дескрипторов другого процесса просто для того, чтобы узнать имена некоторых объекты ядра. И, конечно же, те же проблемы безопасности применяются снова.

Другие советы

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

Почему бы не использовать отдельный механизм для обмена именами событий? Вы можете перечислить их в файле конфигурации, в разделе реестра или даже в общей памяти.

ProcessExplorer может перечислять все именованные события, проводимые какой-то конкретный процесс. Вы можете просмотреть весь список процессов и сделать что-то подобное, хотя теперь я имею представление о том, какой API используется для получения списка ...

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top