Pergunta

Gostaria de criar eventos para determinados recursos usados ​​em vários processos e acessar esses eventos por nome.O problema parece ser que os nomes dos eventos devem ser conhecidos por todas as aplicações que se referem a eles.

Existe talvez uma maneira de obter uma lista de eventos de nomes no sistema?

Estou ciente de que posso usar alguns nomes padrão, mas parece bastante inflexível em relação à extensibilidade futura (todos os aplicativos exigiriam uma recompilação).


Infelizmente, não posso nem considerar o ZwOpenDirectoryObject, porque ele é descrito como necessitando do Windows XP ou superior, portanto está fora de questão.Obrigado pela sugestão.

Estou um pouco inseguro sobre a memória compartilhada, porque ainda não tentei.Poderia fazer algumas leituras nessa área, eu acho.Arquivos de configuração e registro são um pequeno problema, porque tendem a falhar no Vista devido a problemas de acesso.Estou com um pouco de medo de que a memória compartilhada tenha o mesmo problema.

A ideia do ProcessExplorer parece promissora.Alguém conhece uma API que possa ser usada para listar eventos de um processo?E funciona sem direitos administrativos?


Obrigado pelo esclarecimento.

Não existe realmente um processo mestre.É mais uma dll de driver que é usada em diferentes processos e os eventos seriam usados ​​para "bloquear" os recursos usados ​​por esses processos.

Estou pensando em criar um serviço central que tenha direitos de acesso suficientes, mesmo no Vista.Certamente complicará as coisas, mas pode ser a única coisa que resta para enfrentar os problemas de segurança.

Foi útil?

Solução

Não misture o modo de usuário ZwOpenDirectoryObject com o modo kernel ZwOpenDirectoryObject - a API do modo kernel (http://msdn.microsoft.com/en-us/library/ms800966.aspx) de fato parece estar disponível apenas no XP, mas a versão do modo de usuário deve estar disponível pelo menos desde o NT 4.De qualquer forma, eu não recomendaria usar ZwOpenDirectoryObject.

Por que os arquivos de configuração e as chaves de registro falham no Vista?Claro, você precisa acertar as configurações de segurança - mas também teria que fazer isso para os eventos nomeados - portanto, não deve haver uma grande diferença aqui.Talvez você devesse nos contar mais alguns detalhes sobre a natureza de seus processos - todos eles são executados na mesma sessão de logon ou até mesmo como usuários diferentes?E existe algum processo mestre ou quem cria os eventos em primeiro lugar?

Francamente, tendo a achar que a ideia do Process Explorer não é muito boa.Apesar do fato de que você provavelmente não conseguirá fazer isso sem usar APIs não documentadas e/ou um driver de dispositivo, não acho que um processo deva vasculhar a tabela de identificadores de outro processo apenas para descobrir os nomes de alguns objetos do kernel.E, claro, as mesmas questões de segurança aplicam-se novamente.

Outras dicas

Não, não há nenhum recurso para enumerar eventos nomeados.Você pode enumerar todos os objetos no respectivo diretório do gerenciador de objetos usando ZwOpenDirectoryObject e depois filtrar os eventos.Mas esta rotina não está documentada e, portanto, não deve ser usada sem um bom motivo.

Por que não usar um mecanismo separado para compartilhar os nomes dos eventos?Você pode listá-los em um arquivo de configuração, uma chave de registro ou talvez até mesmo na memória compartilhada.

Explorador de processos é capaz de enumerar todos os eventos nomeados mantidos por algum processo específico.Você poderia percorrer toda a lista de processos e fazer algo semelhante, embora agora eu tenha ideia de qual API é usada para obter a lista ...

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top