zl_per
驱动牛犊
驱动牛犊
  • 注册日期2004-04-16
  • 最后登录2004-09-23
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:2717回复:2

关于NT式驱动与WDM不同点几问

楼主#
更多 发布于:2004-05-07 15:47
我现在需要把一个nt式驱动改为wdm驱动,故遇到如下问题:
1.NT驱动再DriverEntry()中有扫描总线以查找设备的程序,如:
for (busNumber = 0; !adapterFound && moreBuses; busNumber++) {
for (deviceNumber = 0;
         !adapterFound && deviceNumber < PCI_MAX_DEVICES;
             deviceNumber++)  {
            slotNumber.u.bits.Reserved = 0;
            slotNumber.u.bits.DeviceNumber = deviceNumber;
            slotNumber.u.bits.FunctionNumber = 0;
......
if ( (configInfo->VendorID == CARD_PCI_VID) &&
                  (configInfo->DeviceID == CARD_PCI_DID) )  {
ULONG index;
.....
在wdm中好像不用这样的扫描过程,仅通过匹配驱动程序和硬件设备的硬件ID就能创建fdo吗?

2.在NT驱动的DriverEntry()中有一堆和硬件相关的函数,如:
HalGetBusData,HalGetAdapter,HalAssignSlotResources,HalGetInterruptVector,HalTranslateBusAddress
但在wdm中他们是不可用的。那应该如何完成相关的操作呢?

3.在WDM的DriverEntry()中仅仅设置类似于下面的回调例程入口就可以了吗?其他还要做什么?
DriverObj->MajorFunction[IRP_MJ_CREATE] =  OsrCreateClose;
DriverObj->MajorFunction[IRP_MJ_CLOSE]    =  OsrCreateClose;
DriverObj->MajorFunction[IRP_MJ_READ]           =  OsrRead;
DriverObj->MajorFunction[IRP_MJ_WRITE]          =  OsrWrite;
DriverObj->MajorFunction[IRP_MJ_DEVICE_CONTROL] =  OsrDeviceControl;
guessle
驱动牛犊
驱动牛犊
  • 注册日期2010-02-05
  • 最后登录2011-11-15
  • 粉丝0
  • 关注0
  • 积分16分
  • 威望141点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2010-06-15 10:41
幫頂
danny_li_99
驱动牛犊
驱动牛犊
  • 注册日期2010-04-21
  • 最后登录2011-03-25
  • 粉丝0
  • 关注0
  • 积分19分
  • 威望151点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2011-03-07 10:28
虽然我没这样改过,但我觉得这两个个差别挺大。你不如用wdf,然后把老的代码一点点加进去。
游客

返回顶部