驱动程序是通过设备句柄来控制设备的,应用程序要控制设备,也需要获得设备句柄,然后使用驱动程序体提供的DeviceIoControl接口来控制设备。那么应用程序是如何获得设备句柄的呢?
通常流接口驱动程序会使用两个结构体,驱动上下文结构体和设备上下文结构体。设备句柄会保存在设备上下文结构体中,驱动上下文结构体会保存设备上下文结构体的地址。这样通过驱动上下文结构体就能够得到设备句柄。下面我定义一个驱动上下文指针dwDriverContext来说明这个指针是如何被传递的。
1、 在执行USBDeviceAttach的函数中,函数ActivateDevice用来激活流接口,它将dwDriverContext的值写入注册表中。
2、 当dwDriverContext被写入注册表后,设备管理器会调用Cam_Init 函数。Cam_Init 函数执行后会从注册表取得dwDriverContext的值。
3、 应用程序使用CreatFile这个API时,驱动程序中的Cam_Open函数会被调用,Cam_Open执行时会获得Cam_Init 函数的到的dwDriverContext。CreatFile会得到Cam_Open返回的dwDriverContext。在应用程序中,dwDriverContext会以句柄的形式出现,这时应用程序就可以通过CreatFile返回的句柄来控制设备了。
4、 应用程序使用DeviceIoControl时会把CreatFile返回的句柄(其实就是dwDriverContext)传回给驱动程序的CAM_IOControl函数。
以上就是设备句柄在驱动程序与应用程序之间的传递过程。
分享到:
相关推荐
流驱动是一种为I/O设备提供服务的软件组件,它们处理设备的数据传输,并通过标准的接口与系统通信。在WinCE中,流驱动遵循Windows Driver Model(WDM)框架,允许系统以统一的方式管理各种硬件设备。 动态加载流...
在 WinCE 中,流接口驱动的编写通常遵循一定的规范,通过定义和实现这些固定接口,开发者可以构建适用于各种设备的驱动程序。由于 WinCE 是一个实时嵌入式系统,驱动程序的设计和实现必须高效且可靠,考虑到资源限制...
Wince流式接口驱动是指在Windows Embedded Compact(以前称为Windows CE或Wince)操作系统中,通过一组预先定义的接口函数,实现对硬件设备的控制。开发此类驱动,主要涉及对底层硬件的抽象和封装,确保操作系统能够...
在Windows CE (WINCE)操作系统环境下,开发SPI(Serial Peripheral Interface)扩展串口驱动是一项重要的任务,特别是对于那些需要与外部硬件设备进行通信的应用。在本案例中,我们聚焦于一个名为"UARTExpander.rar...
在Windows CE (WCE)平台上进行驱动开发是一项技术性极强的工作,主要涉及到操作系统内核、硬件接口以及设备驱动程序接口等多方面的内容。本文将深入探讨基于Windows CE的驱动开发,包括驱动程序的类型、驱动开发流程...
在Wince驱动开发中,`DeviceIoControl`是与硬件通信的重要手段,正确理解和使用它能够有效地实现设备的控制和数据传输。通过上述示例,我们可以看到如何在SDIO存储卡上执行读写操作,同时也了解了处理可能出现的错误...
在Windows CE(简称WinCE)操作系统环境下,搜索周边蓝牙设备是一项常见的任务,特别是在开发嵌入式系统或移动设备应用时。本示例程序"BtSearchService"提供了在WinCE下进行蓝牙设备搜索的功能,虽然目前它只能实现...
在Windows CE (WINCE)操作系统下,为S3C2440处理器实现串行通信接口(UART)驱动是一项关键任务,...总的来说,开发S3C2440的WINCE串口驱动涉及到硬件接口的理解、中断处理、同步机制以及符合WINCE驱动模型的编程实践。
对于S3C2440的ADC,我们使用了流驱动,这是一种特殊的驱动模型,它提供了标准的读写接口,使得应用程序可以通过文件句柄直接操作设备,如同操作普通文件一样。流驱动简化了用户空间应用程序与内核空间驱动之间的通信...
在Windows CE(WinCE)平台上进行蓝牙开发是一个技术性较强的任务,主要涉及到设备通信、驱动程序接口以及应用程序的编写。本实例将带你深入理解WinCE蓝牙串口通信的实现过程,帮助你解决在该领域遇到的问题。 首先...
USB设备在WINCE中的驱动通常包括用户模式驱动(User-Mode Driver)和内核模式驱动(Kernel-Mode Driver)两部分。 **USB基本原理:** USB设备按照功能分为不同类,如HID(Human Interface Device)类、Mass Storage...
1. **设备驱动**:在WinCE中,你需要一个适配器驱动程序来与硬件交互。这通常由设备制造商提供,或者你需要自己编写。驱动程序负责初始化PWM硬件,设置频率、占空比等参数,并提供读写接口供用户空间的应用程序使用...
总结来说,基于WinCE的串口通信程序设计需要理解WinCE系统中的SerialPort API,掌握S3C2440的UART配置方法,并能编写相应的驱动程序和应用程序,以实现设备间的有效通信。同时,具备良好的错误处理和调试能力也是...
在Wince系统中,蓝牙驱动和协议栈通常集成在操作系统内核中,开发者可以通过系统提供的API进行蓝牙应用开发。 2. **蓝牙设备查找**: 在这个demo中,首先会涉及到蓝牙设备的搜索。这通常通过调用`...
在Windows CE系统中,我们可以使用VC创建一个基于Win32 API或.NET Compact Framework的应用程序,通过调用SPI驱动接口来控制SPI设备。VC的项目设置应确保目标平台为Windows CE,并包含相应的CE编译器和库。 在...
在Windows CE(简称WinCE)操作系统环境下,TCP客户端通信是一个重要的网络编程任务,主要用于设备间的双向数据传输。本文将深入探讨标题"WinCE TCP客户端通信代码"所涉及的知识点,并结合描述中的信息,讲解如何在...
2. **WinCE驱动模型**:WinCE使用微型驱动模型(MDD),它基于函数指针和回调机制,允许开发者定义设备特定的操作。你需要实现诸如Open、Close、Write、Read和Control等函数来完成串口操作。 3. **设备注册**:驱动...
驱动程序开发者需要具备SPI通信、WinCE驱动开发以及硬件接口设计的专业知识。此驱动程序的实现涵盖了从底层硬件交互到上层系统调用的完整流程,对于理解和研究WinCE平台的驱动开发具有重要意义。
在WinCE系统中,蓝牙功能通常通过蓝牙适配器硬件和驱动程序实现,这些硬件通常集成在设备内部或通过USB接口连接。 2. **蓝牙API和SDK**: 在WinCE中,开发者可以使用Microsoft提供的蓝牙API(Bluetooth API)进行...