robertli
驱动牛犊
驱动牛犊
  • 注册日期2002-05-21
  • 最后登录2009-01-12
  • 粉丝0
  • 关注0
  • 积分7分
  • 威望12点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1944回复:11

2000下WDM驱动安装请教高人

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

最新喜欢:

abc0099abc009...
robertli
驱动牛犊
驱动牛犊
  • 注册日期2002-05-21
  • 最后登录2009-01-12
  • 粉丝0
  • 关注0
  • 积分7分
  • 威望12点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于: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检后,怎样才能调试它?
请大虾多帮忙,分不是问题!拜托!!
 
h13
h13
驱动老牛
驱动老牛
  • 注册日期2002-07-10
  • 最后登录2008-10-24
  • 粉丝1
  • 关注1
  • 积分0分
  • 威望2点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-01-06 08:43
我前两天也看了这个例子,我觉得有些误导呢。

1、CmResourceTypeMemory或CmResourceTypePort中的一个是因为他编的是一个打印机驱动,只会占用端口资源,那么就存在是直接访问还是内存映射访问的问题,所以用其中之一来判定。如果端口和内存资源都要用的话,肯定不能这样用了。
2、softice调入,转化,加载后可以叫出softice窗口,用file 文件名调出源程序,设置断点。然后启动你的调用驱动的程序,当程序调用驱动时softice会自动在你的断点处停下来。
<table> [color=#8040FF]神,常虚以凝而灵明湛定 气,常静以养而充盈流通[/color] </table>
robertli
驱动牛犊
驱动牛犊
  • 注册日期2002-05-21
  • 最后登录2009-01-12
  • 粉丝0
  • 关注0
  • 积分7分
  • 威望12点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-01-17 09:30
谢谢hl3大虾,你的回答给了我很多帮助。
再请教一个问题:在Softice中如何查看各参数的值?
另外,小弟想给你加分,该怎样操作呢?
新手上路,请多关照!
h13
h13
驱动老牛
驱动老牛
  • 注册日期2002-07-10
  • 最后登录2008-10-24
  • 粉丝1
  • 关注1
  • 积分0分
  • 威望2点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2003-01-17 10:36
watch 变量名

你的第一贴上有给分、该分 :D
<table> [color=#8040FF]神,常虚以凝而灵明湛定 气,常静以养而充盈流通[/color] </table>
robertli
驱动牛犊
驱动牛犊
  • 注册日期2002-05-21
  • 最后登录2009-01-12
  • 粉丝0
  • 关注0
  • 积分7分
  • 威望12点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2003-01-17 14:49
 谢了,给分!
wavelight
驱动老牛
驱动老牛
  • 注册日期2002-08-15
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2003-01-19 21:26
谢了,给分!


倒,  给的分在哪里呢?
 
都没有分怎么给???   :(  :D
<table style="filter: glow(color=red, strength=6)"><br><font color=white><b>我cool 故我在!<br></b></font></table> [img]http://www.driverdevelop.com/forum/upload/wavelight/2002-12-13_1.gif[/img]<table style="filter: glow(color=red, strength=6)"><br><font color=white><b>我在 故我cool!<br></b></font></table>
h13
h13
驱动老牛
驱动老牛
  • 注册日期2002-07-10
  • 最后登录2008-10-24
  • 粉丝1
  • 关注1
  • 积分0分
  • 威望2点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2003-01-20 17:40
[quote] 谢了,给分!


倒,  给的分在哪里呢?
 
都没有分怎么给???   :(  :D [/quote]

新手啦,没给就没给了 :)
<table> [color=#8040FF]神,常虚以凝而灵明湛定 气,常静以养而充盈流通[/color] </table>
robertli
驱动牛犊
驱动牛犊
  • 注册日期2002-05-21
  • 最后登录2009-01-12
  • 粉丝0
  • 关注0
  • 积分7分
  • 威望12点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2003-01-21 10:58
[quote][quote] 谢了,给分!


倒,  给的分在哪里呢?
 
都没有分怎么给???   :(  :D [/quote]

新手啦,没给就没给了 :) [/quote]

不会吧,老大。我一次性将所有的分都给给了你,怎么说没拿到呢?
难道给分有什么具体操作方法或规定? :) 小弟如又不是,定当该改正,请赐教.      :o
wavelight
驱动老牛
驱动老牛
  • 注册日期2002-08-15
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2003-01-21 16:46
指教一下新手放分方法:   :D

    首先, 看你的第一个帖子,你的头像下面有个红色的“问题分 数”项, 这个表示这个问题你给多少分。(而你的没有)
   2,如果没有,可以点击帖子下的 “改分”, 可以改分。
   3,然后就可以给分了。 点击帖子下面的“给分”(也就在改分旁边)。
   4,就有给分界面。---后面就不用说了.........
<table style="filter: glow(color=red, strength=6)"><br><font color=white><b>我cool 故我在!<br></b></font></table> [img]http://www.driverdevelop.com/forum/upload/wavelight/2002-12-13_1.gif[/img]<table style="filter: glow(color=red, strength=6)"><br><font color=white><b>我在 故我cool!<br></b></font></table>
wavelight
驱动老牛
驱动老牛
  • 注册日期2002-08-15
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2003-01-21 16:47
这么详细解答,不知道能不能蹭点分?   :D :D
<table style="filter: glow(color=red, strength=6)"><br><font color=white><b>我cool 故我在!<br></b></font></table> [img]http://www.driverdevelop.com/forum/upload/wavelight/2002-12-13_1.gif[/img]<table style="filter: glow(color=red, strength=6)"><br><font color=white><b>我在 故我cool!<br></b></font></table>
robertli
驱动牛犊
驱动牛犊
  • 注册日期2002-05-21
  • 最后登录2009-01-12
  • 粉丝0
  • 关注0
  • 积分7分
  • 威望12点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2003-01-22 14:37
给分了
游客

返回顶部