有趣的ReadFile函数第4个参数

发布时间 2023-08-14 16:57:51作者: aij

最近使用ReadFile对文件进行异步读取时发现微软对于此接口的第4个参数有特别备注win7上此参数不能为空:

[out, optional] lpNumberOfBytesRead

指向使用同步 hFile 参数时接收读取的字节数的变量的指针。 ReadFile 将此值设置为零,然后再执行任何工作或错误检查。 如果这是一个异步操作,请对此参数使用 NULL ,以避免潜在的错误结果。

仅当 lpOverlapped 参数不为 NULL 时,此参数才可为 NULL。

Windows 7: 此参数不能为 NULL。

找来了win7和win10的kernelbase.dll对比了一下发现微软在win10上默默修复了此接口的一个bug,即win7上当调用NtReadFile失败后未判断此参数的有效性而直接对其进行了赋值操作。

win7如下所示:

win10如下: