私はWindowsドライバーをプログラムする方法を学び始めていますが、関数の引数宣言にあるINの定義を含む場所を見つけることができないようです。例えば:
NTSTATUS DriverEntry( IN PDRIVER_OBJECT DriverObject,
IN PUNICODE_STRING RegistryPath)
誰かがINの意味を説明してもらえますか?
私はWindowsドライバーをプログラムする方法を学び始めていますが、関数の引数宣言にあるINの定義を含む場所を見つけることができないようです。例えば:
NTSTATUS DriverEntry( IN PDRIVER_OBJECT DriverObject,
IN PUNICODE_STRING RegistryPath)
誰かがINの意味を説明してもらえますか?
これらはSAL(Source Annotation Language)アノテーションと呼ばれ、優れた静的分析の恩恵を受けるためにそれらを使用する方法に関するMSDNドキュメントがあります。
実際の構文は、SALバージョンごとに異なる場合があります(INや_In_など)。下位互換性はありますが、常に最新の構文を使用することをお勧めします。
私の知る限り、それは次のように定義されています。
///
/// Datum is passed to the function.
///
#define IN
これは、パラメーターが入力パラメーターのみであることを示すために使用されます。
AsOUT
とOPTIONAL
は、出力パラメータとオプションのパラメータを示すために使用されます。
これらはおそらく便宜のためです。
WDKでは、これはntdef.hファイルで定義されています。通常、ドライバーにはntddk.hまたはwdm.hファイルをインクルードするだけで、これらのファイルにはntdef.hおよびその他の重要なヘッダーファイルがインクルードされます。例えば:
#include <ntddk.h>
上記のように、この注釈は静的分析に使用され、単純に次のように定義されます。
#define IN