Pregunta

En winbase.h, la función DeviceIoControl se define como este.

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

El parámetro lpBytesReturned 's anotación se define opcional.
Pero no es un parámetro opcional si llama utiliza E / S síncrona.
Si la persona que llama Null pone a lpBytesReturned y utiliza E / S síncrona, la aplicación podría haber dado.

Cuando hago una función, que a menudo se enfrentan a este problema.
No tengo idea de cómo expresar esto de la SAL.

¿Hay una anotación para expresar esto?

Por favor, haga P.S etiqueta SAL si es posible. No hay ninguna etiqueta en vez tan.

¿Fue útil?

Solución

Esta es una limitación de la versión actual de las anotaciones de la SAL. Las anotaciones en los encabezados de SDK y DDK tienen que utilizar _opt cuando un parámetro podría ser NULL. Sin el sufijo _opt, obtendrá demasiados falsos positivos.

Las anotaciones en el DDK son más poderosos e incluyen condicional anotaciones que permiten un mejor control. Así que si usted podría averiguar de otros parámetros cuando se permite que el parámetro a ser NULL, se puede utilizar para obtener mejores __drv_when anotaciones.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top