易语言资源网 - 做最全的易语言资源下载社区
【周六更新】【2021开源大赛(第六届)】全部参赛作品信息 精易论坛授权登录

R3应用层利用AFD驱动,编写自己的高效Socket服务   [复制链接]

    2022-05-13 09:12:06
    模块控件源码
    易语言资源网
    302 次浏览
    来源链接


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



点我下载 (已有 22 次下载)

引用模块


源码文件名 模块文件名
AFD 驱动程序进程通信.e
精易模块.ec


引用支持库


源码文件名 支持库文件名 支持库标识
AFD 驱动程序进程通信.e 系统核心支持库 5.7 d09f2340818511d396f6aaf844c7e325
特殊命令支持库 1.4 {15EB1853-EE4C-468f-BAA5-63D186FDB911}
例子.e 系统核心支持库 5.7 d09f2340818511d396f6aaf844c7e325
特殊功能支持库 3.1 A512548E76954B6E92C21055517615B0


[错误报告]   上一篇:优雅补丁让E语言多版本共存...     下一篇:图标生成器