在编写驱动程序的过程中,会经常遇到要调用一些没有在文档中公开的函数,这个该如何处理呢?
其实在内核中调用不像ring3层那样麻烦,只需要重新声明一下,下面就以ZwQuerySystemInformation为例示范一下:
NTKERNELAPI
NTSTATUS ZwQuerySystemInformation(
IN ULONG SystemInformationClass,
IN OUT PVOID SystemInformation,
IN ULONG SystemInformationLength,
OUT PULONG ReturnLength OPTIONAL
);
注意最前边的NTKERNELAPI,这是一个宏,具体做什的不清楚,在这里很关键,是必须的!
至于这个宏的来历,几经周折,在winddk.h这个头文件中找到了它的声明:
#
#if (defined(_NTDRIVER_) || defined(_NTDDK_) || defined(_NTIFS_) || defined(_NTHAL_)) && !defined(_BLDR_)
#define NTKERNELAPI DECLSPEC_IMPORT // wdm
#else
#define NTKERNELAPI
#endif
这个我还真不敢准确地说是干啥用的,经验不够,不敢乱发言,反正就这么用着行了,有大牛路过的时候麻烦给俺们科普一下,扫下盲~~~