今天我写一个程序,把lpNumberOfBytesWritten的指针给错了,隐式给成了NULL,但我是在Win8编译测试的,结果WriteFile通过了,我没察觉到这个错误。而我转到Win7上运行,直接蹦了,百思不解,无奈之下打开OD调,结果发现死在WriteFile这里,仔细一跟,我艹。。。
原来是这样的,lpNumberOfBytesWritten参数大家都不能设置为NULL或一个无效的指针,除非lpOverlapped参数不是NULL,也就是说WriteFile的最后2个参数必须有一个不为NULL,MSDN也是这样写的。可Win8开始不是这样了,你可以把WriteFile的最后2个参数都设置为NULL。。。比如:
WriteFile(hFile,lpBuffer,dwWriteSize,NULL,NULL);
这样在Win7下运行会挂的,而Win8下不会,因为Win8会检查lpNumberOfBytesWritten参赛是否为空指针,如果是空指针就跳过不写了。汇编如下
Win7:
Win8: