rockdeeper
驱动牛犊
驱动牛犊
  • 注册日期2002-06-09
  • 最后登录2002-06-28
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1616回复:11

菜鸟求助:nt下的已知pci设备,我如何让驱动程序获得它的相关信息

楼主#
更多 发布于:2002-06-09 21:48
我在学写nt下的驱动,手头的资料只有一本书.该书没有给出具体查找某个设备的例子,只好向各位高手请教

我的编程对象是一块pci卡,vendor和devie id 我都有了.我在我的驱动程序中,该如何找到它呢?可以直接确定该设备吗?不行的话,还是要扫描registry数据?如果要扫描,在扫描时,我如何判断得到的设备是我的设备

brucezh
驱动老牛
驱动老牛
  • 注册日期2002-01-30
  • 最后登录2007-02-01
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2002-06-10 08:39
如果是wdm的程序,通过inf文件让系统给硬件加载驱动。把vid和did写入inf的相应位置,编译后安装。只要指定你的inf,系统会自己安装好的。
如果是vxd,我就不懂了。
打一枪……换个地方……再打一枪……
arthurtu
驱动巨牛
驱动巨牛
  • 注册日期2001-11-08
  • 最后登录2020-12-19
  • 粉丝0
  • 关注0
  • 积分26分
  • 威望161点
  • 贡献值0点
  • 好评度35点
  • 原创分0分
  • 专家分0分
  • 社区居民
板凳#
发布于:2002-06-10 08:58
NT用VxD?!
楼上的真会开玩笑啊。 :cool:
到Registry去找硬件。vendor ID和deviceID都有了,还认不出设备吗?
详细的,看Art Baker的《The Windows NT Device Driver Book: A Guide for programmers》,就是《。。。设计指南》那本书了。
rockdeeper
驱动牛犊
驱动牛犊
  • 注册日期2002-06-09
  • 最后登录2002-06-28
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2002-06-10 11:06
楼上的谢谢了.我用的参考书就是art baker的这一本,现在正在反复的看第7章.不过我找不到有关查找具体设备的例子呀...

谢谢各位帮忙.
zydcat
驱动老牛
驱动老牛
  • 注册日期2001-12-06
  • 最后登录2006-04-12
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2002-06-10 11:21
arthurt
nt下怎么使用vendor ID和deviceID
不要误导观众呀 :D :D :D
[color=red]肥虫虫[/color] [img]http://www.driverdevelop.com/forum/upload/bradley/2002-11-15_ig01.gif[/img]
zydcat
驱动老牛
驱动老牛
  • 注册日期2001-12-06
  • 最后登录2006-04-12
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2002-06-10 11:30
art baker的书是以isa做例子的。
pci的稍有不同:
看看这个函数的用法,对你有帮助。
lRet = HalGetBusDataByOffset( BusDataType,
                                ulBusNumber,
                                ulSlotNumber,
                                &l,
                                FIELD_OFFSET(PCI_COMMON_CONFIG, VendorID ),
                                sizeof(l));

//Check return value
  if ( lRet == 0 )
    //No specified bus
    return -1;
  else if ( l == (((ULONG )PCI_DEVICE_ID << 16) | PCI_VENDOR_ID) )
    //Device found
    return 1;
  else
    //Device not in this slot
    return 0;

[color=red]肥虫虫[/color] [img]http://www.driverdevelop.com/forum/upload/bradley/2002-11-15_ig01.gif[/img]
rockdeeper
驱动牛犊
驱动牛犊
  • 注册日期2002-06-09
  • 最后登录2002-06-28
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2002-06-10 11:39
晕了... :o :o :o该怎么办???那我直接轮巡的读cf8cfc来匹配行不行?如果这样匹配上的话,中断呀什么的资源分配又要怎么进行 :( :( :(
rockdeeper
驱动牛犊
驱动牛犊
  • 注册日期2002-06-09
  • 最后登录2002-06-28
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2002-06-10 11:42
我太急着会贴子了,zydcat兄谢谢了,我会仔细看的 :) :) :)
zydcat
驱动老牛
驱动老牛
  • 注册日期2001-12-06
  • 最后登录2006-04-12
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2002-06-10 11:45
我这有怎么样得到中断等资源的代码
要不要?
[color=red]肥虫虫[/color] [img]http://www.driverdevelop.com/forum/upload/bradley/2002-11-15_ig01.gif[/img]
rockdeeper
驱动牛犊
驱动牛犊
  • 注册日期2002-06-09
  • 最后登录2002-06-28
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2002-06-10 11:53
有的话当然太好了,我找相关的源程序找的好苦呀...

我要如何报答您呢?
zydcat
驱动老牛
驱动老牛
  • 注册日期2001-12-06
  • 最后登录2006-04-12
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2002-06-10 11:54
当然是给点分了, :D :D :D

 //Get bus assigned resource and report to system
  status = HalAssignSlotResources(
            puisRegistryPath,
            NULL,             //DriverClassName, optional, NULL for type \'Other\'
            pDriverObject,    //System transfered in driver obj pointer
            pDevObj,          //DeviceObject, optional
            pDevice->BusType,
            pDevice->ulBusNumber,
            pDevice->ulSlotNumber,
            &pResourcesLst);  //This API function find bus gave resource and store here

    if( !NT_SUCCESS( status ))
    {
IoDeleteSymbolicLink(&linkName);
IoDeleteDevice( pDevObj );
return status;
    }

  //Retrieve resource
  for(i=0; (ULONG)i< pResourcesLst->Count; i++)
  {
    pFullResource = &pResourcesLst->List;
    if( pFullResource->InterfaceType == pDevice->BusType &&
        pFullResource->BusNumber == pDevice->ulBusNumber)
    {
      for(j=0; (ULONG)j < pFullResource->PartialResourceList.Count; j++)
      {
        pPartResource = &pFullResource->PartialResourceList.PartialDescriptors[j];
        switch( pPartResource->Type)
        {
          case CmResourceTypePort:            //I/O address. This devcie use
                                              //BASE2 (Last one) for I/O register
            pDevice->BaseAddress = pPartResource->u.Port.Start;
            pDevice->IoPortCount = pPartResource->u.Port.Length;
            break;

          case CmResourceTypeInterrupt:       //Interrupt line
            pDevice->IntChan = pPartResource->u.Interrupt.Level;
            break;

          case CmResourceTypeDma:             //DMA channel
            pDevice->DmaChan = pPartResource->u.Dma.Channel;
            break;

          default:
            break;
        } //switch( pPartResource->Type)
      }//for(j=0; (ULONG)j
    }//if( pFullResource->InterfaceType == BusType
  }//for(i=0; (ULONG)i< pResourcesLst
[color=red]肥虫虫[/color] [img]http://www.driverdevelop.com/forum/upload/bradley/2002-11-15_ig01.gif[/img]
xiqi330
驱动牛犊
驱动牛犊
  • 注册日期2002-04-22
  • 最后登录2002-12-12
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2002-06-12 04:05
用driverwizard
王西点
游客

返回顶部