Windows XpDDK 下载地址

Windows XpDDK 下载地址,第1张

可以正常下载的:

WinNT4-DDK:http://www.vckbase.com/tools/drv/nt4ddk.zip (可以下载)

Win98-DDK:http://www.vckbase.com/tools/drv/98ddk.exe (可以下载)

Win2K-DDK: http://www.vckbase.com/tools/downtools.asp?id=31(可以下载)

Win XP:ftp://202.113.29.4/ISO/M$/WinDDK/winxp_ddk.rar(可以下载)

http://lengie.gbaopan.com(分了十四部分)

Win2K3:http://download.microsoft.com/download/9/0/f/90f019ac-8243-48d3-91cf-81fc4093ecfd/1830_usa_ddk.iso (ISO版)(http://www.microsoft.com/whdc/devtools/ddk/default.mspx)

下面的只是例子,没测试过

Win XP:ftp://166.111.30.174/pub0/01.software/Develop/driver/WinDDK/winxp_ddk.rar

上面那个多试几次就可以了,

还可以试试这个:

ftp://202.114.12.60/开发工具/DDK/WinDDK2003/MICROSOFT.WINDOWS.SERVER.V2003.IFS.DDK-ISO.LeDreactor.cue

ftp://202.114.12.60/开发工具/DDK/WinDDK2003/MICROSOFT.WINDOWS.SERVER.V2003.IFS.DDK-ISO.LeDreactor.bin

ftp://202.114.12.60/开发工具/DDK/DDK_XP.ISO

Win2K3:

ftp://202.113.29.4/ISO/M$/WinDDK/Windows.2003.SP1.DDK/

DDK是Device Development Kit,设备开发包的意思。如果你想开发一个设备驱动程序,如显卡驱动程序,就必须使用DDK。DDK没有包括在VC++中,必须从http://www.microsoft.com/ddk/下载。

1 首先在vc6里面设置ddk的include和lib路径,要安装好一个ddk,以前安装好的也可以,只要ddk目录还在就可以了,这里假设ddk目录是F:\WINDDK

那么该目录下还会有子目录,一般2660是xp的ddk,3790是win2003的sdk,随便用一种都无所谓。

在vc6里面,Tools -->Option -->Directoriers里面设置

Include路径

F:\WINDDK\3790\inc\wnet

F:\WINDDK\3790\INC\DDK\WNET

LIB路径

F:\WINDDK\3790\LIB\WNET\I386

DDK的路径要放到最先

这些设置好了,就可以开始下一步了。有时候,你还需要用到最新的SDK,那么请同样把sdk目录添加进去,sdk应该在ddk后面,不过一般无所谓

2 用vc新建一个工程,选择Windows的空的工程,然后添加一个cpp文件,内容如下:

extern "C"

{

#include <ntddk.h>

}

NTSTATUS DriverEntry(PDRIVER_OBJECT pDriverObject, PUNICODE_STRING pRegistryPath)

{

NTSTATUS NtStatus = STATUS_SUCCESS

UNICODE_STRING usDriverName, usDosDeviceName

DbgPrint("DriverEntry Called \r\n")

RtlInitUnicodeString(&usDriverName, L"\\Device\\Example")

RtlInitUnicodeString(&usDosDeviceName, L"\\DosDevices\\Example")

DbgPrint("%S",usDriverName)

return NtStatus

}

这里需要用到 extern "C" 才包含 ntddk.h,为什么呢?因为,如果不这样做,在cpp文件中,默认以为 DbgPrint 这些函数是c++规则的,那么就导致错误

unresolved external symbol "unsigned long __cdecl DbgPrint(char *,...)" (?DbgPrint@@YAKPADZZ)

3 这时候直接编译,那么就会有错误

f:\winddk\3790\inc\ddk\wnet\ntddk.h(11545) : error C2146: syntax error : missing '' before identifier 'ContextRecord'

f:\winddk\3790\inc\ddk\wnet\ntddk.h(11545) : error C2501: 'PCONTEXT' : missing storage-class or type specifiers

f:\winddk\3790\inc\ddk\wnet\ntddk.h(11545) : error C2501: 'ContextRecord' : missing storage-class or type specifiers

f:\winddk\3790\inc\ddk\wnet\ntddk.h(12331) : fatal error C1189: #error : "no target architecture"

因为,没有定义任何的ddk的目标体系,这时候,需要在 C++设置Preprocessor definitions里面,添加 预定义_X86_,当然,你也可以在cpp Include ntddk.h 文件之前这样定义

#define _X86_

4 继续编译,错误为:

DriverMain.obj : error LNK2001: unresolved external symbol __imp__RtlInitUnicodeString@8

DriverMain.obj : error LNK2001: unresolved external symbol _DbgPrint

LIBCD.lib(wincrt0.obj) : error LNK2001: unresolved external symbol _WinMain@16

这时候需要在link -->Object/library Modules去掉全部默认的lib,添加 ntoskrnl.lib并且在Output里面更改Base Address为0x10000、Entry-point symbol为DriverEntry

并且把/subsystem:windows 改为 /subsystem:native

5 保存,编译,还有一个错误

DriverMain.obj : error LNK2001: unresolved external symbol __chkesp

这个需要在C++选项下面,把/GZ 这个参数删除,默认下,debug模式,vc6会添加这个选项。我们不需要函数调用返回时对esp进行错误检查,可以去掉这个选项

6 编译通过了,但是还是需要修改一下,首先输出的是.sys而不应该是.exe,这个可以到link选项下修改

我们还可以添加一个编译选项 /driver 或者/DRIVER:WDM 有或者 /DRIVER:UP (这个选项表明,该驱动不能用于多处理器环境)

7 还有一点应该修改的是C++ -->Code Generation -->Calling convention:修改为 __stdcall 并且C++ Language里面把所有特性都去掉,什么 exception handling以及Enable Run-Time Type Inform去掉

并且由于这个是驱动,所以Debug Info应该使用C7 Compatible,这样可以让softice调试驱动可以载入符号

并且link选项,应该把Link incrementally去掉,Debug Info应该选择 Both formats以保证各种调试器的兼容性。

8现在就可以正确编译了,不过还有以下错误,无法更正

F:\WINDDK\3790\inc\wnet\ntdef.h(963) : warning C4163: '_rotl64' : not available as an intrinsic function

F:\WINDDK\3790\inc\wnet\ntdef.h(965) : warning C4163: '_rotr64' : not available as an intrinsic function

F:\WINDDK\3790\INC\DDK\WNET\ntddk.h(7423) : warning C4035: 'InterlockedExchange' : no return value

F:\WINDDK\3790\INC\DDK\WNET\ntddk.h(7477) : warning C4035: 'InterlockedExchangeAdd' : no return value

F:\WINDDK\3790\INC\DDK\WNET\ntddk.h(7508) : warning C4035: 'InterlockedCompareExchange' : no return value

F:\WINDDK\3790\INC\DDK\WNET\ntddk.h(7723) : warning C4163: '_ReadWriteBarrier' : not available as an intrinsic function

查了一下,没有找到解决方法,好像不影响驱动,就不管它了


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/tougao/6731109.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-03-27
下一篇2023-03-27

发表评论

登录后才能评论

评论列表(0条)

    保存