Frage

In winbase.h wird DeviceIoControl Funktion wie folgt definiert sind.

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
    );

Der Parameter LpBytesReturned 's Anmerkung wird definiert optional.
Aber es ist nicht ein optionaler Parameter, wenn der Anrufer verwendet synchrone I / O.
Wenn der Anrufer legt Null auf LpBytesReturned und verwendet synchrones I / O, Anwendung sterben könnte.

Wenn ich eine Funktion, habe ich oft Gesicht für dieses Problem.
Ich habe keine Ahnung, wie diese von der SAL zum Ausdruck bringen.

Gibt es eine Anmerkung dies auszudrücken?

P. S Bitte make SAL-Tag, wenn Sie können. Es gibt keinen Tag in SO noch.

War es hilfreich?

Lösung

Dies ist eine Einschränkung der aktuellen Version von SAL Anmerkungen. Die Anmerkungen in dem SDK und DDK-Header haben _OPT zu verwenden, wenn ein Parameter NULL sein könnte. Ohne die _OPT Suffix, werden Sie zu viele Fehlalarme auslösen.

Anmerkungen im DDK sind leistungsstärker und umfassen bedingte Anmerkungen , die eine bessere Kontrolle ermöglichen. Also, wenn Sie von anderen Parametern herausfinden konnte, wenn der Parameter darf NULL sein, könnten Sie __drv_when besser Anmerkungen zu erhalten.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top