首页
社区
课程
招聘
调用NtCreateFile时的一个连接错误.
发表于: 2006-10-18 11:00 8407

调用NtCreateFile时的一个连接错误.

2006-10-18 11:00
8407
error LNK2019:
无法解析的外部符号 "long __cdecl NtCreateFile(参数省略)" (NtCreateFile@@YAJPAPAXKPAU_OBJECT_ATTRIBUTES@@PAU_IO_STATUS_BLOCK@@PAT_LARGE_INTEGER@@KKKKPAXK@Z) , 该符号在函数 。。。中被引用

这个连接错误是我在应用层的程序中调用NtCreateFile()时发生的。
NtCreateFile()是在ntdll.dll中的,我添加库ntdll.lib后这个错误没消失,而且还多了两个错误。请问怎么消除这个错误?多谢 :-)

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

收藏
免费 0
支持
分享
最新回复 (11)
雪    币: 2384
活跃值: (766)
能力值: (RANK:410 )
在线值:
发帖
回帖
粉丝
2
在函数定义前面加上一句extern "C",如:
extern "C" long __stdcall NtCreateFile(...);
2006-10-18 11:14
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
NtCreateFile()声明在头文件Winternl.h中,原定义为:
NTSTATUS
NtCreateFile (
    OUT PHANDLE FileHandle,
    IN ACCESS_MASK DesiredAccess,
    IN POBJECT_ATTRIBUTES ObjectAttributes,
    OUT PIO_STATUS_BLOCK 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
    );

我把Winternl.h复制出来,修改定义为以下几种形式,都不行啊。
extern "C"
NTSTATUS
NtCreateFile (...);

或:
NTSTATUS
extern "C"
NtCreateFile (...);

或:
NTSTATUS
extern "C" long __stdcall
NtCreateFile (...);

应该怎样改呢?
2006-10-18 11:58
0
雪    币: 200
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
为什么不试试动态装载这个函数呢?
2006-10-18 13:36
0
雪    币: 222
活跃值: (10)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
5
最初由 oioiooio 发布
NtCreateFile()声明在头文件Winternl.h中,原定义为:
NTSTATUS
NtCreateFile (
OUT PHANDLE FileHandle,
IN ACCESS_MASK DesiredAccess,
........


extern "C" NTSTATUS __stdcall NtCreateFile();
2006-10-18 13:37
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
最初由 drwch 发布
extern "C" NTSTATUS __stdcall NtCreateFile();


也出错:(
2006-10-18 14:08
0
雪    币: 302
活跃值: (410)
能力值: ( LV12,RANK:410 )
在线值:
发帖
回帖
粉丝
7
最初由 oioiooio 发布
也出错:(


__cdecl 和 __stdcall不同,换过来。
2006-10-18 21:25
0
雪    币: 291
活跃值: (213)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
8
ntdll.lib是肯定要添加的
2006-10-19 11:39
0
雪    币: 603
活跃值: (617)
能力值: ( LV12,RANK:660 )
在线值:
发帖
回帖
粉丝
9
对啊,是链接错误,不是编译错误~
2006-10-19 12:01
0
雪    币: 222
活跃值: (10)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
10
突然想起来,这个应该是ZwCreateFile,不是NtCreateFile啊
2006-10-19 23:33
0
雪    币: 199
活跃值: (74)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
4楼 2006-10-18,13:36      

--------------------------------------------------------------------------------
为什么不试试动态装载这个函数呢?

对!!!还是动态简单
2006-10-20 08:54
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
显式装载果然管用。哈哈,一扫数日以来的阴霾。多谢各位!!
2006-10-20 16:52
0
游客
登录 | 注册 方可回帖
返回
//