Получить информацию о процессе создания запроса внутри драйвера фильтра TDI - PullRequest
0 голосов
/ 31 марта 2012

Я начинаю писать драйвер фильтра TDI, и мне хотелось бы знать, какой процесс генерирует запросы. Я предполагаю, что информация доступна где-то в (в основном недокументированных) структурах. Например, в настоящее время я получаю IP-адрес и порт внутри события TDI_CONNECT, например:

stackIrp = IoGetCurrentIrpStackLocation(irp);
connectRequest = (TDI_REQUEST_KERNEL_CONNECT*) &stackIrp->Parameters;
transportAddr = (TRANSPORT_ADDRESS*) connectRequest->RequestConnectionInformation->RemoteAddress;
taAddr = (TA_ADDRESS*) transportAddr->Address;
ipAddr = (TDI_ADDRESS_IP*) taAddr->Address;

Должен ли я в конечном итоге получить дескриптор сокета, и мне нужно работать задом наперед, чтобы получить информацию о процессе, или я где-нибудь получаю идентификатор процесса?

В конечном счете, я хотел бы знать информацию о процессе (имя EXE, дескриптор и т. Д.), Но также необходимо знать пользователя Windows, которому принадлежит сеанс, в котором выполняется процесс ... потому что еще одно приложение для фильтрации веб-сайтов, которое, как и все остальные, должно учитывать различные параметры для каждого пользователя.

1 Ответ

2 голосов
/ 19 сентября 2012

Вы можете использовать процедуру 'IoGetRequestorProcessId', которая описана в http://msdn.microsoft.com/en-us/library/windows/hardware/ff548391(v=vs.85).aspx,, чтобы получить уникальный 32-битный идентификатор процесса ULONG для потока, который первоначально запрашивает данную операцию ввода / вывода.

После того как вы получите идентификатор процесса, вы можете получить информацию о процессе, такую ​​как имя EXE, модули, путь выполнения и что-то еще, в приложении пользовательского режима.

...