В 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 определяется как необязательный.
Но это не обязательный параметр, если вызывающая сторона использует синхронный ввод-вывод.
Если вызывающая сторона устанавливает Null в lpBytesReturned и использует синхронный ввод-вывод, приложение может быть умирает.
Когда я выполняю функцию, я часто сталкиваюсь с этой проблемой.
Я понятия не имею, как выразить это из SAL.
Есть ли аннотация, чтобы выразить это?
P.S Пожалуйста, сделайте тег SAL, если можете. В SO еще нет тега.