在 winbase.h 中,DeviceIoControl 函数是这样定义的。
BOOL
WINAPI
DeviceIoControl(
__in HANDLE hDevice,
__in DWORD dwIoControlCode,
__in_bcount_opt(nInBufferSize) LPVOID lpInBuffer,
__in DWORD nInBufferSize,
__out_bcount_part_opt(nOutBufferSize, *lpBytesReturned) LPVOID lpOutBuffer,
__in DWORD nOutBufferSize,
__out_opt LPDWORD lpBytesReturned,
__inout_opt LPOVERLAPPED lpOverlapped
);
参数lpBytesReturned的注释定义为可选。
但如果调用者使用同步 I/O,则它不是可选参数。
如果调用者将 Null放入 lpBytesReturned并使用同步 I/O,则应用程序可能会死掉。
当我做一个函数时,我经常会遇到这个问题。
我不知道如何从 SAL 中表达这一点。
是否有注释来表达这一点?
PS如果可以的话,请制作SAL标签。SO中还没有标签。