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 を使用する場合、これはオプションのパラメーターではありません。
呼び出し元がlpBytesReturnedに Null を設定し、同期 I/O を使用すると、アプリケーションが停止する可能性があります。
関数を作成するとき、この問題に直面することがよくあります。
SAL からこれを表現する方法がわかりません。
これを表現する注釈はありますか?
PS できればSALタグを作ってください。SOにはまだタグがありません。