阅读:2603回复:3
为什么调用listen的时候没有TDI_LISTEN的irp
希望可以在这个版问关于TDI的问题。
我用的是pcausa的TDI passthru的例子程序, 用这个driver来记录所有的tdi的IRP(io request packet)。 编译之后,用instdrv装入内核。 然后启动一个用户程序,调用socket, bind, listen, accept。 从debugview上可以看到, 先是IRP_MJ_CREATE (Address), 然后注册了几个event handler, 然后IRP_MJ_CREATE (Connection), 然后Associate Address with Connection, 然后注册connect的event handler, 之后如果有连接过来,相应的connect call back函数会被调用。 可是,从头到尾都没有发现TDI_LISTEN的IRP包。 这是为什么呢? 谢谢指教。 |
|
沙发#
发布于:2011-03-02 10:40
LISTEN 并不是单纯IRP控制滴
是通过TDI_SET_EVENT 这个Internal Control IRP子功能控制滴 event handler 另外LISTEN是服务端才会调用滴。 |
|
板凳#
发布于:2011-06-25 12:57
有TDI——LISTEN,是子功能号
|
|
地板#
发布于:2011-06-27 17:20
从头到尾没有看见TDI_LISTEN
TdiBuildListen Macro TdiBuildListen sets up an internal device control IRP for a TDI_LISTEN request to the underlying transport in which the local-node client has already associated an address and a connection endpoint. Syntax CopyVOID TdiBuildListen( [in] PIRP Irp, [in] PDEVICE_OBJECT DevObj, [in] PFILE_OBJECT FileObj, [in] PVOID CompRoutine, [in] PVOID Contxt, [in] ULONG Flags, [in] PTDI_CONNECTION_INFORMATION RequestConnectionInfo, [out] PTDI_CONNECTION_INFORMATION ReturnConnectionInfo ); |
|
|