开发工具:
文件大小: 81mb
下载次数: 0
上传时间: 2017-11-16
详细说明: 基于TDI 的 TCP数据传输 1.上位机 上位机包括tcp和tcp.cpp 1.1 对外函数说明 HANDLE TdiTcpOpen(); TdiTcpOpen用于打开设备,成功返回有效的句柄,失败返回INVALID_HANDLE_VALUE. BOOL TdiTcpClose(HANDLE hDevice); TdiTcpClose用于关闭设备,成功返回TRUE,失败返回FALSE; hDevice为TdiTcpOpen返回的句柄 BOOL TdiTcpConnect(HANDLE hDevice,cons t PCHAR pIpAddres,USHORT uPort); TdiTcpConnect用于与服务器建链,pIpAddres为服务器IP地址,uPort为服务器端口地址。 hDevice为TdiTcpOpen返回的句柄 pIpAddres为IP地址,如”10.0.0.20” uPort为端口地址 BOOL TdiTcpSend(HANDLE hDevice,PVOID pBuff,ULONG nLen,PULONG pRtn); TdiTcpSend用于给服务器发送数据. hDevice为TdiTcpOpen返回的句柄 pBuff接向发送数据的指针 nLen发送数据长度 pRtn发送成功长度 BOOL TdiTcpRcv(HANDLE hDevice,PVOID pBuff,ULONG nLen,PULONG pRtn); TdiTcpRcv用于从服务器接收数据 hDevice为TdiTcpOpen返回的句柄 pBuff接收数据缓冲区 nLen接收数据缓冲区长度 pRtn实际接收数据长度指针 BOOL TdiTcpSetRcvTimeOut(HANDLE hDevice,ULONG ulSecond); TdiTcpSetRcvTimeOut用于设置接收数据超时时间,默认为3秒。 hDevice为TdiTcpOpen返回的句柄 ulSecond为超时时间 2.下位机 下位机包括D1603.h D1603.cpp和Tdifun.cpp TdiFun.h 2.1 关键数据结构 驱动与应用连接服务器结构体 typedef struct _CONNECT_STRUCT { ULONG ip; //服务器IP地址 USHORT port; //服务器端口 }CONNECT_STRUCT,*PCONNECT_STRUCT; //设备展结构体 typedef struct _DEVICE_EXTENSION { PDEVICE_OBJECT pDeviceObject; //设备指针 UNICODE_STRING wstrDeviceName ; //设备名 UNICODE_STRING wstrSymbolicLinkName;//设备链接名 }DEVICE_EXTENSION,*PDEVICE_EXTENSION; 读数据链接 typedef struct _RCV_IPR_LIST { PIRP pIrp; //指向读IPR LIST_ENTRY ListEntry; //链表 }RCV_IPR_LIST,*PRCV_IPR_LIST; 当前链接上下文 typedef struct _SOCKET_CONTEXT { HANDLE TransportAddressHandle; //传输地址句柄 FILE_OBJECT* pTrasnportAddressFile;//传输地址指针 HANDLE ConnectionHandle;//连接地址句柄 FILE_OBJECT* pConnectionFile;//连接地址指针 LIST_ENTRY RcvHead; //接收IRP链表头 KEVENT event; //接收数据同步事件 ULONG uTimeOut; // 接收数据超时 }SOCKET_CONTEXT,*PSOCKET_CONTEXT; 2.2 外函数说明 驱动装载主入口函数 NTSTATUS DriverEntry(PDRIVER_OBJECT DriverObject,PUNICODE_STRING RegistryPath); 驱动卸载函数 VOID D1603Unload(PDRIVER_OBJECT DriverObject); 默认IRP回调函数 NTSTATUS D1603Dispatch(PDEVICE_OBJECT DeviceObject,PIRP Irp); TdiTcpOpen对应的IPR函数 NTSTATUS D1603Create(PDEVICE_OBJECT DeviceObject,PIRP Irp); 创建当设备上下文并初始化 TdiTcpClose应对的回调函数 NTSTATUS D1603Close(PDEVICE_OBJECT DeviceObject,PIRP Irp); 释放当前设备上下文 TdiTcpSend对应的回调函数 NTSTATUS D1603Read(PDEVICE_OBJECT DeviceObject,PIRP Irp); TdiTcpRcv对应的回调函数 NTSTATUS D1603Write(PDEVICE_OBJECT DeviceObject,PIRP Irp); 清除退出对应的回调函数 NTSTATUS CleanUp(PDEVICE_OBJECT DeviceObject,PIRP Irp); 设置接收数据超时和与服务器建接函数对应的回调函数 NTSTATUS D1603DeviceIoControl(PDEVICE_OBJECT DeviceObject,PIRP Irp); 打开传输地址 NTSTATUS OpenTransportAddress(PHANDLE pTdiHandle,PFILE_OBJECT *pFileObject); 打开连接地址 NTSTATUS OpenConnection(PHANDLE pTdiHandle, PFILE_OBJECT *pFileObject); 关链传输地址和连接地址 NTSTATUS AssociateTransportAndConnection(HANDLE hTransportAddress, PFILE_OBJECT pfoConnection); 与服务器建链 NTSTATUS ConnectServer(PFILE_OBJECT pfoConnection, ULONG uiAddress, USHORT uiPort) ; 发送数据 NTSTATUS SendData(PFILE_OBJECT pfoConnection, PVOID pData,ULONG uiSendLength, ULONG *pDataSent); 设置系统事件,只注册了接收数据事件 NTSTATUS SetEventHandler(PFILE_OBJECT pfoTdiFileObject,LONG InEventType, PVOID InEventHandler, PVOID InEventContext); 接收数据回调函数 NTSTATUS ClientEventReceive(PVOID TdiEventContext, CONNECTION_CONTEXT ConnectionContext, ULONG ReceiveFlags, ULONG BytesIndicated, ULONG BytesAvailable, ULONG *BytesTaken, PVOID Tsdu, PIRP *IoRequestPacket); 断开与服务器建的链 NTSTATUS DisconnectServer(PFILE_OBJECT pfoConnection); 断开传输与连接地址 NTSTATUS DisAssociateTransportAndConnection(PFILE_OBJECT pfoConnection); 关闭句柄 NTSTATUS CloseTdiOpenHandle(HANDLE hTdiHandle, PFILE_OBJECT pfoTdiFileObject); ...展开收缩
(系统自动生成,下载前可以参看下载内容)
下载文件列表
相关说明
- 本站资源为会员上传分享交流与学习,如有侵犯您的权益,请联系我们删除.
- 本站是交换下载平台,提供交流渠道,下载内容来自于网络,除下载问题外,其它问题请自行百度。
- 本站已设置防盗链,请勿用迅雷、QQ旋风等多线程下载软件下载资源,下载后用WinRAR最新版进行解压.
- 如果您发现内容无法下载,请稍后再次尝试;或者到消费记录里找到下载记录反馈给我们.
- 下载后发现下载的内容跟说明不相乎,请到消费记录里找到下载记录反馈给我们,经确认后退回积分.
- 如下载前有疑问,可以通过点击"提供者"的名字,查看对方的联系方式,联系对方咨询.