| 
			 
					阅读:2101回复:11
				 
				2000下WDM驱动安装请教高人
					小弟用98ddk开发了一个批pci驱动,载就98下安装运行良好。当我用
 
							2000ddk在2000下重新构造生成sys文件,并用适应于2000的inf文件安装完成后,系统提示要重起硬件才能有效,重起后系统提示“不能启动硬件”。 问题是:1.98和2000下的驱动程序编写又和不同吗? 2.如果用SOFTICE调试怎样设断点? (参考书籍:《windows wdm 设备驱动程序开发指南》chris cant 著) 请各位大虾多多帮忙,我愿出高分(不好意思,系统只允许一次给20分)!!!!  | 
	|
					
						最新喜欢: | 
	
| 
			 沙发# 
								发布于: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				
			
					给分了				 
							 | 
	|