2012-11-03 7 views
6

Sto sviluppando un driver che aggancia alcune funzioni in Windows (driver hardening che bloccherà alcune azioni). Il problema è che voglio registrare qual è l'utente che ha tentato di eseguire tali azioni.Come si ottiene il SID del chiamante in modalità kernel hook? (windows)

Ad esempio, ho inserito un hook su ZwSetValueKey per filtrare la scrittura del registro.

Il gancio funziona perfettamente, ma non so come ottenere il SID del chiamante. Ho scoperto che posso determinare se la modalità del chiamante (cioè la modalità utente o la modalità kernel) utilizza ExGetPreviousMode. Ma non sono sicuro di come determinare il SID se il chiamante era in modalità utente.

Grazie.

risposta

4

Se questa fosse la modalità utente, iniziare con GetCurrentProcess o GetCurrentThread e quindi chiamare GetProcessToken o GetThreadToken. Questo ti procurerebbe un token di accesso, da cui il SID can be extracted direttamente. Nel modello del kernel, c'è PsGetCurrentProcess e ZwOpenProcessTokenEx e simili per i thread.

Ecco la domanda equivalente per lo spazio utente: How to get Calling-Process Windows User Access Token.

Non l'ho ancora provato, ma spero che tu possa iniziare.

+1

È preferibile utilizzare token di thread anziché token di processo (a causa della rappresentazione), ma l'idea principale è la stessa. Grazie. – DiGMi

Problemi correlati