dzjhnld
驱动老牛
驱动老牛
  • 注册日期2002-09-30
  • 最后登录2002-11-19
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1286回复:7

有请minsoft

楼主#
更多 发布于:2002-11-12 08:46
为了不再背上扰乱市场次序的罪名!先用这些分答谢你吧!
其实我觉得也不是什么哄抬物价――现在搞这个的本来就少了,很多主版都没这种ISA插嘈了:(物以稀为贵吗,不过好象900是太高了点,还请各位原谅小弟求知心切吧)
你能告诉我开发ISA驱动具体应该怎样工作(先干什么,再干什么吗)?有开发过的文档或程序例子吗?(虫虫大哥的有些用,可不是wdm的)。
dzjhnld@163.com谢谢了先!!

最新喜欢:

chinabirdchinab...
天下风云出我辈 一入江湖岁月催 鸿图霸业谈笑中 不胜人生一场醉 罪过罪过!!
blue
驱动大牛
驱动大牛
  • 注册日期2001-04-25
  • 最后登录2010-10-15
  • 粉丝0
  • 关注0
  • 积分55分
  • 威望12点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2002-11-12 09:08
ISA设备你也要看是否支持PnP的,如果支持的话,那好办,与PCI设备差不多(它用的也是PCI总线嘛);如果不支持,那你在AddDevice中就要自己去查找设备。
设备查找到并创建好后,具体的操作要看你的硬件了。
zydcat
驱动老牛
驱动老牛
  • 注册日期2001-12-06
  • 最后登录2006-04-12
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2002-11-12 09:32
ISA设备你也要看是否支持PnP的,如果支持的话,那好办,与PCI设备差不多(它用的也是PCI总线嘛);如果不支持,那你在AddDevice中就要自己去查找设备。
设备查找到并创建好后,具体的操作要看你的硬件了。


不支持pnp的isa可以有adddevice例程吗,我一般都是在driverentry中查找设备的
[color=red]肥虫虫[/color] [img]http://www.driverdevelop.com/forum/upload/bradley/2002-11-15_ig01.gif[/img]
minsoft
驱动小牛
驱动小牛
  • 注册日期2001-07-30
  • 最后登录2007-03-06
  • 粉丝0
  • 关注0
  • 积分8分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2002-11-12 10:09
不支持PNP的ISA一样的可以有AddDevice,只是它的安装不能象NT DRVIVER那样直接修改注册表,添加Serive那样,而是遵守设备添加向导添加。
我可以贴一个例子出来,只怕太大。
少了e,就少了全部
minsoft
驱动小牛
驱动小牛
  • 注册日期2001-07-30
  • 最后登录2007-03-06
  • 粉丝0
  • 关注0
  • 积分8分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于: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一样了。
少了e,就少了全部
dzjhnld
驱动老牛
驱动老牛
  • 注册日期2002-09-30
  • 最后登录2002-11-19
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2002-11-12 11:43
不支持PNP的ISA一样的可以有AddDevice,只是它的安装不能象NT DRVIVER那样直接修改注册表,添加Serive那样,而是遵守设备添加向导添加。
我可以贴一个例子出来,只怕太大。

能给我开发的文档吗?
天下风云出我辈 一入江湖岁月催 鸿图霸业谈笑中 不胜人生一场醉 罪过罪过!!
minsoft
驱动小牛
驱动小牛
  • 注册日期2001-07-30
  • 最后登录2007-03-06
  • 粉丝0
  • 关注0
  • 积分8分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
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。
少了e,就少了全部
minsoft
驱动小牛
驱动小牛
  • 注册日期2001-07-30
  • 最后登录2007-03-06
  • 粉丝0
  • 关注0
  • 积分8分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2002-11-12 11:48
你还需要什么呢?
其实做WDM时你根本可以不考虑是PCI还是ISA,只是最后写INF的时候不同。你会做PCI就肯定会做ISA的WDM Driver.
话说到这份上了,其它的开发文档都是多余,看DDK就行了。
少了e,就少了全部
游客

返回顶部