阅读:2717回复:2
关于NT式驱动与WDM不同点几问
我现在需要把一个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; |
|
沙发#
发布于:2010-06-15 10:41
幫頂
|
|
板凳#
发布于:2011-03-07 10:28
虽然我没这样改过,但我觉得这两个个差别挺大。你不如用wdf,然后把老的代码一点点加进去。
|
|