正如标题所说,我正在编写一个网络程序,我使用CreateFile打开网络驱动程序的句柄,我一直在试验NO_BUFFERING标志。
大多数文档甚至都没有提到它与通信设备一起使用,而那些(MSA参考等)也只是提到你可以。
有没有人知道这会如何影响与设备的通信?
答案 0 :(得分:1)
这是一个设备驱动程序实现细节,您在CreateFile()调用中指定的选项将在IRP_MJ_REQUEST request中传递。我链接的那个是文件系统的那个,它非常花哨。单击IrpSp-> Parameters.Create.Options链接到IoCreateFileSpecifyDeviceObjectHint()'s Options参数,查看FILE_NO_INTERMEDIATE_BUFFERING。
串行端口is here的IRP_MJ_REQUEST文档。非常简单,没有任何参数:)通常,用于通信端口的winapi到设备驱动程序接口是非常直接。在记录的winapi函数和它的underlying IOCTL之间存在(几乎)直接映射。 winapi功能除了基本的错误检查之外没有其他功能,然后快速将作业传递给驱动程序。
因此,没有任何方法可以传递您指定的FILE_FLAG_NO_BUFFERING选项,因此它根本不会被使用。
否则逻辑结论是,串行端口I / O是中断驱动的,驱动程序必须缓冲,以便不丢失字节并保持可接受的传输速率。您可以通过SetupComm()从技术上修改缓冲区大小,但是,如文档所述,只有建议具有相当高的概率,驱动程序才会忽略非常低的值。