Можно ли перечислить именованные события в Windows? - PullRequest
1 голос
/ 30 августа 2008

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

Возможно, есть способ получить список имен событий в системе?

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


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

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

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


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

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

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

Ответы [ 3 ]

2 голосов
/ 30 августа 2008

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

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

1 голос
/ 30 августа 2008

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

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

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

1 голос
/ 30 августа 2008

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...