ntdll中的native api功能非常强大,然而微软却没有提供用户态调用native api的接口,而这些native api所需要的数据结构微软也基本没有公布,幸好有了一批牛人的贡献,给出了很多native api的定义,让我们的生活免去了许多痛苦,本文在介绍了最基本的native api的调用方式之外,还介绍了一种更加优美,移植性更强的调用方式
调用方式一(一般方式):
第一步:声明函数指针
比如我们需要调用NtCreateFile函数,那么我们就需要根据NtCreateFile的定义来声明一个相同类型的函数指针(这样做会让编译器比较高兴)
typedef NTSTATUS (
*
MyNtCreateFile) (
OUT PHANDLE FileHandle,
IN ACCESS_MASK DesiredAccess,
IN POBJECT_ATTRIBUTES ObjectAttributes,
//
OUT PIO_STATUS_BLOCK IoStatusBlock,
OUT PVOID IoStatusBlock,
IN PLARGE_INTEGER AllocationSize OPTIONAL,
IN ULONG FileAttributes,
IN ULONG ShareAccess,
IN ULONG CreateDisposition,
IN ULONG CreateOptions,
IN PVOID EaBuffer OPTIONAL,
IN ULONG EaLength
);
MyNtCreateFile MyNtCreateFileFun;
第二步: 获取native api在natdll中的地址
MyNtCreateFileFun
=
(MyNtCreateFile)GetProcAddress (GetModuleHandle(
"
ntdll.dll
"</

本文介绍了两种调用ntdll中native API的方法,包括常规的声明函数指针和获取地址的方式,以及更优的通过添加ntdll.lib和统一头文件实现的方式,强调了后者在移植性和代码整洁方面的优势。
最低0.47元/天 解锁文章
671

被折叠的 条评论
为什么被折叠?



