Replacing HalGetBusData

WDF驱动中访问 PCI 设备配置空间 Windows XP 和 Windows Server 2003 及更高版本的操作系统可以独占控制PCI 本地总线规范定义的配置空间标头以及功能链接列表中的所有功能。驱动程序不得尝试修改这些寄存器。 但是,驱动程序可以使用 IRP _ MN _ 写入 _ 配置请求或总线接口标准的SetBusData方法, _ 将不属于该标头的配置空间写入到供应商定义的功能列表 _ 。驱动程序还可以使用 IRP _ MN _ read _ CONFIG 请求或总线接口标准的GetBusData方法读取 _ ... 阅读详情

 

 

 

 

NTSTATUS

HtsReadWriteConfig(

    PDEVICE_OBJECT DeviceObject,

    ULONG WhichSpace,

    PVOID Buffer,

    ULONG Offset,

    ULONG Length,

    BOOLEAN ReadConfig)

{

    ASSERT(DeviceObject);

    ASSERT(Buffer);

    ASSERT(Length);

 

    PIRP Irp = IoAllocateIrp(DeviceObject->StackSize, FALSE);

 

    if (!Irp) {

      

        return STATUS_INSUFFICIENT_RESOURCES;

    }

    Irp->IoStatus.Status = STATUS_NOT_SUPPORTED;

 

    KEVENT Event;

    KeInitializeEvent(&Event, NotificationEvent, FALSE);

 

    IoSetCompletionRoutine(Irp,HtsGenericCompletion,

                           &Event, TRUE, TRUE, TRUE);

 

    PIO_STACK_LOCATION 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);

    }

 

    NTSTATUS 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

}

 

DriverWorks关于DMA的驱动编程 立即下载

相关推荐

WinCE6.0 DEVICEEMULATOR BSP的CEDDK简析

WinCE6.0 DEVICEEMULATOR BSP的CEDDK提供了地址转换函数,位于/SRC/DRIVERS/CEDDK/下,有2个目录DDK_BUS和DLL,前者生成ddk_bus.lib,后者生成ceddk.dll,这部分的CEDDK实现了4个函数,data.c中的HalGetBusDataByOffset和HalSetBusDataByOffset,trans.c中的HalTranslateBusAddress和HalTranslateSystemAddress.

shevsten的专栏 3105

WinCE之旅——驱动编程学习笔记2

       昨天把流驱动看了一下,总体感觉相对还可以,其实大多数情况就是编写dll动态链接,这个不是太难,只要多练我想我应该能熟练掌握。话说回来,今天是著名的圣诞节,大家都过节了吧,我也过,在实验室,今天下午暖气停了,有点冷,不过写东西的时候感觉手还是挺灵活的,这要谢谢我散热不好的笔记本,现在才体会到,散热不好并非坏事,不用暖手垫嘛!呵呵,言归正传,继续我的驱动编程学习……      设备驱

zixuanzimo的专栏 916

DDK常用函数列表

(A)ASSERT ASSERTMSG (C)CM_FULL_RESOURCE_DESCRIPTOR CM_PARTIAL_RESOURCE_DESCRIPTOR CM_PARTIAL_RESOURCE_LIST CM_RESOURCE_LIST CONFIGURATION_INFORMATION CONTAINING_RECORD CONTROLLER_OBJECT (D)D

Mobidogs Blog 2693

如何获取PCI设备的配置和位置信息!

概要loadTOCNode(1, summary);在作为目标设备驱动程序堆栈的一部分(充当函数或筛选器驱动程序)的驱动程序中,包含外围组件互连 (PCI) 设备的配置和位置信息(如 BusNumber、DeviceNumber 和 Function Number),本文介绍如何获取这些信息。更多信息loadTOCNode(1, moreinformation);在 W

蓝色心情De Blog 5793

学习驱动程序的若干法则

[范文][MicroSoftTRD]Windows下驱动开发的经验发信站: BBS 水木清华站 (Fri Apr 19 11:58:21 2002) 学习驱动程序的若干法则一.驱动程序介绍    Windows 环境下,应用程序访问硬件设备需要通过设备驱动程序。在Windows 95/98下,驱动程序通常是一个Vxd文件;而在Windows NT下,驱动程序则是一个Sys文件。虽然这两

一片荷叶的专栏 1862

如何创建用于WindowsNT PCI 设备驱动程序

概要loadTOCNode(1, summary);本文介绍如何创建用于 WindowsNT PCI 设备驱动程序。 设备驱动程序必须执行许多功能, 如创建设备对象等。 此外, 还有许多更功能驱动程序必须执行以支持 PCI 设备驱动程序初始化期间。 注意一些函数下面提到的是同时使用 PCI 非驱动程序中。 更多信息loadTOCNode(1, moreinformation

蓝色心情De Blog 2782

hal!HalGetBusDataByOffset调试记录说明节点P2P0的32个子节点

hal!HalGetBusDataByOffset调试记录说明节点P2P0的32个子节点

linux-0.11调试教程 351

Windows内核HAL相关学习

1 硬件抽象层HAL 硬件抽象层是系统可移植的关键。HAL是一个可加载的,内模式模块提供了windows当前运行平台的低层接口。它隐藏了与 硬件相关的细节,如I/O接口,中断控制器,以及多处理器通信机制等,体系结构或者机器相关的功能。 windows内部组件以及用户编写的设备驱动并不直接访问硬件,当它们需要获得与平台相关的信息时,它们可以通过调用 HAL例程来保存可移植性。DDK中能找到很多有关HAL在驱动中的用法。(DDK,驱动开发包) 虽然windows带了几个HAL,但是安装时只能有一个被选中,

bcbobo21cn的专栏 1103

PCI配置空间简介

PCI配置空间简介 作者:敏行 PCI有三个相互独立的物理地址空间:设备存储器地址空间、I/O地址空间和配置空间。配置空间是PCI所特有的一个物理空间。由于PCI支持设备即插即用,所以PCI设备不占用固定的内存地址空间或I/O地址空间,而是由操作系统决定其映射的基址。 系统加电时,BIOS检测PCI总线,确定所有连接在PCI总线上的设备以及它们的配置要求,并进行系统配置。...

weixin_33881041的博客 785

I/O Request Packet

第5章 I/O Request Packet 5.1 数据结构 在处理 I/O 请求上,有两个重要的数据结构:IRP(I/O request packet)和 IO_STACK_LOCATION 5.1.1 IRP 的结构 下面是在 windbg 里得到的 IRP 结构: nt!_IRP +0x000 Type : Int2B +0x002 Size

zhuo_zhibin的专栏 6088

驱动开发学习笔记

1、三种类型的WDM驱动程序   总线驱动程序(bus driver)   功能驱动程序(function driver)   过滤驱动程序(filter driver)2、其他分类方法   类驱动程序(class driver)   端口驱动程序(port driver)   小端口驱动程序(miniort driver)3、驱动对象(DRIVER_OBJECT)主要成员   Devic

迈克揉索芙特 3915

IRP IO_STACK_LOCATION 《寒江独钓》内核学习笔记(1)

在学习内核过滤驱动的过程中,遇到了大量的涉及IRP操作的代码,这里有必要对IRP的数据结构和与之相关的API函数做一下笔记。   1. 相关阅读资料 《深入解析 windows 操作系统(第4版,中文版)》 --- 9章 《windows driver kit 帮助文档》 http://support.microsoft.com/kb/115758/zh-cn  IRP 结构中各地址字段...

weixin_33739523的博客 2500

IO_STACK_LOCATION

IO_STACK_LOCATION IO_STACK_LOCATION 结构定义了一个 I/O stack location, 是每个IRP关联的 I/O stack的其中一个入口。 在IRP中的每个I/O stack location 都有一些通用的成员和一些与请求相关的成员。 typedef struct _IO_STACK_LOCATION { UCHAR MajorFunct

死胖子的博客 1785

Windows驱动开发——WDM驱动

1、WDM.h [cpp] view plain copy /************************************************************************ * 文件名称:HelloWDM.h                                                  * 作    者:张帆 * 

thanklife的专栏 1203

PCI设备驱动开发

  1. PCI 简介    PCI 总线标准是一种将系统外部设备连接起来的总线标准,是 PC 中最重要的总线,实际上是系统的各个部分如何交互的接口。传输速率可达到 133MB/s。在当前的 PC 体系结构中,几乎所有的外部设备采用的各种各样的接口总线,均是通过桥接电路挂接到 PCI 系统上。在这种 PCI 系统中, Host/PCI 桥称为北桥,连接主处理器总线到基础 PCI 局部总线。 PCI 与其他总线的接口称为南桥,其中南桥还通常含有中断控制器、IDE 控制器、USB 控制器和 DMA 控制器等。南

Augusdi的专栏 2981

PCI设备驱动

PCI总线 一种将系统外部设备连接起来的总线标准。如ISA、USB总线都挂载在PCI总线上。 开发PCI设备驱动,需要获取PCI配置空间的各个数据。 基础PCI局部总线与主处理器相连接的Host/PCI称为北桥 基础PCI总线与中断控制器、IDE控制器、USB控制器、DMA控制器和ISA总线的 称为南桥。 PCI配置空间: PCI三个相互独立的物理地址空间:设备存储器地址空间、

World-wang 1247

windows wdf 驱动开发总结(5)--PCI 驱动

PCI驱动相关(CY7C09449)(AMCC5933)     PCI总线标准是一种将系统外部设备连接起来的总线标准,它是PC中最重要的总线。其它总线ISA总线,USB总线都挂在PCI总线上。 (2.1)WDF_INTERRUPT_CONFIG_INIT 函数功能:initializes a WDF_INTERRUPT_CONFIG structure. VOID   WDF_IN

smilestone322的专栏 8822

windows内核原理与实现笔记之IO请求包

IRP 定义: typedef struct DECLSPEC_ALIGN(MEMORY_ALLOCATION_ALIGNMENT) _IRP { CSHORT Type; USHORT Size; PMDL MdlAddress;//该I/O请求的用户缓冲区的MDL,仅用于“直接I/O”类型 ULONG Flags;//用于记录各种标志 union { struct _IRP *MasterIrp;//若这是一个关联IRP,则指向主IR...

maomao171314的专栏 609
fredfang
博客等级 码龄18年 0粉丝 0原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值