在TDI过滤器驱动程序中获取进程信息请求

时间:2012-03-31 07:57:01

标签: windows tcp kernel driver

我开始编写TDI过滤器驱动程序,我想知道的一件事是生成请求的过程。我猜测信息可以在(大多数未记录的)结构中的某处获得。例如,我目前在TDI_CONNECT事件中获取IP地址和端口,如下所示:

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;

我最终只是获得套接字句柄而且我必须向后工作以获取进程信息,或者我是否在某处获得进程ID?

最终我想知道进程信息(EXE名称,句柄等),但也需要知道拥有该进程正在运行的会话的Windows用户...因为是的,我正在写还有另一个网站过滤应用程序,和所有其他网站一样,它允许每个用户使用不同的选项。

1 个答案:

答案 0 :(得分:2)

您可以使用http://msdn.microsoft.com/en-us/library/windows/hardware/ff548391(v=vs.85).aspx中描述的'IoGetRequestorProcessId'例程来获取最初请求给定I / O操作的线程的唯一32位ULONG进程ID。

获得进程ID后,您可以在用户模式应用程序中检索进程信息,例如EXE名称,模块,执行路径等。