Notifica caricamento DLL

è ansible ottenere una notifica (s) nel mio programma, quando un processo nel sistema carica una particolare DLL o tutti gli eventi di caricamento della DLL (posso filtrare)? Ti piace come Process Explorer riceve notifiche da tutti i processori. Posso utilizzare Process Explorer a questo scopo, ma voglio eseguire un’azione (mostra un popup) in caso di un particolare evento di caricamento della DLL.

Sto anche cercando qualsiasi programma open source che possa fare questo lavoro per me.

Grazie mille in anticipo.

Sì, è ansible ottenere immagini (.dll, .exe) caricare eventi tramite la funzione Windows ETW (Event Tracing per Windows) di Windows. ETW è un meccanismo di logging veloce, a bassa overhead e la maggior parte del kernel di Windows è strumentato per emettere eventi.

ETW ha il concetto di un “fornitore” che emette serie di eventi. Ad esempio, esiste un provider CLR per .NET runtime, un provider di kernel per il gestore di memoria / driver / immagine / file system / eventi utente, un provider IIS per eventi HTTP / di rete o persino provider personalizzati scritti da terze parti.

Dovrai abilitare EVENT_TRACE_FLAG_IMAGE_LOAD sul provider del kernel ETW per ottenere eventi Image_Load . Per il codice gestito, è ansible utilizzare gli eventi AssemblyLoad o ModuleLoad con il provider CLR ETW.

È ansible produrre e consumare eventi ETW dal codice sia nativo sia gestito. È un po ‘difficile lavorare con, ma c’è una grande quantità di dati disponibili quando si inizia a collezionarli. Vance Morrison ha creato una breve panoramica sul consumo di eventi ETW tramite C # e ha creato la libreria TraceEvent .

Inoltre, vedi i miei post SO precedenti qui e qui per ulteriori informazioni su ETW.

In alternativa, è ansible utilizzare WMI (Strumentazione gestione Windows) per ottenere questi eventi, sebbene sia necessario eseguire il polling per tali eventi. Polling WMI dovrebbe essere meno dispendioso in termini di risorse rispetto all’enumerazione costante di tutti i moduli in tutti i processi nel sistema.

Se si Win32_ModuleLoadTrace la route WMI, esaminare i tipi Win32_ModuleLoadTrace e Win32_Process . Il framework .NET ha una API WMI ragionevole .

Potresti usare qualcosa come l’esempio mostrato qui: https://msdn.microsoft.com/en-us/library/27688t9c(v=vs.90).aspx e iterare su ProcessModuleCollection per elencare le DLL caricate per ogni processo , registrarli e monitorare le modifiche? Probabilmente si tratta di risorse intensive.