当创建一个完成端口时,内核实际创建了5个不同的数据结构.
1.设备列表.用来保存完成端口与设备的关联.通过调用CreateIoCompletionPort完成的. 设备列表保存了hDevice(一个设备句柄,这可以是一个文件、套接字等等),dwCompletionKey(一个完成键,对你有意义的一个32位值,操作系统并不关心你这里传递什么).
2.I/O完成队列(FIFO).首先系统会检查设备是否关联了一个完成端口.如果是就向I/O完成队列中加入完成的I/O请求项.I/O完成队列保存了dwBytesTransFerred,dwCompletionKey,pOverlapped,dwError.一般是I/O请求完成时或调用PostQueuedCompletionStatus添加.
3.等待的线程队列(LIFO)
4.释放线程列表
5.暂停线程列表