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

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

2017-7-13 11:55
3130

比如

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里寻找,一个告诉编译器在在别的模块找。 区别就在这里吗? 还有什么区别呢


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

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

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


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

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

2017-7-13 12:59
0
雪    币: 12848
活跃值: (9147)
能力值: ( 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
游客
登录 | 注册 方可回帖
返回
//