【发布时间】:2012-05-04 22:23:58
【问题描述】:
我是 Win 环境的新手,尝试编写使用 win 内核 API 但在 Ubuntu 10.04 上的代码......使用 mingw32(更具体地说,i586-mingw32msvc)
我的代码:
#include<ddk/winddk.h>
int main()
{
return 0;
}
但是我在 ddk/winddk.h 标头中遇到了很多错误: 编译为:i586-mingw32msvc-gcc WaitForSingleObj_2.c
所有错误都是这样的:
/usr/lib/gcc/i586-mingw32msvc/4.2.1-sjlj/../../../../i586-mingw32msvc/include/ddk/winddk.h:9208: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'NTSTATUS'
我错过了什么吗?当我尝试使用头文件 iostream 和 windows.h 进行编译时,效果很好。
编辑:
#include<ntdef.h>
#include<ddk/ntddk.h>
#include<ddk/winddk.h>
#include<ddk/ntddndis.h>
int main()
{
KTIMER *timer;
KeInitializeTimer(timer);
return 0;
}
直到 KTIMER 没问题,现在是新错误: /tmp/cc0epAQA.o:WaitForSingleObj_2.c:(.text+0x1d): 未定义引用`_imp_KeInitializeTimer@4' collect2: ld 返回 1 个退出状态
谁能告诉我,现在要包含哪个头文件?
编辑:[正如其他人已经评论过的,我经历过(!)请尽量避免使用其他平台进行 Windonws 内核开发]
我切换到 Visual C++ Express,下载了 WDK,从 Project Property->c/c++ .. ->Additional Include directory (C:\WinDDK\7600.16385.1\inc\ddk;C:\WinDDK \7600.16385.1\inc\api;)
但是(我讨厌这个但是!)我遇到了很多编译错误,比如
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\crtdefs.h(543): error C2143: syntax error : missing ')' before 'const'
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\crtdefs.h(543): error C2143: syntax error : missing '{' before 'const'
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\crtdefs.h(543): error C2059: syntax error : ','
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\crtdefs.h(543): error C2059: syntax error : ')'
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\crtdefs.h(550): error C2143: syntax error : missing ')' before 'const'
我的代码:
#include <wdm.h>
int mian()
{
/*
* PKTIMER Timer;
*/
}
如果有人有想法请帮忙!
【问题讨论】:
-
你确定这是顶级头文件吗?您需要哪些功能和类型?这是要包含的正确头文件吗?
-
好吧,
Windows.h在内核模式代码中也没有意义。此外,即使您不喜欢听到它,也应该避免使用非 WDK 编译器编写驱动程序。如果需要,请使用 WINE。无论哪种方式,顶级标题取决于您的驱动程序模型,并且是ntddk.h或wdm.h... -
我会使用微软的工具链来做这件事,否则在交叉编译中会出错的地方太多了。 VmWare Player 是免费的,因此您仍然可以“在”Linux 下进行开发,尽管您可能需要 Windows 本身的许可证。 VS Express 也是免费的,但您必须确认它可以执行设备驱动程序。
-
@Dhara Darji:不需要 VS。需要的是 WDK 构建环境,它完全独立于 VS 和 VS 编译器(过去一直依赖于 XP DDK,可能会在 VS 11 中再次依赖)。它们都是命令行工具,出于所有实际目的,它们都应该在 WINE 中工作。这意味着您仍然可以在 Linux 上使用您最喜欢的 IDE/编辑器...
-
由于@STATUS_ACCESS_DENIED 和paxdiablo 解释的原因,您的计划几乎肯定会失败。我建议用锋利的棍子戳自己的眼睛,而不是尝试使用不受支持的工具开发 Windows KM 驱动程序。哦,你的司机获得 MS 认证的几率是多少?几乎为零。