Domanda

Vorrei creare eventi per determinate risorse utilizzate in vari processi e accedere a questi eventi per nome.Il problema sembra essere che i nomi degli eventi devono essere noti a tutte le applicazioni che vi fanno riferimento.

C'è forse un modo per ottenere un elenco di nomi eventi nel sistema?

Sono consapevole che potrei usare alcuni nomi standard, ma sembra piuttosto rigido per quanto riguarda l'estensibilità futura (tutte le applicazioni richiederebbero una ricompilazione).


Temo di non poter nemmeno prendere in considerazione ZwOpenDirectoryObject, perché è descritto come necessitante di Windows XP o versione successiva, quindi è fuori discussione.Grazie per il suggerimento comunque.

Sono un po' incerto sulla memoria condivisa, perché non l'ho provata finora.Potrebbe fare qualche lettura in quella zona, immagino.I file di configurazione e il registro rappresentano un piccolo problema, perché tendono a fallire con Vista a causa di problemi di accesso.Ho un po' paura che la memoria condivisa avrà lo stesso problema.

L'idea con ProcessExplorer sembra promettente.Qualcuno conosce un'API che potrebbe essere utilizzata per elencare gli eventi per un processo?E funziona senza diritti amministrativi?


Grazie per il chiarimento.

Non esiste davvero un processo principale.Si tratta più di una dll del driver utilizzata da diversi processi e gli eventi verrebbero utilizzati per "bloccare" le risorse utilizzate da questi processi.

Sto pensando di creare un servizio centrale che abbia diritti di accesso sufficienti anche sotto Vista.Certamente complicherà le cose, ma potrebbe essere l’unica cosa rimasta di fronte ai problemi di sicurezza.

È stato utile?

Soluzione

Non confondere la modalità utente ZwOpenDirectoryObject con la modalità kernel ZwOpenDirectoryObject: l'API in modalità kernel (http://msdn.microsoft.com/en-us/library/ms800966.aspx) sembra effettivamente disponibile solo a partire da XP, ma la versione in modalità utente dovrebbe essere disponibile almeno a partire da NT 4.Ad ogni modo, non consiglierei di utilizzare ZwOpenDirectoryObject.

Perché i file di configurazione e le chiavi di registro dovrebbero fallire su Vista?Naturalmente, devi impostare correttamente le impostazioni di sicurezza, ma dovresti farlo anche per gli eventi con nome, quindi non dovrebbe esserci una grande differenza qui.Forse dovresti dirci qualche dettaglio in più sulla natura dei tuoi processi: vengono eseguiti tutti nella stessa sessione di accesso o vengono eseguiti anche da utenti diversi?Esiste un processo generale o chi crea gli eventi in primo luogo?

Francamente, tendo a trovare l'idea di Process Explorer non molto buona.Nonostante il fatto che probabilmente non sarai in grado di farlo senza utilizzare API non documentate e/o un driver di dispositivo, non penso che un processo dovrebbe frugare nella tabella degli handle di un altro processo solo per scoprire i nomi di alcuni oggetti del kernel.E, naturalmente, si applicano nuovamente gli stessi problemi di sicurezza.

Altri suggerimenti

No, non è possibile enumerare gli eventi con nome.È possibile enumerare tutti gli oggetti nella rispettiva directory del gestore oggetti utilizzando ZwOpenDirectoryObject e quindi filtrare gli eventi.Ma questa routine non è documentata e quindi non dovrebbe essere utilizzata senza una buona ragione.

Perché non utilizzare un meccanismo separato per condividere i nomi degli eventi?Potresti elencarli in un file di configurazione, una chiave di registro o forse anche nella memoria condivisa.

ProcessExplorer è in grado di enumerare tutti gli eventi nominati detenuti da alcuni processi specifici.Potresti esaminare l'intero elenco dei processi e fare qualcosa di simile anche se ora ho la minima idea di quale API viene utilizzata per ottenere l'elenco...

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top