- 注册时间
- 2021-4-16
- 最后登录
- 2023-8-10
- 在线时间
- 2 小时
编程入门
- 龙马币
- 32
|
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
回复下载源码:
|
|