C++ 有助于理解低级代码的语法
C++ help to understand syntax of low level code
我正在阅读一些代码,发现很难理解:
extern "C" NTSYSAPI NTSTATUS NTAPI ObReferenceObjectByName
这里是一些真实的代码:
extern "C" NTSYSAPI NTSTATUS NTAPI ObReferenceObjectByName(
PUNICODE_STRING ObjectName,
ULONG Attributes,
PACCESS_STATE AccessState,
ACCESS_MASK DesiredAccess,
POBJECT_TYPE ObjectType,
KPROCESSOR_MODE AccessMode,
PVOID ParseContext OPTIONAL,
PVOID * Object
);
找了一会儿发现extern "C"是给编译器的指令,
它解析函数名称,就像在 C 中一样,这三个 NTSYSAPI、NTSTATUS、NTAPI 属于 winwdows 内核 API,但我不我不明白这个语法到底是如何工作的,因为看起来有 3 个 return 类型没有意义,所以它们是像 java 中的某种预处理器注释吗?或者可能是 (SAL) Microsoft 源代码注释语言。
说到这里,问题来了,这个语法是标准 C++ 语言的一部分,还是只是微软在 to 编译器中添加的某种额外功能,应该如何阅读? 谢谢
只有一种 return 类型,NTSTATUS
,它是枚举。其他是函数调用的修饰符,例如 NTAPI
解析为 __stdcall
,它修改了编译器调用函数的方式,而 NTSYSAPI
解析为 declspec(dllimport)
,它将函数标记为库导入。
另外这与SAL无关
我正在阅读一些代码,发现很难理解:
extern "C" NTSYSAPI NTSTATUS NTAPI ObReferenceObjectByName
这里是一些真实的代码:
extern "C" NTSYSAPI NTSTATUS NTAPI ObReferenceObjectByName(
PUNICODE_STRING ObjectName,
ULONG Attributes,
PACCESS_STATE AccessState,
ACCESS_MASK DesiredAccess,
POBJECT_TYPE ObjectType,
KPROCESSOR_MODE AccessMode,
PVOID ParseContext OPTIONAL,
PVOID * Object
);
找了一会儿发现extern "C"是给编译器的指令, 它解析函数名称,就像在 C 中一样,这三个 NTSYSAPI、NTSTATUS、NTAPI 属于 winwdows 内核 API,但我不我不明白这个语法到底是如何工作的,因为看起来有 3 个 return 类型没有意义,所以它们是像 java 中的某种预处理器注释吗?或者可能是 (SAL) Microsoft 源代码注释语言。
说到这里,问题来了,这个语法是标准 C++ 语言的一部分,还是只是微软在 to 编译器中添加的某种额外功能,应该如何阅读? 谢谢
只有一种 return 类型,NTSTATUS
,它是枚举。其他是函数调用的修饰符,例如 NTAPI
解析为 __stdcall
,它修改了编译器调用函数的方式,而 NTSYSAPI
解析为 declspec(dllimport)
,它将函数标记为库导入。
另外这与SAL无关