阅读:1312回复:7
有请minsoft
为了不再背上扰乱市场次序的罪名!先用这些分答谢你吧!
其实我觉得也不是什么哄抬物价――现在搞这个的本来就少了,很多主版都没这种ISA插嘈了:(物以稀为贵吗,不过好象900是太高了点,还请各位原谅小弟求知心切吧) 你能告诉我开发ISA驱动具体应该怎样工作(先干什么,再干什么吗)?有开发过的文档或程序例子吗?(虫虫大哥的有些用,可不是wdm的)。 dzjhnld@163.com谢谢了先!! |
|
最新喜欢:chinab...
|
沙发#
发布于:2002-11-12 09:08
ISA设备你也要看是否支持PnP的,如果支持的话,那好办,与PCI设备差不多(它用的也是PCI总线嘛);如果不支持,那你在AddDevice中就要自己去查找设备。
设备查找到并创建好后,具体的操作要看你的硬件了。 |
|
板凳#
发布于:2002-11-12 09:32
ISA设备你也要看是否支持PnP的,如果支持的话,那好办,与PCI设备差不多(它用的也是PCI总线嘛);如果不支持,那你在AddDevice中就要自己去查找设备。 不支持pnp的isa可以有adddevice例程吗,我一般都是在driverentry中查找设备的 |
|
|
地板#
发布于:2002-11-12 10:09
不支持PNP的ISA一样的可以有AddDevice,只是它的安装不能象NT DRVIVER那样直接修改注册表,添加Serive那样,而是遵守设备添加向导添加。
我可以贴一个例子出来,只怕太大。 |
|
|
地下室#
发布于:2002-11-12 10:22
一个实例:不需要任何查询,不过注意设备的I/O、中断资源等都要在INF中声明。同时可以看看一个DRIVER支持多个相同的设备
#include <stdio.h> #include <wchar.h> #define MAXDEVICES 15 NTSTATUS \\ DriverEntry(IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING RegistryPath) { PDEVICE_OBJECT pdo=NULL; NTSTATUS status=STATUS_SUCCESS; DriverObject->DriverExtension->AddDevice=DRV_AddDevice; DriverObject->DriverUnload=DRV_Unload; //DriverObject->DriverStartIo=DRV_StartIo; DriverObject->MajorFunction[IRP_MJ_CREATE]=DRV_OpenClose; DriverObject->MajorFunction[IRP_MJ_CLOSE]=DRV_OpenClose; //DriverObject->MajorFunction[IRP_MJ_READ]=DRV_ReadWrite; //DriverObject->MajorFunction[IRP_MJ_WRITE]=DRV_ReadWrite; DriverObject->MajorFunction[IRP_MJ_DEVICE_CONTROL]=DRV_IoCtrl; DriverObject->MajorFunction[IRP_MJ_PNP]=DRV_PnPDispatch; DriverObject->MajorFunction[IRP_MJ_POWER]=DRV_PnPDispatch; return status; } void DRV_Unload(IN PDRIVER_OBJECT DriverObject) { KdPrint((\"Driver Unloading\\nDriverObject:%08x\",DriverObject)); } NTSTATUS DRV_AddDevice(IN PDRIVER_OBJECT DriverObject,IN PDEVICE_OBJECT pdo) { NTSTATUS status=STATUS_SUCCESS; PDEVICE_OBJECT fdo; PDEVICE_EXTENSION pde; UNICODE_STRING devname; WCHAR namebuf[40]; USHORT no=0; do { swprintf(namebuf,L\"%s%02x\",L\"\\\\DosDevices\\\\XXXX\",no); RtlInitUnicodeString(&devname, namebuf); no++; if(no>MAXDEVICES) break; status=IoCreateDevice(DriverObject, sizeof(DEVICE_EXTENSION), &devname, FILE_DEVICE_UNKNOWN, 0, FALSE, &fdo);//这个地方很简单是不是?MS的一个后门。 } while(status==STATUS_OBJECT_NAME_EXISTS || status==STATUS_OBJECT_NAME_COLLISION); //already a device if(!NT_SUCCESS(status)) { KdPrint((\"Create Device Fail\")); return status; } pde=(PDEVICE_EXTENSION)fdo->DeviceExtension; pde->DeviceObject=fdo; pde->usage=TRUE; fdo->Flags&=~DO_DEVICE_INITIALIZING; fdo->Flags|=DO_BUFFERED_IO; pde->StackDeviceObject=IoAttachDeviceToDeviceStack(fdo,pdo); pde->readwriteflag=5; //Initialize DeviceExtension Parameters RtlFillMemory(pde->channelcontroler,6*sizeof(CHA_Control),0); pde->complete[0]=pde->complete[1]=TRUE; pde->intcount[0]=pde->intcount[1]=0; RtlFillMemory(pde->DATA,5,50); //IoInitializeDpcRequest(fdo,DpcForIsr); //RtlFreeUnicodeString(&devname); return status; } 其它部份就和普通WDM一样了。 |
|
|
5楼#
发布于:2002-11-12 11:43
不支持PNP的ISA一样的可以有AddDevice,只是它的安装不能象NT DRVIVER那样直接修改注册表,添加Serive那样,而是遵守设备添加向导添加。 能给我开发的文档吗? |
|
|
6楼#
发布于:2002-11-12 11:45
唉,好人做到底,到时怕你又要问INF方面的东东,这里不妨给一个INF例子,适用于ISA设备,同时用于两种操作系统WIN98/WIN2K,注意要用硬件向导添加设备,且选择从磁盘安装,“其他设备”类。真正实现一个二进制文件适用两种操作系统。
设备名为:ISAXyZ。 [Version] Signature=$CHICAGO$ Class=ABCISADAS ClassGuid={580D2CA2-4246-11D5-8997-9374874D9770} Provider=%String0% [ClassInstall32] AddReg=DAC.addreg [DAC.addreg] HKR,,,2,ABCISADAS HKR,,ICON,2,-5 [DestinationDirs] DefaultDestDir=10,System32\\Drivers [DestinationDirs.NT] DefaultDestDir=12 [Manufacturer] %String1%=DeviceList [DeviceList] %String2%=XyzAInstall,*ISA-XyzA [XyzAInstall] CopyFiles=DriverCopyFiles AddReg=DriverAddReg,DAC.addreg LogConfig=ISAXyza [DriverCopyFiles] ISAXyzA.SYS [DriverAddReg] HKR,,DevLoader,0,*ntkern HKR,,NTMPDriver,0,ISAXyzA.SYS [XyzAInstall.NT] CopyFiles=DriverCopyFiles LogConfig=ISAXyza [XyzAInstall.NT.Services] AddService=ISAXyzA,2,XyzASerivce [XyzASerivce] ServiceType = 1 StartType = 2 ErrorControl = 1 ServiceBinary=%12%\\ISAXyzA.sys [ControlFlags] [SourceDisksNames] 1=ABCISA-XyzADriver,, [SourceDisksFiles] ISAXyzA.SYS=1 [Strings] String0=\"ABC\" String1=\"ABC\" String2=\"ABC ISA-XyzA\" [ISAXyza] ConfigPriority=NORMAL //IOConfig=20@200-3ff%ffff(3ff::) //这个地方放置你的I/O、IRQ资源请求,具体格式参看DDK。 |
|
|
7楼#
发布于:2002-11-12 11:48
你还需要什么呢?
其实做WDM时你根本可以不考虑是PCI还是ISA,只是最后写INF的时候不同。你会做PCI就肯定会做ISA的WDM Driver. 话说到这份上了,其它的开发文档都是多余,看DDK就行了。 |
|
|