Я начинаю писать драйвер фильтра 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, которому принадлежит сеанс, в котором выполняется процесс ... потому что еще одно приложение для фильтрации веб-сайтов, которое, как и все остальные, должно учитывать различные параметры для каждого пользователя.