Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows 文件\u标志\u无\u缓冲区如何与通信设备打开的句柄交互?_Windows_Driver_Createfile - Fatal编程技术网

Windows 文件\u标志\u无\u缓冲区如何与通信设备打开的句柄交互?

Windows 文件\u标志\u无\u缓冲区如何与通信设备打开的句柄交互?,windows,driver,createfile,Windows,Driver,Createfile,正如标题所说,我正在编写一个网络程序,在这个程序中,我使用CreateFile打开了一个网络驱动程序的句柄,并且我一直在试验NO_缓冲标志 大多数文档甚至不会提到这是用于通信设备的,而那些这样做的(又名MSDN参考,等等),只是提到您可以 有人知道这会如何影响与设备的通信吗?这是一个设备驱动程序实现的详细信息,您在CreateFile()调用中指定的选项将在中传递。我链接的是一个用于文件系统的,它非常奇特。单击IrpSp->Parameters.Create.Options链接到Options参

正如标题所说,我正在编写一个网络程序,在这个程序中,我使用CreateFile打开了一个网络驱动程序的句柄,并且我一直在试验NO_缓冲标志

大多数文档甚至不会提到这是用于通信设备的,而那些这样做的(又名MSDN参考,等等),只是提到您可以


有人知道这会如何影响与设备的通信吗?

这是一个设备驱动程序实现的详细信息,您在CreateFile()调用中指定的选项将在中传递。我链接的是一个用于文件系统的,它非常奇特。单击IrpSp->Parameters.Create.Options链接到Options参数,查看文件\u NO\u中间\u缓冲

有关串行端口的IRP_MJ_请求的文档。非常简单,没有任何参数:)一般来说,用于通信端口的winapi到设备驱动程序接口是非常简单的。文档化的winapi函数和它的函数之间存在(几乎)直接映射。winapi函数除了基本的错误检查外,没有做很多工作,然后将作业快速传递给驱动程序

因此,没有任何方法可以传递您指定的FILE\u FLAG\u NO\u缓冲选项,因此无法使用它


否则,逻辑结论是,串行端口I/O是中断驱动的,驱动程序必须缓冲以不丢失字节并保持可接受的传输速率。从技术上讲,您可以通过修改缓冲区大小,但是,如文档所述,驱动程序忽略非常低的值的可能性非常高。哇,您为我打开了一个全新的视角!总而言之:这是否意味着Windows本身实际上不缓冲任何东西——驱动程序缓冲?如果是这样的话,网络上的一些文档是错误的——我发现一些网站明确表示该标志阻止Windows使用它自己的缓冲区!此外,网络驱动程序是windows的TUN/TAP驱动程序,而不是串行端口本身。这有什么影响吗?我想它仍然是中断驱动的,但我需要问一下才能确定!非常感谢你,汉斯