-
-
[讨论]完成端口CompletionKey和lpOverlapped
-
发表于: 2013-8-16 10:46 3794
-
CreateIoCompletionPort和GetQueuedCompletionStatus,这2个API提供了完成端口模型
运行的动力,其工作原理也不难理解,但是有2个参数,使我很迷惑,查阅了一些资料和前辈们的
大作,可惜都没对这个问题有深入的讲解,到底它们设计的真滴是什么呢?
一看到“Key”,自然而然就会想到与之对应的Value,再看它的数据类型又是ULONG,一个整数型(我知道所有数据类型都是浮云,内存中只有1字节,2字节,4字节),如果说CreateIoCompletionPort在内部维护着一个像Map那样的数据结构,我认为是合乎逻辑的。
但是目前在网上流传的实例中,全部都是在这个参数上传入一个自定义结构体指针,这看上去不那么优雅,又不符合Microsoft设计API的习惯,就拿GetQueuedCompletionStatus来说吧:
微软API的习惯是如果需要用户传入指针,就会把参数直接设计成指针类型,而不会做成ULONG再让用户强制类型转换。
话又说回来,上面我猜测:一个文件句柄对应一个索引,也说不通,因为微软并没有提供通过这个索引来获取与之对应文件句柄的API呀.
再说说我对重叠IO的疑惑,这个结构体如今大家都知道可以扩展,可以加入一些用户层感兴趣的数据,那么如果完成键做成一个自定义结构体,保存着用户层感兴趣的数据,重叠IO也做同样的工作,这意义又何在呢?
也有前辈说重叠IO只保存核心层感兴趣的数据,完成键保存用户层感兴趣的数据,这种说法貌似有条理了,可是把完成键做成数据结构指针和扩展重叠IO结构,这好像都是我们在灵活使用,而微软
当初设计完成端口模型的时候,并不是这样做的,而他们原来的设计思想和标准的模型编写思路又是什么样子呢?
还请前辈高人们,解惑
运行的动力,其工作原理也不难理解,但是有2个参数,使我很迷惑,查阅了一些资料和前辈们的
大作,可惜都没对这个问题有深入的讲解,到底它们设计的真滴是什么呢?
HANDLE WINAPI CreateIoCompletionPort( HANDLE FileHandle, HANDLE ExistingCompletionPort, ULONG_PTR [COLOR="Red"]CompletionKey[/COLOR], DWORD NumberOfConcurrentThreads );
一看到“Key”,自然而然就会想到与之对应的Value,再看它的数据类型又是ULONG,一个整数型(我知道所有数据类型都是浮云,内存中只有1字节,2字节,4字节),如果说CreateIoCompletionPort在内部维护着一个像Map那样的数据结构,我认为是合乎逻辑的。
但是目前在网上流传的实例中,全部都是在这个参数上传入一个自定义结构体指针,这看上去不那么优雅,又不符合Microsoft设计API的习惯,就拿GetQueuedCompletionStatus来说吧:
BOOL WINAPI GetQueuedCompletionStatus( __in HANDLE CompletionPort, __out LPDWORD lpNumberOfBytes, __out PULONG_PTR [COLOR="Red"]lpCompletionKey[/COLOR], __out LPOVERLAPPED* [COLOR="Red"]lpOverlapped[/COLOR], __in DWORD dwMilliseconds );
微软API的习惯是如果需要用户传入指针,就会把参数直接设计成指针类型,而不会做成ULONG再让用户强制类型转换。
话又说回来,上面我猜测:一个文件句柄对应一个索引,也说不通,因为微软并没有提供通过这个索引来获取与之对应文件句柄的API呀.
再说说我对重叠IO的疑惑,这个结构体如今大家都知道可以扩展,可以加入一些用户层感兴趣的数据,那么如果完成键做成一个自定义结构体,保存着用户层感兴趣的数据,重叠IO也做同样的工作,这意义又何在呢?
也有前辈说重叠IO只保存核心层感兴趣的数据,完成键保存用户层感兴趣的数据,这种说法貌似有条理了,可是把完成键做成数据结构指针和扩展重叠IO结构,这好像都是我们在灵活使用,而微软
当初设计完成端口模型的时候,并不是这样做的,而他们原来的设计思想和标准的模型编写思路又是什么样子呢?
还请前辈高人们,解惑
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)
赞赏
他的文章
- 找出win32窗口类的真相 8639
- [讨论]关于类与类共享数据(无亲朋好友关系) 6427
- [讨论]完成端口CompletionKey和lpOverlapped 3795
- [求助]系统维护的全局数据结构有那些? 4000
- win32 listview in rebar 3385
看原图
赞赏
雪币:
留言: