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;