Windows应用层的网络通讯使用socket非常常见。内核模式下呢?一种是可以使用TDI或者NDIS驱动程序,但是TDI驱动程序在Win7系统以后就无法使用,而NDIS驱动学习成本比较高,编程的难度比较高。如果是简单的实现网络通讯比如TCP或者是UDP通讯,更加推荐使用内核模式下WSK的socket。
这个socket结构如下:
typedef struct _WSK_SOCKET {
const VOID *Dispatch;
} WSK_SOCKET, *PWSK_SOCKET;
这个套接字只包含一个指针,指向一个结构体,结构体里面包含不同类型的socket的分发函数,比如Send,Receive函数等。
TCP使用这个类型的套接字。
Connection-oriented socket |
typedef struct _WSK_PROVIDER_CONNECTION_DISPATCH {
WSK_PROVIDER_BASIC_DISPATCH Basic;
PFN_WSK_BIND WskBind;
PFN_WSK_CONNECT WskConnect;
PFN_WSK_GET_LOCAL_ADDRESS WskGetLocalAddress;
PFN_WSK_GET_REMOTE_ADDRESS WskGetRemoteAddress;
PFN_WSK_SEND WskSend;
PFN_WSK_RECEIVE WskReceive;
PFN_WSK_DISCONNECT WskDisconnect;
PFN_WSK_RELEASE_DATA_INDICATION_LIST WskRelease;
} WSK_PROVIDER_CONNECTION_DISPATCH, *PWSK_PROVIDER_CONNECTION_DISPATCH;