Microsoft SAL аннотация -опциональный параметр - PullRequest
0 голосов
/ 24 декабря 2010

В 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 еще нет тега.

1 Ответ

2 голосов
/ 24 января 2011

Это ограничение текущей версии аннотаций SAL.Аннотации в заголовках SDK и DDK должны использовать _opt, когда параметр может иметь значение NULL.Без суффикса _opt вы получите слишком много ложных срабатываний.

Аннотации в DDK более мощные и включают в себя условные аннотации , которые позволяют лучше контролироватьПоэтому, если бы вы могли выяснить из других параметров, когда параметру разрешено принимать значение NULL, вы могли бы использовать __drv_when для получения лучших аннотаций.

...