Microsoft Sal Annotation-オプションパラメーター
-
13-10-2019 - |
質問
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_を使用してより良い注釈を取得できます。
所属していません StackOverflow