有趣的ReadFile函数第4个参数
最近使用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如下: