Windows NT 设备驱动程序开发基础(6)

原创 2002年03月03日 09:21:00
1.3.8 同步 
  
      如果驱动程序有可能在某时刻有多个部分在同时运行,比如有中断处理过程,或 
存在多个设备等,对公共数据或代码的访问就需要同步。方法有 
  
    i) 自旋锁(SpinLock) 
  
      驱动程序可以在初始化时调用KeInitializeSpinLock创建该对象。在任何代码段 
访问被保护的数据之前,先调用KeAcquireSpinLock试图获得该对象的所有权,如果成功 
,该段代码被系统提升至DISPATCH_LEVEL,进行数据访问。访问完毕后须调用KeRelease 
SpinLock释放所有权,运行级别也被恢复。此方法只适用于同步运行级别小于等于DISP 
ATCH_LEVEL的代码,主要用于多CPU的情形。此外,还有一种中断自旋锁用于与中断处理 
过程同步,可以将较低级别的代码提升到需要与之同步的中断DIRQL。 
  
    ii) 控制器(Controller) 
  
      该对象主要用于同步一个驱动程序中的多个设备,保证它们能顺序地访问特定的 
代码或数据。该对象在驱动程序初始化调用IoCreateController被创建。设备在StartI 
o过程中调用IoAllocateController请求获得Controller对象的独占权。使用完后调用I 
oFreeController释放。驱动程序停止时调用IoDeleteController从内存删除该对象。该 
对象有一个指针ControllerExtension指向一块由驱动程序定义的结构,其中保存有此驱 
动程序的公共数据。 
  
    iii) 适配器(Adapter) 
  
      该对象用于同步多个设备(不一定在一个驱动程序中)对DMA通道的使用。该对象 
在系统启动侦测硬件时自动被创建。驱动程序在初始化时调用HalGetAdapter获得该对象 
的指针。设备在StartIo过程中调用IoAllocateAdapterChannel请求获得DMA通道的独占 
权,然后开始传输数据。使用完后调用IoFreeControllerChannel释放DMA通道。 
  
    iv) DPC 
  
      由于DPC队列中的对象总是被系统顺序地处理,所以也可以将需要同步的代码做成 
Dpc过程,需要调用时将相应的DPC对象放到队列的末尾即可。 
  
    v) 其他 
  
  同用户模式的应用程序类似,驱动程序也可以使用多线程,也提供了一套用来同步的 
对象,如Event, Mutex, Semaphore, Timer, Thread。其中Event对象可以被命名,不同 

的驱动程序可以利用同名的Event对象同步对公共数据的访问。 
  
-- 

驱动程序的基本结构

驱动程序的基本结构 1、Windows驱动程序中重要的数据结构 1.1、驱动对象(DRIVER_OBJECT) 每个驱动程序会有唯一的驱动对象与之对应,并且这个驱动对象是在驱动加载的时候,被内核...
  • CSDN515
  • CSDN515
  • 2014年04月07日 19:09
  • 1397

《Win7设备驱动程序开发》学习笔记

《Windows 7 设备驱动程序开发》是美国Ronald D. Reeves著的一本关于WDF模型的Windows 驱动程序开发教程,适用于Win7和Win10。本文我学习该书的一些笔记,目前主要是...
  • Sagittarius_Warrior
  • Sagittarius_Warrior
  • 2016年06月14日 15:31
  • 3587

谈WDM与WDF (windows驱动开发)

WDF驱动模型 如所周知,自Windows 2000开始,开发驱动程序必以WDM为基础的,但其开发难度之大,根本不能奢望像用户模式应用程序开发那样容易。为改善这种局面,微软推出了新的驱动程序开发环境。...
  • u011191259
  • u011191259
  • 2014年12月10日 21:25
  • 1388

NT Service 编程 操作 NT 服务

操作 NT 服务: OpenSCManager   打开目标计算机上的“服务控制管理器”-SCM,返回指向该管理器的指针。 OpenService     打开服务,返回指向该服务的指针。 St...
  • thanklife
  • thanklife
  • 2017年04月07日 16:29
  • 194

Windows驱动开发之入门篇(一)

本文主要介绍“如何入门Windows驱动开发”和“新手需要掌握哪些知识和动手技能”,大部分是本人探索Windows驱动开发近一月时间的经验之谈。大致包括如下几个方面: 1,开发工具、调试工具和调试手段...
  • Sagittarius_Warrior
  • Sagittarius_Warrior
  • 2016年03月28日 20:03
  • 16377

Windows驱动开发要点总结一

1 概述 驱动程序大体可分为两类三种: 第一类:传统型驱动     传统型驱动的特点就是所有的IRP都需要自己去处理,自己实现针对不同IRP的派发函数。其可以分 为以下两种:     1. Nt式驱动...
  • bcbobo21cn
  • bcbobo21cn
  • 2016年07月04日 11:05
  • 959

驱动开发入门——NTModel

上一篇博文中主要说明了驱动开发中基本的数据类型,认识这些数据类型算是驱动开发中的入门吧,这次主要说明驱动开发中最基本的模型——NTModel。介绍这个模型首先要了解R3层是如何通过应用层API进入到内...
  • lanuage
  • lanuage
  • 2016年10月07日 23:57
  • 1212

《精通Linux设备驱动程序开发》——Linux无线设备驱动

Linux无线设备驱动
  • Explorer_day
  • Explorer_day
  • 2015年04月21日 16:29
  • 2013

NT式驱动和WDM式驱动程序

1.Windows驱动程序分为两类,一类是不支持即插即用功能的NT式的驱动程序;另一类是支持即插即用功能的WDM式的驱动程序。   2.NT式的驱动程序要导入的头文件时NTDDK.H,而WDM式的...
  • whatday
  • whatday
  • 2015年03月28日 15:27
  • 2737

Windows驱动开发之第一个驱动程序

一个简单的驱动程序
  • enjoy5512
  • enjoy5512
  • 2016年07月05日 10:18
  • 1116
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Windows NT 设备驱动程序开发基础(6)
举报原因:
原因补充:

(最多只允许输入30个字)