阅读:1944回复:11
2000下WDM驱动安装请教高人
小弟用98ddk开发了一个批pci驱动,载就98下安装运行良好。当我用
2000ddk在2000下重新构造生成sys文件,并用适应于2000的inf文件安装完成后,系统提示要重起硬件才能有效,重起后系统提示“不能启动硬件”。 问题是:1.98和2000下的驱动程序编写又和不同吗? 2.如果用SOFTICE调试怎样设断点? (参考书籍:《windows wdm 设备驱动程序开发指南》chris cant 著) 请各位大虾多多帮忙,我愿出高分(不好意思,系统只允许一次给20分)!!!! |
|
最新喜欢:abc009... |
沙发#
发布于:2003-01-05 15:53
我仔细分析了一下,发现问题出在,WDMPNP中当硬件启动,获取系统分派资源时“resource->Type”的值有问题,此处代码为:
if( AllocatedResources==NULL || AllocatedResources->Count==0) { DebugPrintMsg(\"ListResources: No allocated resources\"); return; } // Get to actual resources PCM_PARTIAL_RESOURCE_LIST list = &AllocatedResources->List[0].PartialResourceList; PCM_PARTIAL_RESOURCE_DESCRIPTOR resource = list->PartialDescriptors; ULONG NumResources = list->Count; DebugPrint(\"ListResources: %d resource lists %d resources\", AllocatedResources->Count, NumResources); bool GotError = false; // Go through each allocated resource for( ULONG resno=0; resno<NumResources; resno++,resource++) { switch( resource->Type) { case CmResourceTypePort: { PHYSICAL_ADDRESS PortStartAddress = resource->u.Port.Start; ULONG PortLength = resource->u.Port.Length; bool PortNeedsMapping = (resource->Flags & CM_RESOURCE_PORT_IO)==0; bool PortInIOSpace = !PortNeedsMapping; DebugPrint(\"ListResources: Port %L Length %d NeedsMapping %d\", PortStartAddress, PortLength, PortNeedsMapping); } break; case CmResourceTypeMemory: { PHYSICAL_ADDRESS PortStartAddress = resource->u.Memory.Start; ULONG PortLength = resource->u.Memory.Length; bool PortInIOSpace = false; bool PortNeedsMapping = true; DebugPrint(\"ListResources: Memory %L Length %d\", PortStartAddress, PortLength); break; } case CmResourceTypeDma: case CmResourceTypeDeviceSpecific: case CmResourceTypeBusNumber: default: DebugPrint(\"ListResources: Unrecognised resource type %d\", resource->Type); // GotError = true; return STATUS_DEVICE_CONFIGURATION_ERROR; } } } 我这一段是参考:《windows wdm 设备驱动程序开发指南》chris cant 著 例子中的“WDMIo”一例编写。 问题是: 1。为何参数“resource->Type”的值不是“CmResourceTypeMemory”或“CmResourceTypePort”中的一个? 2。我用Softice的“Sombol Loader”加入sys文件,并转换成nms检后,怎样才能调试它? 请大虾多帮忙,分不是问题!拜托!! |
|
板凳#
发布于:2003-01-06 08:43
我前两天也看了这个例子,我觉得有些误导呢。
1、CmResourceTypeMemory或CmResourceTypePort中的一个是因为他编的是一个打印机驱动,只会占用端口资源,那么就存在是直接访问还是内存映射访问的问题,所以用其中之一来判定。如果端口和内存资源都要用的话,肯定不能这样用了。 2、softice调入,转化,加载后可以叫出softice窗口,用file 文件名调出源程序,设置断点。然后启动你的调用驱动的程序,当程序调用驱动时softice会自动在你的断点处停下来。 |
|
|
地板#
发布于:2003-01-17 09:30
谢谢hl3大虾,你的回答给了我很多帮助。
再请教一个问题:在Softice中如何查看各参数的值? 另外,小弟想给你加分,该怎样操作呢? 新手上路,请多关照! |
|
地下室#
发布于:2003-01-17 10:36
watch 变量名
你的第一贴上有给分、该分 :D |
|
|
5楼#
发布于:2003-01-17 14:49
谢了,给分!
|
|
6楼#
发布于:2003-01-19 21:26
谢了,给分! 倒, 给的分在哪里呢? 都没有分怎么给??? :( :D |
|
|
7楼#
发布于:2003-01-20 17:40
[quote] 谢了,给分! 倒, 给的分在哪里呢? 都没有分怎么给??? :( :D [/quote] 新手啦,没给就没给了 :) |
|
|
8楼#
发布于:2003-01-21 10:58
[quote][quote] 谢了,给分! 倒, 给的分在哪里呢? 都没有分怎么给??? :( :D [/quote] 新手啦,没给就没给了 :) [/quote] 不会吧,老大。我一次性将所有的分都给给了你,怎么说没拿到呢? 难道给分有什么具体操作方法或规定? :) 小弟如又不是,定当该改正,请赐教. :o |
|
9楼#
发布于:2003-01-21 16:46
指教一下新手放分方法: :D
首先, 看你的第一个帖子,你的头像下面有个红色的“问题分 数”项, 这个表示这个问题你给多少分。(而你的没有) 2,如果没有,可以点击帖子下的 “改分”, 可以改分。 3,然后就可以给分了。 点击帖子下面的“给分”(也就在改分旁边)。 4,就有给分界面。---后面就不用说了......... |
|
|
10楼#
发布于:2003-01-21 16:47
这么详细解答,不知道能不能蹭点分? :D :D
|
|
|
11楼#
发布于:2003-01-22 14:37
给分了
|
|