首页
社区
课程
招聘
[求助]当驱动编程需要用到ntos导出函数时
发表于: 2017-7-13 11:55 3120

[求助]当驱动编程需要用到ntos导出函数时

2017-7-13 11:55
3120

比如

NTKERNELAPI NTSTATUS ObReferenceObjectByName(
IN PUNICODE_STRING ObjectPath,
IN ULONG Attributes,
IN PACCESS_STATE PassedAccessState OPTIONAL,
IN ACCESS_MASK DesiredAccess OPTIONAL,
IN POBJECT_TYPE ObjectType,
IN KPROCESSOR_MODE AccessMode,
IN OUT PVOID ParseContext OPTIONAL,
OUT PVOID *ObjectPtr
);
extern NTSTATUS ObReferenceObjectByName(
IN PUNICODE_STRING ObjectPath,
IN ULONG Attributes,
IN PACCESS_STATE PassedAccessState OPTIONAL,
IN ACCESS_MASK DesiredAccess OPTIONAL,
IN POBJECT_TYPE ObjectType,
IN KPROCESSOR_MODE AccessMode,
IN OUT PVOID ParseContext OPTIONAL,
OUT PVOID *ObjectPtr
);


用任何一个编译都可通过, 一个告诉编译器在别的DLL里寻找,一个告诉编译器在在别的模块找。 区别就在这里吗? 还有什么区别呢


[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (3)
雪    币: 145
活跃值: (40)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
2

两种写法,  编译后的结果一样.
严格来说第二种更'专业';,  extern  显示说明这个API是在'其他/第三方'模块中,  你只是引用.
第一种写法,  如果不了解内核开发的人看到这个代码,  可能会认为这个API是你自己写的.


实际上 第一种写法中的NTKERNELAPI 宏定义就是 __declspec(dllimport) .  跟extern同样的意思.   

不管怎样编译后的结果是一样的.

2017-7-13 12:59
0
雪    币: 12848
活跃值: (9142)
能力值: ( LV9,RANK:280 )
在线值:
发帖
回帖
粉丝
3
第一个似乎不需要依赖ntos的lib
2017-7-13 13:12
0
雪    币: 272
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
hzqst 第一个似乎不需要依赖ntos的lib
要的,工程默认包含了该lib
2017-7-13 14:39
0
游客
登录 | 注册 方可回帖
返回
//