質問

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

パラメーター lpbytesturnedの注釈はオプションで定義されています。
ただし、発信者が同期I/Oを使用する場合、オプションのパラメーターではありません。
発信者がnullを置く場合 lpbytesturned 同期I/Oを使用すると、アプリケーションが死ぬ可能性があります。

私が機能を作るとき、私はしばしばこの問題に直面します。
これをSALから表現する方法がわかりません。

これを表現するための注釈はありますか?

PS可能であれば、SALタグを作ってください。タグはまだありません。

役に立ちましたか?

解決

これは、現在のバージョンのSALアノテーションの制限です。 SDKおよびDDKヘッダーの注釈は、パラメーターがnullになる可能性がある場合は_optを使用する必要があります。 _optの接尾辞がなければ、あまりにも多くの誤検知が得られます。

DDKの注釈はより強力で含まれています 条件付き注釈 より良い制御を可能にします。したがって、パラメーターをnullにすることが許可されている場合、他のパラメーターから把握できる場合は、__drv_を使用してより良い注釈を取得できます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top