我开始学习如何编写 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(源注释语言)注释,并且有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