|
发表于 2022-5-4 21:11:17
|
显示全部楼层
浙江省台州市
本帖最后由 莫爱 于 2022-5-2 17:12 编辑
1,什么是afd驱动
socket机制在windwos系统中的实现分为用户空间和内核空间实现,
用户空间就是 ws2_32.lib 这个dll 库
系统空间就是afd.sys驱动
简来说AFD驱动向上与SOCKET应用接口约定了接口来实现SOCKET,AFD驱动实际上是一个TDI客户端,它通过TDI接口调用微软件的另一个网络部件TCPIP驱动来完成功能。AFD并没有官方的资料说明它的接口,但是在网上还是可以找到很关于AFD驱动的资料的。
相对来说国外对AFD驱动在国外利广泛,很多大型游戏厂商利用AFD 开发出自己的socket服务达到隐藏sned recv 等函数。
AFD驱动模块函数功能对
NTSockets_CreateTcpSocket = socket() 用NtCreateFile 创建“\Device\Afd\Endpoint”
NTSockets_ConvertIP = inet_addr() 纯源码实现这样更加健康防止OD
NTSockets_Swap16BitByteOrder = htons()| ntohs()
NTSockets_Connect = connect() 用 NtDeviceIoControlFile 控制码IOCTL_AFD_CONNECT:0x12007
NTSockets_WSAEventSelect = WSAEventSelect 用 NtDeviceIoControlFile 控制码IOCTL_AFD_EVENT_SELECT:0x12087
NTSockets_WSAEnumNetworkEvents = WSAEnumNetworkEvents 用 NtDeviceIoControlFile 控制码IOCTL_AFD_ENUM_NETWORK_EVENTS:0x1208b
NTSockets_Recv = Recv 用 NtDeviceIoControlFile 控制码IOCTL_AFD_RECV:0x12017
NTSockets_Send = Send 用 NtDeviceIoControlFile 控制码IOCTL_AFD_SEND:0x1201f
其他函数陆续会更新,现在的版本基本功能已经实现
使用有问题可以给我反馈就行修复
需要生成调试,用OutputDebugStringA函数输出
用Dbgview接收日志
全部有带
AFD驱动控制码 |
|