感觉自己还是不够成熟,才过了一天,就开始全盘否定自己,否定Windows内核编程,否定自己之前所做的一切努力。自己还是太容易受环境的影响了,在这全是Android的时代,在这APP满天飞的年代,在这物流横天的年代,让自己开始不相信Windows内核的明天,因为它的封闭,注定没有多少人,愿意在上面花时间,其实我应该庆幸这,如果换做是Android,你本身就没有那么神秘,你也就没有那么稀少。越在这个时候,就越应该挺住,记住,其实,都是井里都是有水喝的,很多人,往往,在这里挖一下,觉得没有,立马换位置,再挖不出来,再换,其实他不知道,本来井里都是有水的,只是井口的问题,井口比较大,吃水的人也比较多,这也就是Android,井口比较小,吃水的人就较少,这可能就是Windows.我不知道是否真的Windows会被取消,我只知道,存在就有其合理性。
WSK 是一个内核模式下的网络编程接口(NPI).通过WSK,内核模式的软件模块可以使用同用户模式的Winsock2一样的网络操作。WSK NPI支持socket的创建,绑定,建立连接,数据的发送和接收等操作。虽然大多数操作是跟用户模式的socket一样,但是它也有一些特殊的特性,比如基于IRP的异步IO,事件回调来增强系统的表现。
WSK只对于Windows Vista及其以后的操作系统,我们应该使用WSK替代TDI,因为其增强了系统的表现和更容易的编程。
Winsock Kernel Overview
Winsock Kernel Architecture
这个体系的核心是WSK子系统。WSK子系统是一个网络模块提供WSK的NPI。WSK子系统接口和传输层提供层,在传输层的下边缘,提供对不同传输协议的支持。
WSK的应用就附加在WSD子系统的上面。WSK应用是一些内核模式下的软件模块,为了执行网络IO操作,执行一些WSK NPI客户方面的操作。WSK可以调用WSK客户NPI,
通知WSK应用,关于一些异步事件的发生。
WSK应用通过使用WSK注册的函数来发现并附加到WSK子系统上。应用可以使用这些函数动态的探测WSK子系统什么时候可以使用,以及动态修改为客户提供的WSK NPI
的配发函数表。
WSK应用可以通过使用网络模块注册(NMR)附加在WSK子系统上。
Winsock Kernel Objects
Client Object
客户对象代表在WSK应用和WSK子系统间的一个附件,或绑定。客户对象通过WSK_CLIENT结构表示。当WSK应用附加在WSK子系统后,会返回一个指向
其结构体的指针。WSK应用对所有涉及到客户对象层次上的函数都会传递这个指针。
Socket Object
套接字对象代表可被用于网络IO操作的网络套接字。套接字对象通过WSK_SOCKET结构表示。当应用创建了一个新的套接字或接收到一个来自连接的套接字的时候,
WSK应用返回一个指向该结构体的指针。WSK应用在使用指定套接字的函数时,传递指针给这些WSK函数。
Winsock Kernel Socket Categories
WSK定义了四种不同类型的套接字,基本套接字,监听套接字,数据报套接字,和面向连接的套接字。每一种类型的套接字都有唯一的功能和一组支持的函数。WSK应用在创建新的套接字的时候必须指定WSK套接字的类型。
Basic Sockets:
基本套接字仅仅只被用于获得并设置传输堆栈中的套接字的选项或执行套接字IO控制操作。基本套接字不能被绑定到本地传输地址上,也不能支持发送或接收网络数据。
Listening Sockets:
监听套接字被用来对远程传输地址的接收连接进行监听。监听套接字的功能包含所有的基本套接字的功能。
Datagram Sockets:
数据报套接字被用来发送和接收数据报。数据报套接字包含基本套接字的所有功能。
WSK 是一个内核模式下的网络编程接口(NPI).通过WSK,内核模式的软件模块可以使用同用户模式的Winsock2一样的网络操作。WSK NPI支持socket的创建,绑定,建立连接,数据的发送和接收等操作。虽然大多数操作是跟用户模式的socket一样,但是它也有一些特殊的特性,比如基于IRP的异步IO,事件回调来增强系统的表现。
WSK只对于Windows Vista及其以后的操作系统,我们应该使用WSK替代TDI,因为其增强了系统的表现和更容易的编程。
Winsock Kernel Overview
Winsock Kernel Architecture
WSK的体系结构如下图所示:
这个体系的核心是WSK子系统。WSK子系统是一个网络模块提供WSK的NPI。WSK子系统接口和传输层提供层,在传输层的下边缘,提供对不同传输协议的支持。
WSK的应用就附加在WSD子系统的上面。WSK应用是一些内核模式下的软件模块,为了执行网络IO操作,执行一些WSK NPI客户方面的操作。WSK可以调用WSK客户NPI,
通知WSK应用,关于一些异步事件的发生。
WSK应用通过使用WSK注册的函数来发现并附加到WSK子系统上。应用可以使用这些函数动态的探测WSK子系统什么时候可以使用,以及动态修改为客户提供的WSK NPI
的配发函数表。
WSK应用可以通过使用网络模块注册(NMR)附加在WSK子系统上。
Winsock Kernel Objects
Client Object
客户对象代表在WSK应用和WSK子系统间的一个附件,或绑定。客户对象通过WSK_CLIENT结构表示。当WSK应用附加在WSK子系统后,会返回一个指向
其结构体的指针。WSK应用对所有涉及到客户对象层次上的函数都会传递这个指针。
Socket Object
套接字对象代表可被用于网络IO操作的网络套接字。套接字对象通过WSK_SOCKET结构表示。当应用创建了一个新的套接字或接收到一个来自连接的套接字的时候,
WSK应用返回一个指向该结构体的指针。WSK应用在使用指定套接字的函数时,传递指针给这些WSK函数。
Winsock Kernel Socket Categories
WSK定义了四种不同类型的套接字,基本套接字,监听套接字,数据报套接字,和面向连接的套接字。每一种类型的套接字都有唯一的功能和一组支持的函数。WSK应用在创建新的套接字的时候必须指定WSK套接字的类型。
Basic Sockets:
基本套接字仅仅只被用于获得并设置传输堆栈中的套接字的选项或执行套接字IO控制操作。基本套接字不能被绑定到本地传输地址上,也不能支持发送或接收网络数据。
Listening Sockets:
监听套接字被用来对远程传输地址的接收连接进行监听。监听套接字的功能包含所有的基本套接字的功能。
Datagram Sockets:
数据报套接字被用来发送和接收数据报。数据报套接字包含基本套接字的所有功能。