bxn77
驱动牛犊
驱动牛犊
  • 注册日期2003-02-19
  • 最后登录2003-03-13
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1762回复:8

我是菜鸟,有没有一种简单的方法知道pci基址寄存器的内容,送20分

楼主#
更多 发布于:2003-03-05 09:52
哪位大虾可以告诉我啊?送20分

最新喜欢:

theseustheseu...
edgesoul
驱动牛犊
驱动牛犊
  • 注册日期2002-11-06
  • 最后登录2007-09-06
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-03-05 12:10
在DDK中有一个PCI工具,叫什么PCIXXX(记不太清了),可以用来观看PCI的一些信息,你可以试试。
yjhleaf
驱动小牛
驱动小牛
  • 注册日期2001-11-04
  • 最后登录2005-11-23
  • 粉丝0
  • 关注0
  • 积分15分
  • 威望2点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-03-06 21:39
windriver可以,win2k的话,驱动加载了就可以看了。
忽如一夜春风来,千树万树梨花开。
Xman
驱动大牛
驱动大牛
  • 注册日期2001-08-24
  • 最后登录2011-10-07
  • 粉丝0
  • 关注0
  • 积分343分
  • 威望127点
  • 贡献值0点
  • 好评度34点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-03-07 08:37
2K的DDK安装好后有个TOOL叫PCI configuration,
安装后在控制面板下!

用windriver更好!
[img]http://www.driverdevelop.com/forum/upload/Xman/2004-04-05_2004324183110706.jpg[/img]
zzht007
驱动牛犊
驱动牛犊
  • 注册日期2002-08-18
  • 最后登录2005-07-31
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2003-08-13 11:48
2000DDK下有个工具叫做PCIConfigruation
grant
驱动老牛
驱动老牛
  • 注册日期2001-05-14
  • 最后登录2007-04-13
  • 粉丝0
  • 关注0
  • 积分350分
  • 威望35点
  • 贡献值0点
  • 好评度35点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2003-08-14 15:52
给你两个程序。
一个是纯DOS下的,
一个是在Windows 2000下的。 
附件名称/大小 下载次数 最后更新
2003-08-14_PCIConf.zip (308KB)  10
助人乃快乐之本 有人给分就更快乐了 :-)
grant
驱动老牛
驱动老牛
  • 注册日期2001-05-14
  • 最后登录2007-04-13
  • 粉丝0
  • 关注0
  • 积分350分
  • 威望35点
  • 贡献值0点
  • 好评度35点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2003-08-14 15:53
这个是DOS下的。
附件名称/大小 下载次数 最后更新
2003-08-14_PCIS_IO.CPP (2KB)  1
助人乃快乐之本 有人给分就更快乐了 :-)
chxg
驱动牛犊
驱动牛犊
  • 注册日期2001-07-14
  • 最后登录2010-04-29
  • 粉丝0
  • 关注0
  • 积分-9分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2003-08-20 09:40
给你这个函数就可以读取:

NTSTATUS HtsReadWriteConfig(
  PDEVICE_OBJECT DeviceObject,
  ULONG WhichSpace,
  PVOID Buffer,
  ULONG Offset,
  ULONG Length,
  BOOLEAN ReadConfig)
{
    PIRP Irp;
    KEVENT Event;
    PIO_STACK_LOCATION IoStack;
    NTSTATUS Status;
      
    ASSERT(DeviceObject);
    ASSERT(Buffer);
    ASSERT(Length);
    Irp = IoAllocateIrp(DeviceObject->StackSize, FALSE);
    if (!Irp) {
        return STATUS_INSUFFICIENT_RESOURCES;
    }
    Irp->IoStatus.Status = STATUS_NOT_SUPPORTED;
    KeInitializeEvent(&Event, NotificationEvent, FALSE);
    IoSetCompletionRoutine(Irp,HtsGenericCompletion,
                           &Event, TRUE, TRUE, TRUE);
    IoStack = IoGetNextIrpStackLocation(Irp);
    IoStack->MajorFunction= IRP_MJ_PNP;
    IoStack->MinorFunction= ReadConfig ? IRP_MN_READ_CONFIG : IRP_MN_WRITE_CONFIG;
    IoStack->Parameters.ReadWriteConfig.WhichSpace = WhichSpace;
    IoStack->Parameters.ReadWriteConfig.Buffer = Buffer;
    IoStack->Parameters.ReadWriteConfig.Offset = Offset;
    IoStack->Parameters.ReadWriteConfig.Length = Length;
    if (ReadConfig) {
        RtlZeroMemory(Buffer, Length);
    }
    Status = IoCallDriver(DeviceObject, Irp);
    if (Status == STATUS_PENDING) {
       KeWaitForSingleObject(&Event, Executive, KernelMode, FALSE, NULL);
       Status = Irp->IoStatus.Status;
    }
    IoFreeIrp(Irp);
    return Status;
}

NTSTATUS
HtsGenericCompletion (
    IN PDEVICE_OBJECT   DeviceObject,
    IN PIRP             Irp,
    IN PVOID            Context
    )
{
    UNREFERENCED_PARAMETER (DeviceObject);    
    KeSetEvent ((PKEVENT) Context, IO_NO_INCREMENT, FALSE);
    return STATUS_MORE_PROCESSING_REQUIRED; // Keep this IRP
}

调用方法:
NTSTATUS Dispatch_AddDevice(
                        IN PDRIVER_OBJECT driverObj,
                        IN PDEVICE_OBJECT physicalDevObj
                     )

{
。。。。。。。。。。。。。
    HtsReadWriteConfig(
    physicalDevObj,
    PCI_WHICHSPACE_CONFIG,
    &pciConfig,
    0,
    sizeof(PCI_COMMON_CONFIG),
    TRUE/*Read*/);
    
    
    pciConfig.DeviceSpecific[6]=0x20;
    pciConfig.DeviceSpecific[7]=0x00;    
    HtsReadWriteConfig(
    physicalDevObj,
    PCI_WHICHSPACE_CONFIG,
    &pciConfig,
    0,
    sizeof(PCI_COMMON_CONFIG),
    FALSE/*Write*/);  
。。。。。。。。。。。。。。。。。
}

如果能用,别忘了分点分给我哦

 :P
theseus
驱动牛犊
驱动牛犊
  • 注册日期2003-03-30
  • 最后登录2003-11-13
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2003-08-20 15:03
有一个简单的办法.如果你是用DS的话.
里面有一个类KPciConfiguration,用他的成员函数ReadBaseAddress即可.






------------------------------------------------------------
答得好请给分
------------------------------------------------------------ 痛并快乐
游客

返回顶部