Domanda

In winbase.h, funzione DeviceIoControl è definita come questo.

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

Il parametro lpBytesReturned 's annotazione è definito opzionale.
Ma non è un parametro opzionale se il chiamante utilizza sincrono I / O.
Se mette chiamante Null per lpBytesReturned e utilizza sincrono I / O, l'applicazione potrebbe essere morire.

Quando faccio una funzione, spesso faccia a questo problema.
Non ho idea di come esprimere questo dal SAL.

C'è un'annotazione per esprimere questo?

Si prega di P.S tag SAL make se potete. Non v'è alcun tag eppure così.

È stato utile?

Soluzione

Questa è una limitazione della versione corrente di annotazioni SAL. Le annotazioni nelle intestazioni SDK e DDK devono usare _opt quando un parametro potrebbe essere NULL. Senza il suffisso _opt, si ottengono troppi falsi positivi.

Annotazioni nel DDK sono più potenti e comprendono condizionale annotazioni che consentono un migliore controllo. Quindi, se si riusciva a capire da altri parametri quando il parametro è permesso di essere NULL, si potrebbe usare __drv_when per ottenere le annotazioni migliori.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top