黑色小魔 发表于 2023-7-24 16:57:25

编写自己的高效Socket服务 R3应用层AFD驱动



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驱动控制码 和 AFD驱动易源码20220502

不懂的翻译

IOCTL_AFD_BIND:12003
IOCTL_AFD_CONNECT:12007
IOCTL_AFD_START_LISTEN:1200b
IOCTL_AFD_WAIT_FOR_LISTEN:1200c
IOCTL_AFD_ACCEPT:12010
IOCTL_AFD_RECV:12017
IOCTL_AFD_RECV_DATAGRAM:1201b
IOCTL_AFD_SEND:1201f
IOCTL_AFD_SEND_DATAGRAM:12023
IOCTL_AFD_SELECT:12024
IOCTL_AFD_DISCONNECT:1202b
IOCTL_AFD_GET_SOCK_NAME:1202f
IOCTL_AFD_GET_PEER_NAME:12033
IOCTL_AFD_GET_TDI_HANDLES:12037
IOCTL_AFD_SET_INFO:1203b
IOCTL_AFD_GET_CONTEXT_SIZE:1203f
IOCTL_AFD_GET_CONTEXT:12043
IOCTL_AFD_SET_CONTEXT:12047
IOCTL_AFD_SET_CONNECT_DATA:1204b
IOCTL_AFD_SET_CONNECT_OPTIONS:1204f
IOCTL_AFD_SET_DISCONNECT_DATA:12053
IOCTL_AFD_SET_DISCONNECT_OPTIONS:12057
IOCTL_AFD_GET_CONNECT_DATA:1205b
IOCTL_AFD_GET_CONNECT_OPTIONS:1205f
IOCTL_AFD_GET_DISCONNECT_DATA:12063
IOCTL_AFD_GET_DISCONNECT_OPTIONS:12067
IOCTL_AFD_SET_CONNECT_DATA_SIZE:1206b
IOCTL_AFD_SET_CONNECT_OPTIONS_SIZE:1206f
IOCTL_AFD_SET_DISCONNECT_DATA_SIZE:12073
IOCTL_AFD_SET_DISCONNECT_OPTIONS_SIZE:12077
IOCTL_AFD_GET_INFO:1207b
IOCTL_AFD_EVENT_SELECT:12087
IOCTL_AFD_DEFER_ACCEPT:1208f
IOCTL_AFD_GET_PENDING_CONNECT_DATA:120a7
IOCTL_AFD_ENUM_NETWORK_EVENTS:1208b
IOCTL_AFD_VALIDATE_GROUP:120ab

回复下载源码:
**** Hidden Message *****



海军上将 发表于 2023-7-28 07:02:57

感谢分享了!!!!

manarex 发表于 2023-8-10 14:15:28

感谢分享了!!!!

代码爱好者 发表于 2024-10-3 08:51:55

666666666666666

longmagu 发表于 2024-10-5 13:26:03

fufyfghchhhjcugfi
页: [1]
查看完整版本: 编写自己的高效Socket服务 R3应用层AFD驱动