当前位置:文档之家› PCI设备Windows通用驱动程序设计

PCI设备Windows通用驱动程序设计

PCI设备Windows通用驱动程序设计
PCI设备Windows通用驱动程序设计

PCI 设备Windows 通用驱动程序设计

2004-5-13 10:56:55 驱动开发网李海

(华强电子世界网讯)本文结合“通用高速PCI 总线目标模块”的驱动程序设计,全面地讨论了Windows 设备(特别是PCI 设备)驱动程序编写时所面临的主要问题及解决方案,并提出了封装设备驱动的方法。

关键词:PCI 设备驱动程序端口内存中断封装

在设计和使用PCI设备时,经常要在P C机的软件中访问和控制硬件设备,但Windows 操作系统(包括Windows95/98 、Windows NT 、Windows 2000 为了保证系统的安全

性、稳定性和可移植性,对应用程序访问硬件资源加以限制,这就要求设计设备驱动程序以实现PC机的软件对PCI设备的访问。

Windows 下的驱动程序不仅仅包括物理设备的驱动程序,也包括为文件系统等非物理设备编写的虚拟设备驱动程序。为了简化问题,下面只讨论硬件物理设备的驱动程序。本文将以撏ㄓ酶咚伲校茫勺芟吣勘昴?閿[1] 的驱动设计为例,探讨PCI 设备的驱动

程序设计方案。我们开发了一套通用的PCI 设备驱动程序,它可以完成一般PCI 设备驱动所需

的功能,可以作为其它PCI 设备驱动开发的框架。

1驱动程序的模式和开发工具的选择

设备驱动程序是指管理某个外围设备的一段代码。驱动程序不会独立地存在,而是操作系统的一部分。通过设备驱动程序,多个进程可以同时使用这些资源,从而可以实现多进程并行运行。在下文中,将调用设备驱动程序的pc 机程序称为用户程序。

Windows 95 和Windows NT 采用的驱动程序体系不同,所以大多数情况下驱动程序也不能通用。如果设备需要在Windows 9X/NT 下使用,一般至少要设计Windows 9X 和Windows NT 两个驱动程序版本。wINDOWS98 可以兼容Windows 95 的驱动程序,同时它又推出一个新的Win32 Drivers Mode (WDM)驱动类型。Windows 98中有些设备(如USB设备)的驱动程序必须为WDM莫式。这个新的类型实际是在Windows NT 的驱动模型的基础上增加了即插即用等内容。WDM驱动也可以用在Windows 2000 (先前叫Windows NT5.0 )中。从长远的角度看。

今后开发人员只要开发WDM驱动就可以了,但从目前的市场情况来看,Win dws 95是无法放弃的,所以WDM在近一两年还无法替代其它类型的设备驱动。

Intel 80386 以上的微处理器有4个优先级别:0 级、1级、2 级和3 级,一般操作系统运行

于优先级0 级上,而用户程序运行在3级上,在对硬件操作上有一些限制(具体的限制在不同的操作系统中是不同的)。Windows 95 支持的驱动类型很多,但针对一般硬件设备而言,主要是VxD 和打印机驱动两类。VxD指的是Virtual Device Drivers 。VxD运行在Intel 系统的0级上,可以执行特权级指令,对任何I/O 设备有全部访问权,所以大多数硬件驱动程序都是

VxD 。VxD 驱动通常以.vxd 为扩展名,放在Windows\System 目录下,可以在Windws 95 启动时装入,也可以在程序运行时根据需要动态地载入。动态加载有助于节约系统内存和资源。但打印机驱动程序不是VxD,它运行在3级上。同

Windows 95 类似,Windows NT 的驱动也有可以运行在0 级的内核模式(Kernel Mode)和运行在 3 极的用户模式(User Mode)之分。由于Windows NT 禁止用户模式的程序访问I/O 端口(WINDOWS 95/98则允许用户程序直接访问I/O 端

口),直接控制物理设备的驱动程序都是内核模式的。而我们设计的PCI 通用驱动程序要求对各种硬件资源访问,所以应该选择工作在0级的驱动程序模式。

开发设备驱动采用的主要开发工具是微软为设备开发者提供的软件包Device Driver Kit (DDK)。这个软件包包括有关设备开发的文档、编译需要

的头文件和库文件、调试工具和程序范例。在DDK中还定义了一些设备驱动可以调用的系统底层服务,象DMA服务、中断服务、内存管理服务、可安装文件系统服务等等。这些都是编写设备驱动所必须的。但Win dows 95 的DDK由于主要使用汇编语言描述。开发起来比较困难。因此, 我们在Windows 95 操作系统中同时采用了Numega公司的产品VtoolsD。VtoolsD 是基于C/C++的,支持Borland C++ 和Visual C++ , 使用和维护都较Windows DDK 容易。

2PCI驱动程序的特点

在设计驱动程序之前,首先要对欲控制的硬件设备进行细致地分析,更需要详细了解硬件设备的特性。硬件设备的特性会对驱动程序设计产生重大的影响。需要了解的最主要的硬件特性包括:

( 1 )设备的总线结构

设备采用什么总线结构非常关键, 因为不同的总线类型(如ISA 和PCI)在许多硬件工作机制上是不同的, 所以驱动程序设计也不同。

( 2 )寄存器

要了解设置的控制寄存器、数据寄存器和状态寄存器,以及这些寄存器工作的特性。

(3)设备错误和状态

要了解如何判断设备的状态和错误信号,这些信号要通过驱动程序返回给用户。

( 4 )中断行为

要了解设备产生中断的条件和使用中断的数量。

(5)数据传输机制

最常见的数据传输机制是通过I/O 端口(port ),也就是通过CPU的IN/OUT 指令进行数据读写。PC的另一种重要的传输机制是DMA但PCI规范不包括从属DMA的说明。

(6)设备内存

许多设备自身带有内存,PCI设备大多是采用映射的方式映射到PC系统的物理内存。有的设

备还要通过驱动程序设置设备的接口寄存器。

有关驱动程序的加载和响应用户请求的内容,在DDK文档中有规定,所以设计设备驱动程序主要的面临问题是如何进行硬件操作,这是根据设备的不同而不同的。而硬件驱动程序的功能虽然千差万别,但基本功能就是完成设备的初始化、对端口的读写操作、中断的设置、响应和调用以及对内存的直接读写。如前面所说,Windows 9X 和Windows NT 的操作系统模型不同,但驱动程序所要完成的工作却是相同的,所以下面以Windows 9X 为主进行介绍,仅在需要的地方指出两个操作系统的不同。

下面从这几方面讨论解决这些问题的途径:

(1)设备初始化

PCI设备驱动程序要实现识别PCI器件、寻址PCI器件的资源和对PCI器件中断的服务。PCI 系统BIOS功能提供了BIOS的访问与控制的具体特征,所有软件(设备驱动程序、扩展ROM码)将通过标准中断号1AH调用BIOS功能访问特殊部件。PCI BIOS 规范有完整的有关PCI BIOS 功能的描述[3 ]。

在PCI设备驱动程序的初始化过程中,利用指定器件识别号(device —id)商识别号(ven dor —id )、检索号(index )搜索PCI器件,通过调用PC IBIOS 确认其存在,并确定其物理位置:总线号、器件号和功能号,这是该器件/功能在系统中的唯一寻址标志。利用总线号、器件号和功能号可以寻址该器件/ 功能的PCI 配置空间(con figuration space )。

接下来,设备驱动就需要从配置空间获得硬件的参数。PCI设备的许多参数,包括所用的中断号,端口地址的范围I/O方式、存储器的地址存储器映射方式等,都可以从PCI配置空间的各基址所对应的寻址空间中得到。读写配置空间可以调用BIOS中断1AH,也可以先向配置空间地址寄存器(0CF8H)写入总线和设备号在前面搜索PCI器件时得到的和寄存器号,再对配置空间数据寄存器(0CFCH)进行读写。对设备驱动来说,最重要的是获得基址寄存器(BADR),不能认为PCI 器件资源总是设计设备时设置的初值,系统可能会根据硬件情况为PCI设备分配新的资源。我们所设计的PCI设备使用的基址1-3 都是按I/O空间映射的,而基址4是按内存方式映射的。确定一个端口是按什么方式映射的,可以读对应端口的配置寄存器(Configuration Register)。读

出后,判断其0位,如果0位为数值0 ,表示其是按内存方式设置的,否则为I/O方式设置的。内存方式和I/O方式的配置寄存器的含义参见文献[3 ]。如果要获得基址的大小,可以向基址寄存器写入FFFFH ,然后读基址寄存器,如果是内存方式,从第4位开始的0的数目表示基址的大小,如果是I/O方式,则从第2位开始的0的数目表示基址的大小。

在Windows NT 下,查找PCI设备的工作是由HalGteBusData 完成的,也可以使用前述的办法读取配置寄存器,但DDK推荐使用HaiGetBusDataOffset 函数。

(2)端口操作

在PC机上,I/O 端口寻址空间和内存寻址空间是不同的,所以处理方法也不同。I/O空间是一个64K字节的寻址空间,它不象内存有实模式和保护模式之分,在各种模式下寻址方式相同。在Win dows 9X 下,用户程序可以直接使用I/O 指令,而不一定非通过专门的驱动程序来完成,所以如果软件对硬件的操作完全是通过I/O 端口操作来完成的,甚至可以不用专门设计驱动程序,直接由应用程序来完成对硬件的控制。由于PCI总线是32位的总线标准,在进行I/O 操作时通常要进行双字(DWORD臊作,而且以前大多数C/C++编译软件都没有提供双字的函数,所以需要构造双字操作读写函数in pd/outpd 。

在Windows NT 下,系统不允许处于优先级3级的用户程序和用户模式驱动程序直接使用

I/O指令,如果使用了I/O指令将会导致特权指令意外(privileged instruction exception) 。所以任何对I/O 的操作都需要借助内

核模式驱动来完成。具体的做法有两种:一是在驱动程序中使用loReportResourceUsage 报告资源占用,然后使用READ_ PORJ XXX、WRITE_ PORJXXX函数读写,最后使用IoReportResourceUsage 取消资源占用;另一种是驱动程序修改NT的I/OPermissio ns

Map(IOPM) ,以使系统允许用户程序对指定的I/O端口进行操作,这时用户程序采用通常的I/O指令进行操作。后者的优点是速度快、用户程序设计简单,但牺牲了移植性,程序不能移植到非In tel 的系统中,而且如果多个程序同时读写同一端口容易导致冲突。

(3)内存的读写

Win sows工作在32位保护模式下,保护模式与实模式的根本区别在于CPU

这也是Windows驱动程序设计中需要着重解决的问题。

寻址方式上的不同,

倒i虚拉地11L和殉趕趙址的对应关系

0 31 0

()

Win dows采用了分段、分页机制如图1,这样使应用程序产生一种错觉,好象程序中可以使用非常大的物理存储空间。这样做最大的好处就是一个程序可以很容易地在物理内存容量不一样的、配置范围差别很大的计算机上运行, 编程人员使用虚拟存储器可以写出比任何实际配置的物理存储器都大得多的程序。每个虚拟地址由16 位的段选择子和32 位段偏移量组成。通过分段机制 , 系统由虚拟地址产生线性地址。再通过分页机制, 由线性地址产生物理地址。线性地址被分割成页目录(Page Directory) 、页表(Page Table) 和页偏移(Offset) 三个部分。当建立一个新的Win32 进程时,操作系统会为它分配一块内存,并建立它自己的页目录、页表,页目录的地址也同时放入进程的现场信息中。当计算一个地址时,系统首先从CPU控制器CR3中读出页目录所在的地址,然后根据页目录得到页表所在的地址,再根据页表得到实际代码/数据页的页帧,最后再根据页偏移访问特定的单元。硬件设备读写的是物理内存,但应用程序读写的是虚拟地址,所以存在着将物理内存地址映射到用户程序线性地址的问题。

从物理地址到线性地址的转换工作也是由驱动程序来完成的。在Windows 95下,使用DDK 的VMMCall —MapPhysToLinear 进行地址映射。驱动程序的内存映射部分主要是调用VxD的系统服务MapPhysToLinear 。在VtoolsD 中这个函数的定义如下:

PVOID MapPhysToLineag(CONST VOID * PhysAddr,DWORD nBytes,DWORD Flags)

其中第一个参数PhysAddr 就是要映射的内存的物理地址的起始位置, 而nBytes 是内存区域的长度, Flags 必须设置为0。这个函数返回的就是这段物理地址映射的线性内存地址。如果指定的内存不能存取, 函数将返回FFFFFFFFH 。

比如要映射物理内存ED000000H 开始的4096 个字节, 可以这样做:

PCHAR *PointerToPage=(PCHAR)MapPhysToLinear((PVOID)

OxED000000,4096,0)

而将PointerToPage 传递给调用驱动的用户程序, 在用户程序中使用

DWORD *pFIFOBodyBase=(DWORD*)PointerToPage;

而这个PFIFOBodyBase 指针就可以象普通的指针一样进行读写操作,而通过对这个指针的操作就可以实现对物理内存ED000000H 进行读写。

在Windows NT 下, 首先调用IoReportResourceUsage 请求使用设备的内存。然后调用HalTranslateBusAddress 转换与总线相关的内存为系统的物理内存地址。再使用MmMapIoSpace 把设备的内存映射到虚拟空间。在设备驱动

卸出时,调用MmUnmaploSpace断开设备的内存和虚拟空间的连接。

(4)中断的设置、响应与调用

对中断的设置、响应与调用应该在驱动程序中完成。

对中断的调用象前面调用BIOS的1AH中断读取配置寄存空间可以由DDK的Exec_ Int 完

成。

PCI设备驱动程序应当从PCI配置寄存器的中断寄存器(INTLN)和中断引脚寄存器(INTPIN) 中获得有关中断的信息。DDK还提供了响应中断事件的服务。如在Windows 95 中,VPICD服务用来管理所有硬件中断事件。PC机的硬件中断需要确定硬件中断的IRQ ,对一个特定的IRQ中断源,VPICD或者提供缺省的中断处理函数,或者允许其它VxD重载中断处理函数。在VtoolsD 中,要处理硬件中断应该从VHardwarel nt 继承一个类。在这个类中,VtoolsD 提供了编

写中断响应程序所需的功能。

在Windows NT 中,同VPICD对应的中断服务为中断请求层(IRQL)。设备驱动首先使用HalGetlnterrupuVector 将与总线有关的中断向量转换为系统的

中断向量,然后利用IoConnectInterrupu 指定中断服务。

3设备驱动的调用

编写设备驱动并不是最终的目的,总是需要由用户程序来调用驱动并实现一定的功能。一般调用设备驱动是使用CreateFile 函数打开设备文件,得到一个文件句柄。具体到我们的设备驱动程序中,使用如下的语句就可以打开文件。

hVxD=CreateFile("\\\\.\\PCIBIOS.VXD",0,0,0,

CREATE-NEW,FILE-FLAG-DELETE-ON-CLOSE,0);

打开设备文件后,调用DeviceIoC ontrol 函数就可以同设备驱动程序交换

数据了。

完成硬件操作之后,可以调用CloseHa ndle(hVxD) ;关闭设备驱动。

这种调用方式也是Win dows NT调用设备驱动的标准方法。对于VxD来说还有其它的调用方式,女口DPMI方式,但采用DeviceIoC ontrol 的方法可以保证程序在Windows NT 和Windows 9X 下的兼容性,在两个操作系统下,仅有CreateFile 语句是不同的。

4设备驱动的进一步封装

至此,完成了对驱动程序的初步设计。但考虑到在上面调用设备驱动时使用的DeviceIoControl 函数仍是比较复杂的,程序也不太容易具有通用性。而且,在有些开发工具中,如Visual Basic ,不包括直接读写I/O 端口的语句,所以可以考虑根据不同软件的需要对驱动程序进行不同的封装。目前,我们实现了以DLL、ActiveX 、VCL和C++类库进行封装。DLL可以在大多数软件环境中进行调用。ActiveX 可以在Visual Basic 等可视编程环境中使用。VCL可以在Delphi 和C++ Builder 中使用。考虑到许多用户使用Visual C++ ,所以也提供了C++类库方式。

(编辑keil )

字符设备驱动程序课程设计报告

中南大学 字符设备驱动程序 课程设计报告 姓名:王学彬 专业班级:信安1002班 学号:0909103108 课程:操作系统安全课程设计 指导老师:张士庚 一、课程设计目的 1.了解Linux字符设备驱动程序的结构; 2.掌握Linux字符设备驱动程序常用结构体和操作函数的使用方法; 3.初步掌握Linux字符设备驱动程序的编写方法及过程; 4.掌握Linux字符设备驱动程序的加载方法及测试方法。 二、课程设计内容 5.设计Windows XP或者Linux操作系统下的设备驱动程序; 6.掌握虚拟字符设备的设计方法和测试方法;

7.编写测试应用程序,测试对该设备的读写等操作。 三、需求分析 3.1驱动程序介绍 驱动程序负责将应用程序如读、写等操作正确无误的传递给相关的硬件,并使硬件能够做出正确反应的代码。驱动程序像一个黑盒子,它隐藏了硬件的工作细节,应用程序只需要通过一组标准化的接口实现对硬件的操作。 3.2 Linux设备驱动程序分类 Linux设备驱动程序在Linux的内核源代码中占有很大的比例,源代码的长度日益增加,主要是驱动程序的增加。虽然Linux内核的不断升级,但驱动程序的结构还是相对稳定。 Linux系统的设备分为字符设备(char device),块设备(block device)和网络设备(network device)三种。字符设备是指在存取时没有缓存的设备,而块设备的读写都有缓存来支持,并且块设备必须能够随机存取(random access)。典型的字符设备包括鼠标,键盘,串行口等。块设备主要包括硬盘软盘设备,CD-ROM等。 网络设备在Linux里做专门的处理。Linux的网络系统主要是基于BSD unix的socket 机制。在系统和驱动程序之间定义有专门的数据结构(sk_buff)进行数据传递。系统有支持对发送数据和接收数据的缓存,提供流量控制机制,提供对多协议的支持。 3.3驱动程序的结构 驱动程序的结构如图3.1所示,应用程序经过系统调用,进入核心层,内核要控制硬件需要通过驱动程序实现,驱动程序相当于内核与硬件之间的“系统调用”。

显示和键盘流程图及程序

3.2 部分软件设计 3.2.3显示子程序 动态显示程序框图如图所示。显示程序的要点有两个:一是代码转换。因为直接驱动LED 显示器的是字形码,而人们习惯的是0、1、2、…、F 等字符,因此,必须将待显示的字符转换成字形码。转换用查表的方法进行。二是通过软件实现逐位轮流点亮每个LED 。 为了实现代码转换,首先开辟一个显示缓冲区,将待显示的字符预先存放在缓冲区中。由于有4位LED 显示器,故不妨假设显示缓冲区长度为4个字节。显示缓冲区地址为DIS 0~DIS 3 ,DIS 0单元与最左边一位LED 相对应,DIS 3单元与最右边一位LED 相对应。 程序清单如下: DIS : ORG 0500H MOV A ,#00000011B MOV DPTR ,#7F00H MOVX @DPTR ,A MOV R0,#78H MOV R3,#7FH MOV A ,R3 LD : MOV DPTR ,#7F01H 开 始 结 束 8051初始化 指向下个显示缓冲单元 显示下一位 延时1mS 段选码送入 查段选表 送位选字 动态显示初始化 3位显示完?

有键闭合吗? 确有键闭合吗 闭合键释放吗 返 回 MOVX @DPTR ,A INC DPTR MOV A ,@R0 ADD A ,#0DH MOVC A ,@ DPTR ACALL DLY MOV A ,R3 JNB A ,R0 RR A ,LD1 MOV R3,A INC R0 AJMP LD0 LD1: SJMP LD1 DSEG :DB 3FH ,06H ,5BH ,4FH ,66H ,6DH 7DH ,07H ,7FH ,6FH DLY : MOV R7,#02H DL : MOV R6,#0FFH DL1: DJNZ R6,DL1 DJNZ R7,DL RET 3.2.4键盘子程序 键盘扫描子程序框图如图 图3-4 键盘扫描子程序框图 开 始 两次调用 延时子程序 判断闭合键号 键号 → A 调用延时子程序

windows驱动开发和调试环境搭建

Windows驱动开发和环境搭建 【文章标题】: Windows驱动开发和调试的环境设置 【文章作者】: haikerenwu 【使用工具】: VC6.0,VMware6.0.3,Windbg 【电脑配置】: 惠普笔记本xp sp3 (一)VMWare安装篇 VMWare的安装一路Next即可,关于其序列号,百度一下就能找到,虚拟机安装完成之后,需要安装操作系统,我在虚拟机中安装的是windows xp sp2系统。 点击“文件”----“新建”----“虚拟机” 进入新建虚拟机的向导,配置虚拟系统参数

选择虚拟系统文件的兼容格式(新手推荐选择默认选项) 按照默认设置继续点击下一步,选择好您需要的操作系统,此处我选择的是Windows XP Prefessional。 设置虚拟机名称和虚拟操作系统安装路径,我单独空出来一个F 盘,将虚拟机和虚拟操作系统全部装在该盘。

配置网络模式(推荐选择NA T,一般主机不用做任何的设置虚拟机就可以利用主机上网)。 配置虚拟磁盘的容量。在这里可以直接单击完成,来完成基本操作设置,磁盘默认空间是8GB,用户可以根据自己的实际使用情况来调整大小,也可以自定义分区。

操作完成之后,在“VM”菜单下有个“setting。。。”菜单,点击此菜单,在CD-ROM中选择合适的选项,我使用的是Use ISO image 选项,将我的xp sp2操作系统的ISO映像路径设置好,安装操作系统。点击ok之后,启动虚拟机,即开始安装操作系统,安装过程跟普通装机过程相同。安装完成之后,启动操作系统,然后在VM菜单下点击“Install VMWare Tools”,把虚拟操作系统的驱动装好。 (二)VMWare设置篇

设备驱动程序

驱动程序 驱动程序一般指的是设备驱动程序(Device Driver),是一种可以使计算机和设备通信的特殊程序。相当于硬件的接口,操作系统只有通过这个接口,才能控制硬件设备的工作,假如某设备的驱动程序未能正确安装,便不能正常工作。 因此,驱动程序被比作“硬件的灵魂”、“硬件的主宰”、和“硬件和系统之间的桥梁”等。 中文名 驱动程序 外文名 Device Driver 全称 设备驱动程序 性质 可使计算机和设备通信的特殊程序 目录 1定义 2作用 3界定 ?正式版 ?认证版 ?第三方 ?修改版 ?测试版 4驱动程序的开发 ?微软平台 ?Unix平台 5安装顺序 6inf文件 1定义 驱动程序(Device Driver)全称为“设备驱动程序”,是一种可以使计算机和设备通信的特殊程序,可以说相当于硬件的接口,操作系统只能通过这个接口,才能控制硬件设备的工作,假如某设备的驱动程序未能正确安装,便不能正常工作。 惠普显卡驱动安装 正因为这个原因,驱动程序在系统中的所占的地位十分重要,一般当操作系统安装完毕后,首要的便是安装硬件设备的驱动程序。不过,大多数情况下,我们并不需要安装所有硬件设备的驱动程序,例如硬盘、显示器、光驱等就不需要安装驱动程序,而显卡、声卡、扫描仪、摄像头、Modem等就需要安装驱动程序。另外,不同版本的操作系统对硬件设

备的支持也是不同的,一般情况下版本越高所支持的硬件设备也越多,例如笔者使用了Windows XP,装好系统后一个驱动程序也不用安装。 设备驱动程序用来将硬件本身的功能告诉操作系统,完成硬件设备电子信号与操作系统及软件的高级编程语言之间的互相翻译。当操作系统需要使用某个硬件时,比如:让声卡播放音乐,它会先发送相应指令到声卡驱动程序,声卡驱动程序接收到后,马上将其翻译成声卡才能听懂的电子信号命令,从而让声卡播放音乐。 所以简单的说,驱动程序提供了硬件到操作系统的一个接口以及协调二者之间的关系,而因为驱动程序有如此重要的作用,所以人们都称“驱动程序是硬件的灵魂”、“硬件的主宰”,同时驱动程序也被形象的称为“硬件和系统之间的桥梁”。 戴尔电脑驱动盘 驱动程序即添加到操作系统中的一小块代码,其中包含有关硬件设备的信息。有了此信息,计算机就可以与设备进行通信。驱动程序是硬件厂商根据操作系统编写的配置文件,可以说没有驱动程序,计算机中的硬件就无法工作。操作系统不同,硬件的驱动程序也不同,各个硬件厂商为了保证硬件的兼容性及增强硬件的功能会不断地升级驱动程序。如:Nvidia显卡芯片公司平均每个月会升级显卡驱动程序2-3次。驱动程序是硬件的一部分,当你安装新硬件时,驱动程序是一项不可或缺的重要元件。凡是安装一个原本不属于你电脑中的硬件设备时,系统就会要求你安装驱动程序,将新的硬件与电脑系统连接起来。驱动程序扮演沟通的角色,把硬件的功能告诉电脑系统,并且也将系统的指令传达给硬件,让它开始工作。 当你在安装新硬件时总会被要求放入“这种硬件的驱动程序”,很多人这时就开始头痛。不是找不到驱动程序的盘片,就是找不到文件的位置,或是根本不知道什么是驱动程序。比如安装打印机这类的硬件外设,并不是把连接线接上就算完成,如果你这时候开始使用,系统会告诉你,找不到驱动程序。怎么办呢参照说明书也未必就能顺利安装。其实在安装方面还是有一定的惯例与通则可寻的,这些都可以帮你做到无障碍安装。 在Windows系统中,需要安装主板、光驱、显卡、声卡等一套完整的驱动程序。如果你需要外接别的硬件设备,则还要安装相应的驱动程序,如:外接游戏硬件要安装手柄、方向盘、摇杆、跳舞毯等的驱动程序,外接打印机要安装打印机驱动程序,上网或接入局域网要安装网卡、Modem甚至ISDN、ADSL的驱动程序。说了这么多的驱动程序,你是否有一点头痛了。下面就介绍Windows系统中各种的不同硬件设备的驱动程序,希望能让你拨云见日。 在Windows 9x下,驱动程序按照其提供的硬件支持可以分为:声卡驱动程序、显卡驱动程序、鼠标驱动程序、主板驱动程序、网络设备驱动程序、打印机驱动程序、扫描仪驱动程序等等。为什么没有CPU、内存驱动程序呢因为CPU和内存无需驱动程序便可使用,不仅如此,绝大多数键盘、鼠标、硬盘、软驱、显示器和主板上的标准设备都可以用Windows 自带的标准驱动程序来驱动,当然其它特定功能除外。如果你需要在Windows系统中的DOS 模式下使用光驱,那么还需要在DOS模式下安装光驱驱动程序。多数显卡、声卡、网卡等内置扩展卡和打印机、扫描仪、外置Modem等外设都需要安装与设备型号相符的驱动程序,否则无法发挥其部分或全部功能。驱动程序一般可通过三种途径得到,一是购买的硬件附

Windows驱动开发培训

Windows驱动开发培训 培训流程: 一、基础知识 在开始驱动开发之前,您应该知道操作系统原理以及驱动程序是如何在操作系统中进行工作的,了解这些基本原理将有助于您做出正确的设计决策并简化您的开发过程。 1、了解Windows操作系统构造\\ 可以链接进去 2、安装WDK,参考相关文档,熟悉WDK的内容\\ 可以链接进去 二、Windows驱动开发\\ 可以链接进去 一、基础知识 在开始驱动开发之前,您应该知道操作系统原理以及驱动程序是如何在操作系统中进行工作的,了解这些基本原理将有助于您做出正确的设计决策并简化您的开发过程。 1、了解Windows操作系统构造 (1)培训目标 深入了解Windows操作系统的系统结构以及工作原理 (2)培训内容 阅读书籍《深入解析Windows操作系统》的第3、4、6、7、9章,重点关注第九章“I/O系统” (3)培训任务 ①掌握Windows操作系统的系统结构 ②理解ISR、IRP、IRQL、DCP等概念的含义 ③了解注册表的用法,掌握注册表数据的查看和修改方法 ④了解进程和线程的内部机理以及线程的调度策略 ⑤了解I/O系统的内容,理解I/O请求以及I/O处理过程 注:以上相关内容,请在一周内完成。

2、安装WDK,参考相关文档,熟悉WDK的内容 (1)培训目标 了解WDK的安装过程,熟悉WDK的编译环境,掌握如何使用WDK的相关帮助文档;了解WDM驱动程序的基本结构 (2)培训内容 ①.阅读文档\\10.151.131.12\book\windows\MSWDM.chm,掌握WDM驱动程序的基本结构以及基本的编程技术。 ②.参考WDK的帮助文档:WDK documentation ,了解WDK的基本内容 (3)培训任务 ①理解分层驱动结构的含义,掌握设备和驱动程序的层次结构 ②理解“驱动对象”和“设备对象”的概念 ③理解2个基本例程:DriverEntry 和addDevice ④了解IRP的结构以及IRP处理的流程 ⑤初步了解I/O的控制操作 注:以上相关内容,请在一周内完成。 二、Windows驱动开发 学习如何基于WDK进行驱动程序的开发 1、培训目标 (1)学会根据WDK开发一个基本的Windows驱动程序和测试程序 (2)学会利用不同的IOCTL方式在内核模式和用户模式之间进行通讯 (3)学会如何在内核模式下和用户模式下访问注册表 (4)利用WinDbg跟踪程序,学会使用WinDbg进行调试 2、培训内容 (1)阅读\src\general\ioctl中的示例代码 (2)build并运行应用程序和驱动程序

字符设备驱动程序

Linux字符设备驱动(转载) 来源: ChinaUnix博客日期:2008.01.01 18:52(共有0条评论) 我要评论 Linux字符设备驱动(转载) 这篇文章描述了在Linux 2.4下,如何建立一个虚拟的设备,对初学者来说很有帮助。原文地址:https://www.doczj.com/doc/df3510183.html,/186/2623186.shtml Linux下的设备驱动程序被组织为一组完成不同任务的函数的集合,通过这些函数使得Windows的设备操作犹如文件一般。在应用程序看来,硬件设备只是一个设备文件,应用程序可以象操作普通文件一样对硬件设备进行操作,如open ()、close ()、read ()、write () 等。 Linux主要将设备分为二类:字符设备和块设备。字符设备是指设备发送和接收数据以字符的形式进行;而块设备则以整个数据缓冲区的形式进行。字符设备的驱动相对比较简单。 下面我们来假设一个非常简单的虚拟字符设备:这个设备中只有一个4个字节的全局变量int global_var,而这个设备的名字叫做"gobalvar"。对"gobalvar"设备的读写等操作即是对其中全局变量global_var的操作。 驱动程序是内核的一部分,因此我们需要给其添加模块初始化函数,该函数用来完成对所控设备的初始化工作,并调用register_chrdev() 函数注册字符设备: static int __init gobalvar_init(void) { if (register_chrdev(MAJOR_NUM, " gobalvar ", &gobalvar_fops)) { //…注册失败 } else

基于51单片机的PS2键盘的单片机编程

PS2键盘的单片机编程 在单片机系统中,经常使用的键盘都是专用键盘.此类键盘为单独设计制作的,成本高、使用硬件连接线多,且可靠性不高,这一状况在那些要求键盘按键较多的应用系统中更为突出.与此相比,在PC系统中广泛使用PS/2键盘具有价格低、通用可靠,且使用连接线少(仅使用2根信号线)的特点,并可满足多种系统的要求.因此在单片机系统中应用PS/2键盘是一种很好的选择. 文中在介绍PS/2协议和PS/2键盘工作原理与特点的基础上,给出了一个在单片机上实现对PS/2键盘支持的硬件连接与驱动程序设计实现.该设计实现了在单 片机系统中对PS/2标准104键盘按键输入的支持.使用Keil C51开发的驱动程序接口和库函数可以方便地移植到其他单片机或嵌入式系统中.所有程序在 Keil uVision2上编译通过,在单片机AT89C51上测试通过. 1 PS/2协议 目前,PC机广泛采用的PS/2接口为mini-DIN 6pin的连接器,如图1所示. PS/2设备有主从之分,主设备采用Female插座,从设备采用Male插头.现在广泛使用的PS/2键盘鼠标均在从设备方式下工作.PS/2接口的时钟 与数据线都是集电极开路结构,必须外接上拉电阻(一般上拉电阻设置在主设备中).主从设备之间数据通信采用双向同步串行方式传输,时钟信号由从设备产生. 1.1 从设备到主设备的通信 当从设备向主设备发送数据时,首先检查时钟线,以确认时钟线是否为高电平.如果是高电平,从设备就可以开始传输数据;反之,从设备要等待获得总线的控制权,才能开始传输数据.传输的每一帧由11位组成,发送时序及每一位的含义如图2 所示. 每一帧数据中开始位总是为0,数据校验采用奇校验方式,停止位始终为1.从设 备到主设备通信时,从设备总是在时钟线为高时改变数据线状态,主设备在时钟 下降沿读人数据线状态.

一个简单字符设备驱动实例

如何编写Linux设备驱动程序 Linux是Unix操作系统的一种变种,在Linux下编写驱动程序的原理和思想完全类似于其他的Unix系统,但它dos或window环境下的驱动程序有很大的区别。在Linux环境下设计驱动程序,思想简洁,操作方便,功能也很强大,但是支持函数少,只能依赖kernel中的函数,有些常用的操作要自己来编写,而且调试也不方便。本文是在编写一块多媒体卡编制的驱动程序后的总结,获得了一些经验,愿与Linux fans共享,有不当之处,请予指正。 以下的一些文字主要来源于khg,johnsonm的Write linux device driver,Brennan's Guide to Inline Assembly,The Linux A-Z,还有清华BBS上的有关device driver的一些资料. 这些资料有的已经过时,有的还有一些错误,我依据自己的试验结果进行了修正. 一、Linux device driver 的概念 系统调用是操作系统内核和应用程序之间的接口,设备驱动程序是操作系统内核和机器硬件之间的接口。设备驱动程序为应用程序屏蔽了硬件的细节,这样在应用程序看来,硬件设备只是一个设备文件,应用程序可以象操作普通文件一样对硬件设备进行操作。设备驱动程序是内核的一部分,它完成以下的功能: 1)对设备初始化和释放; 2)把数据从内核传送到硬件和从硬件读取数据; 3)读取应用程序传送给设备文件的数据和回送应用程序请求的数据; 4)检测和处理设备出现的错误。 在Linux操作系统下有两类主要的设备文件类型,一种是字符设备,另一种是块设备。字符设备和块设备的主要区别是:在对字符设备发出读/写请求时,实际的硬件I/O一般就紧接着发生了,块设备则不然,它利用一块系统内存作缓冲区,当用户进程对设备请求能满足用户的要求,就返回请求的数据,如果不能,就调用请求函数来进行实际的I/O操作。块设备是主要针对磁盘等慢速设备设计的,以免耗费过多的CPU时间来等待. 已经提到,用户进程是通过设备文件来与实际的硬件打交道。每个设备文件都都有其文件属性(c/b),表示是字符设备还是块设备。另外每个文件都有两个设备号,第一个是主设备号,标识驱动程序,第二个是从设备号,标识使用同一个设备驱动程序的不同的硬件设备,比如有两个软盘,就可以用从设备号来区分他们。设备文件的主设备号必须与设备驱动程序在登记时申请的主设备号一致,否则用户进程将无法访问到驱动程序. 最后必须提到的是,在用户进程调用驱动程序时,系统进入核心态,这时不再是抢先式调度。也就是说,系统必须在你的驱动程序的子函数返回后才能进行其他的工作。如果你的驱动程序陷入死循环,不幸的是你只有重新启动机器了,然后就是漫长的fsck。 二、实例剖析 我们来写一个最简单的字符设备驱动程序。虽然它什么也不做,但是通过它可以了解Linux的设备驱动程序的工作原理.把下面的C代码输入机器,你就会获得一个真正的设备

USB设备驱动程序设计

USB设备驱动程序设计 引言 USB 总线是1995 年微软、IBM 等公司推出的一种新型通信标准总线, 特点是速度快、价格低、独立供电、支持热插拔等,其版本从早期的1.0、1.1 已经发展到目前的2.0 版本,2.0 版本的最高数据传输速度达到480Mbit/s,能 满足包括视频在内的多种高速外部设备的数据传输要求,由于其众多的优点,USB 总线越来越多的被应用到计算机与外设的接口中,芯片厂家也提供了多种USB 接口芯片供设计者使用,为了开发出功能强大的USB 设备,设计者往往 需要自己开发USB 设备驱动程序,驱动程序开发一直是Windows 开发中较难 的一个方面,但是通过使用专门的驱动程序开发包能减小开发的难度,提高工 作效率,本文使用Compuware Numega 公司的DriverStudio3.2 开发包,开发了基于NXP 公司USB2.0 控制芯片ISP1581 的USB 设备驱动程序。 USB 设备驱动程序的模型 USB 设备驱动程序是一种典型的WDM(Windows Driver Model)驱动程序,其程序模型如图1 所示。用户应用程序工作在Windows 操作系统的用户模式层,它不能直接访问USB 设备,当需要访问时,通过调用操作系统的 API(Application programming interface)函数生成I/O 请求信息包(IRP),IRP 被传输到工作于内核模式层的设备驱动程序,并通过驱动程序完成与UBS 外设通 信。设备驱动程序包括两层:函数驱动程序层和总线驱动程序层,函数驱动程 序一方面通过IRP 及API 函数与应用程序通信,另一方面调用相应的总线驱动 程序,总线驱动程序完成和外设硬件通信。USB 总线驱动程序已经由操作系统 提供,驱动程序开发的重点是函数驱动程序。 USB 设备驱动程序的设计

Windows驱动开发入门

接触windows驱动开发有一个月了,感觉Windows驱动编程并不像传说中的那么神秘。为了更好地为以后的学习打下基础,记录下来这些学习心得,也为像跟我一样致力于驱动开发却苦于没有门路的菜鸟朋友们抛个砖,引个玉。 我的开发环境:Windows xp 主机+ VMW ARE虚拟机(windows 2003 server系统)。编译环境:WinDDK6001.18002。代码编辑工具:SourceInsight。IDE:VS2005/VC6.0。调试工具:WinDBG,DbgView.exe, SRVINSTW.EXE 上面所有工具均来自互联网。 对于初学者,DbgView.exe和SRVINSTW.EXE是非常简单有用的两个工具,一定要装上。前者用于查看日志信息,后者用于加载驱动。 下面从最简单的helloworld说起吧。Follow me。 驱动程序的入口函数叫做DriverEntry(PDRIVER_OBJECT pDriverObj,PUNICODE_STRING pRegisgryString)。两个参数,一个是驱动对象,代表该驱动程序;另一个跟注册表相关,是驱动程序在注册表中的服务名,暂时不用管它。DriverEntry 类似于C语言中的main函数。它跟main的差别就是,main完全按照顺序调用的方法执行,所有东西都按照程序员预先设定的顺序依次发生;而DriverEntry则有它自己的规则,程序员只需要填写各个子例程,至于何时调用,谁先调,由操作系统决定。我想这主要是因为驱动偏底层,而底层与硬件打交道,硬件很多都是通过中断来与操作系统通信,中断的话就比较随机了。但到了上层应用程序,我们是看不到中断的影子的。说到中断,驱动程序中可以人为添加软中断,__asm int 3或者Int_3();前者是32位操作系统用的,后者是64位用的。64位驱动不允许内嵌汇编。下面是我的一个helloworld的源码:

Windows驱动程序开发环境配置

Windows驱动程序开发笔记 一、WDK与DDK环境 最新版的WDK 微软已经不提供下载了这里:https://https://www.doczj.com/doc/df3510183.html,/ 可以下并且这里有好多好东东! 不要走进一个误区:下最新版的就好,虽然最新版是Windows Driver Kit (WDK) 7_0_0,支持windows7,vista 2003 xp等但是它的意思是指在windows7操作系统下安装能编写针对windows xp vista的驱动程序, 但是不能在xp 2003环境下安装Windows Driver Kit (WDK) 7_0_0这个高版本,否则你在build的时候会有好多好多的问题. 上文build指:首先安装好WDK/DDK,然后进入"开始"->"所有程序"->"Windows Driver Kits"->"WDK XXXX.XXXX.X" ->"Windows XP"->"x86 Checked Build Environment"在弹出来的命令行窗口中输入"Build",让它自动生成所需要的库 如果你是要给xp下的开发环境还是老老实实的找针对xp的老版DDK吧,并且xp无WDK 版只有DDK版build自己的demo 有个常见问题: 'jvc' 不是内部或外部命令,也不是可运行的程序。 解决办法:去掉build路径中的空格。 二、下载 WDK 开发包的步骤 1、访问Microsoft Connect Web site站点 2、使用微软 Passport 账户登录站点 3、登录进入之后,点击站点目录链接 4、在左侧的类别列表中选择开发人员工具,在右侧打开的类别:开发人员工具目录中找到Windows Driver Kit (WDK) and Windows Driver Framework (WDF)并添加到您的控制面板中 5、添加该项完毕后,选择您的控制面板,就可以看到新添加进来的项了。 6、点击Windows Driver Kit (WDK) and Windows Driver Framework (WDF),看到下面有下载链接,OK,下载开始。下载后的文件名为: 6.1.6001.18002.081017-1400_wdksp-WDK18002SP_EN_DVD.iso将近600M大小。

windows系统权限管理分析

windows系统权限管理分析 1权限 windows中,权限指的是不同账户对文件,文件夹,注册表等的访问能力。 在Windows系统中,用户名和密码对系统安全的影响毫无疑问是最重要。通过一定方式获得计算机用户名,然后再通过一定的方法获取用户名的密码,已经成为许多黑客的重要攻击方式。即使现在许多防火墙软件不端涌现,功能也逐步加强,但是通过获取用户名和密码的攻击方式仍然时有发生。而通过加固Windows系统用户的权限,在一定程度上对安全有着很大的帮助。 Windows是一个支持多用户、多任务的操作系统,不同的用户在访问这台计算机时,将会有不同的权限。 "权限"(Permission)是针对资源而言的。也就是说,设置权限只能是以资源为对象,即"设置某个文件夹有哪些用户可以拥有相应的权限",而不能是以用户为主。这就意味着"权限"必须针对"资源"而言,脱离了资源去谈权限毫无意义──在提到权限的具体实施时,"某个资源"是必须存在的。 利用权限可以控制资源被访问的方式,如User组的成员对某个资源拥有"读取"操作权限、Administrators组成员拥有"读取+写入+删除"操作权限等。 值得一提的是,有一些Windows用户往往会将"权利"与"权限"两个非常相似的概念搞混淆,这里做一下简单解释:“权利"(Right)主要是针对用户而言的。"权力"通常包含"登录权力" (Logon Right)和"特权"(Privilege)两种。登录权力决定了用户如何登录到计算机,如是否采用本地交互式登录、是否为网络登录等。特权则是一系列权力的总称,这些权力主要用于帮助用户对系统进行管理,如是否允许用户安装或加载驱动程序等。显然,权力与权限有本质上的区别。 2六大用户组 Windows是一个支持多用户、多任务的操作系统,不同的用户在访问这台计算机时,将会有不同的权限。同时,对用户权限的设置也是是基于用户和进程而言的,Windows 里,用户被分成许多组,组和组之间都有不同的权限,并且一个组的用户和用户之间也可以有不同的权限。以下就是常见的用户组。

EDA键盘扫描

1 绪论 VHDL的英文全名是Very-High-Speed Integrated Circuit HardwareDescription Language,诞生于1982年。1987年底,VHDL被IEEE和美国国防部确认为标准硬件描述语言。自IEEE公布了VHDL的标准版本,IEEE-1076(简称87版)之后,各EDA公司相继推出了自己的VHDL设计环境,或宣布自己的设计工具可以和VHDL接口。此后VHDL在电子设计领域得到了广泛的接受,并逐步取代了原有的非标准的硬件描述语言。现在,VHDL和Verilog作为IEEE的工业标准硬件描述语言,又得到众多EDA公司的支持,在电子工程领域,已成为事实上的通用硬件描述语言。有专家认为,在新的世纪中,VHDL于Verilog语言将承担起大部分的数字系统设计任务。 VHDL主要用于描述数字系统的结构,行为,功能和接口。除了含有许多具有硬件特征的语句外,VHDL的语言形式和描述风格与句法是十分类似于一般的计算机高级语言。 VHDL的程序结构特点是将一项工程设计,或称设计实体(可以是一个元件,一个电路模块或一个系统)分成外部(或称可是部分,及端口)和内部(或称不可视部分),既涉及实体的内部功能和算法完成部分。在对一个设计实体定义了外部界面后,一旦其内部开发完成后,其他的设计就可以直接调用这个实体。这种将设计实体分成内外部分的概念是VHDL系统设计的基本点。 FPGA(Field Programmable Gate Array)即现场可编程门阵列,它是在PAL、GAL、EPLD等可编程器件的基础上进一步发展的产物。它是作为专用集成电路(ASIC)领域中的一种半定制电路而出现的,既解决了定制电路的不足,又克服了原有可编程器件门电路数有限的缺点。FPGA的使用非常灵活,同一片FPGA通过不同的编程数据可以产生不同的电路功能。FPGA在通信、数据处理、网络、仪器、工业控制、军事和航空航天等众多领域得到了广泛应用。随着功耗和成本的进一步降低,FPGA还将进入更多的应用领域。 本设计采用VHDL硬件语言的模块化思想,设计了PS2键盘扫描模块,七段

Windows系统管理试题

《Windows系统管理》单科结业试题 考试说明:考试形式为选择题、实验题。其中选择题有一个或多个答案,全部选对才得分,错选、多选和少选均不得分,共15道题,每题3分,共计45分;实验题1道,计 55分。整张试卷满分100分,为闭卷考试,考试时间为90分钟。请将选择题的答案写在 答题纸上,实验题以电子形式提交实验报告。 一、选择题,单选或多选(共15题,每题3分,共45分) 1)以下对Windows 2008企业版硬件要求的描述中,错误的是()。(选择1项) a)CPU速度最低1GHz(x86)和(x64),推荐大于2GHz b)内存最低512MB,推荐不少于2GB c)硬盘可用空间不少于4GB,推荐40GB以上 d)硬盘可用空间不少于10GB,推荐40GB以上 2)在Windows 2008中,添加或删除服务器“功能”(例如telnet)的工具是()。(选 择1项) a)功能与程序 b)管理您的服务器 c)服务器管理器 d)添加或删除程序 3)在一台安装了Windows 2008操作系统的计算机上,如果想让用户具有创建共享文件 夹的权限,可以把该用户加入()。(选择1项) a)Administrators b)Power Users c)Backup Operators d)Print Operators 4)在Windows Server 2008中,可以通过二种方式来共享文件:通过公用文件夹共享文 件和通过任何文件夹共享文件。对于通过公用文件夹共享文件的说法错误的是()。 (选择1项) a)无法控制某个用户对于公用文件夹的访问权限 b)如果关闭共享,登录这台计算机的用户也不能访问公用文件夹 c)启用公用文件夹共享,则能访问网络的任何人都可以打开公用文件夹中文件 d)启用公用文件夹共享,默认Administrators组成员通过网络可以删除公用文 件夹中的文件 5)一台系统为Windows Server 2008的域控制器,()能将其活动目录数据库备份到本 地磁盘E盘。(选择2项) a)通过Windows Server Backup备份系统状态到E盘 b)在命令行模式下输入命令:wbadmin start systemstatebackup –backuptarget: e: c)复制C:\Windows文件夹到E盘 d)利用NTbackup备份系统状态到E盘

键盘驱动程序程鼐

EDA技术课程设计任务书 班级:姓名:程鼐学号: 设计题目:键盘驱动程序 一、设计目的 进一步巩固理论知识,培养所学理论知识在实际中的应用能力;掌握EDA设计的一般方法;熟悉一种EDA软件,掌握一般EDA系统的调试方法;利用EDA软件设计一个电子技术综合问题,培养VHDL编程、书写技术报告的能力。为以后进行工程实际问题的研究打下设计基础。 二、设计任务 利用外接键盘实现键盘按键的选择,在8位动态七段数码管上实现按键扫描码的显示,在16X16点阵上实现按键字符的显示。 三、设计要求 (1)通过对相应文献的收集、分析以及总结,给出相应课题的背景、意义及现状研究分析。(2)通过课题设计,掌握计算机组成原理的分析方法和设计方法。 (3)学习按要求编写课程设计报告书,能正确阐述设计和实验结果。 (4)学生应抱着严谨认真的态度积极投入到课程设计过程中,认真查阅相应文献以及实现,给出个人分析、设计以及实现。 四、设计时间安排 查找相关资料(1天)、设计并绘制系统原理图(2天)、编写VHDL程序(2天)、调试(2天)、编写设计报告(2天)和答辩(1天)。 五、主要参考文献 [1] 江国强编著. EDA技术与实用(第三版). 北京:电子工业出版社,2011. [2] 曹昕燕,周凤臣.EDA技术实验与课程设计.北京:清华大学出版社,2006.5 [3] 阎石主编.数字电子技术基础.北京:高等教育出版社,2003. [4] Mark Zwolinski. Digital System Design with VHDL.北京:电子工业出版社,2008 [5] Alan B. Marcovitz Introduction to logic Design.北京:电子工业出版社,2003 指导教师签字:年月日

WINDOWS驱动编程

WDM驱动程序开发之读写设备寄存器:KIoRange类 2009-11-09 14:05 WDM驱动程序开发之读写设备寄存器:KIoRange类收藏 KIoRange类: 一、Overview KIoRange类将一系列特殊的外围总线的地址映射到CPU总线的地址空间。CPU总线上的地址即可能在CPU的I/O空间,也可能在CPU的内存空间,这取决于平台和外围总线的控制方式。考虑到可移植性,所有对I/O周期(I/O cycle)进行译码的设备驱动程序必须用这个类对I/O的位置(location)进行正确的访问(access)。KIoRange是KPeripheralAddress类的派生类。 一旦映射关系建立起来,驱动程序就用KIoRange类的成员函数去控制设备的I/O寄存器。这个类提供了8位、16位和32位I/O访问控制的函数。这些函数是以内联(in-line)函数方式来使用的,它们调用系统内相应的宏来产生依赖于平台的代码。 对I/O位置(location)进行访问的另一种备选方案是创建一个KIoRegister 的实例。这要通过取得一个KIoRange对象的数组元素来实现。 为了访问一系列外围总线内存空间的地址,需要用KMemoryRange类。 二、Member Functions 1、KIoRange - Constructor (4 forms) 构造函数 【函数原型】 FORM 1: KIoRange( void ); FORM 2: (NTDDK Only) KIoRange( INTERFACE_TYPE IntfType, ULONG BusNumber , ULONGLONG BaseBusAddress, ULONG Count, BOOLEAN MapToSystemVirtual =TRUE ); FORM 3 (WDM): KIoRange( ULONGLONG CpuPhysicalAddress, BOOLEAN InCpuIoSpace, ULONG Count, BOOLEAN MapToSystemVirtual =TRUE

《Windows系统管理》试题

产品名称:BENET 3.0 科目:Windows系统管理 单科结业——问卷 1.有一台Windows server2008服务器,管理员需要在服务器上创建一个共享文件夹,并且在其它计算机上无法通过“网络”浏览到该共享文件夹,可以使用(c )作为共享名。(选择一项) a) data b) Sdata c) data$ d) data* 2.在安装Windows server 2008的过程中显示器突然蓝屏,最可能是以下(d )原因导致的。选择一项) a)硬盘空间不足 b) 版本差异 c) 用户权限不够 d)硬件兼容性 3.你是一台Windows Server2008计算机的系统管理员,你正为—个NTFS分区上的文件夹aptech设置NTFS权限。用户帐号steven同时属于sales组和supports组,sales组对文件夹aptech有“读取和运行、列出文件夹目录、读取”权限,supports组对文件夹apte ch的权限为对应权限的拒绝权限。则当用户“even从本地访问文仵夹aptech时的权限是(d )。(选择一项) a) 读取 b) 读取和运行 c) 列出文件夹日录 d) 拒绝访问 d) 配置用户访问规则 4.公司网络采用Windows单域结构,域用户账户usera的登录时间属性如下图所示,以下说法正确的是(b )。 (选择二项)

a)作为域用户usera可以在任意时间登录域 b) usera如果在星期日(sunday)登录域会被拒绝 c)usera如果在星期六(Saturday)登录域会被拒绝 d) usera如果在星期四(Thursday)登录域会被允许 5.在Windows sever 2008系统中,卸载活动目录的命令是(c )。(选择一项) a) dcpromote b) promote c) dcpromo d) undcpromo 6.有一台处于工作组中的Windows server2008服务器,要配置该服务器上的本地用户帐户密码的长度不能小于8位,可以通过(d )工具进行配置。 (选择一项) a)计算机管理 b)域安全策略 c)域控制器安全策略 d)本地安全策略 7.在Windowsserver 2008支持的动态磁盘卷中,以下(c )的磁盘读写性能最高。(选择一项) a)跨区卷 b) 简单卷 c) 带区卷 d) 镜像卷 8.在WindowsServer 2008域中,在“销售部”OU上委派了普通域用户Iiqiang“重设用户密码并强制在下次登录时更改密码”的任务,关于此情况以下说法正确的是( d)。(选择一项) a)用户liqiang具有了更改所有域用户帐户密码的权限

Windows 内核技术与驱动开发笔记(完整版)

Windows 内核技术与驱动开发笔记 1.简述Driver Entry例程 动程序的某些全局初始化操作只能在第一次被装入时执行一次,而Driver Entry例程就是这个目的。 * Driver Entry是内核模式驱动程序主入口点常用的名字。 * Driver Entry的第一个参数是一个指针,指向一个刚被初始化的驱动程序对象,该对象就代表你的驱动程序。WDM驱动程序的Driver Entry例程应完成对这个对象的初始化并返回。非WDM驱动程序需要做大量额外的工作,它们必须探测自己的硬件,为硬件创建设备对象(用于代表硬件),配置并初始化硬件使其正常工作。 * Driver Entry的第二个参数是设备服务键的键名。这个串不是长期存在的(函数返回后可能消失)。如果以后想使用该串就必须先把它复制到安全的地方。 * 对于WDM驱动程序的Driver Entry例程,其主要工作是把各种函数指针填入驱动程序对象,这些指针为操作系统指明了驱动程序容器中各种例程的位置。 2.简述使用VC进行内核程序编译的步骤 编译方式是使用VC++进行编译 1.用VC新建工程。 2.将两个源文件Driver.h和Driver.cpp拷贝到工程目录中,并添加到工程中。 3.增加新的编译版本。 4.修改工程属性,选择“project | setting”将IterMediate file和Output file 都改为MyDriver_Check。 5.选择C/C++选项卡,将原有的Project Options内容全部删除替换成相关参数。 6.选择Link选项卡,将原有的Project Options内容删除替换成相关Link。 7.修改VC的lib目录和include的目录。 8.在VC中选择tools | options,在弹出的对话框中选择“Directories”选项卡,在“Show directories for”下拉菜单中选择“Include file”菜单。添加DDK的相关路径。 3.简述单机内核调试技术 答:1.下载和安装WinDbg能够调试windows内核模块的调试工具不多,其中一个选择是微软提供的WinDbg 下载WinDbg后直接双击安装包执行安装。 2.安装好虚拟机以后必须把这个虚拟机上的windows设置为调试执行。在被调试系统2000、2003或是xp的情况下打开虚拟机中的windows系统盘。 3.将boot.ini文件最后一行复制一下,并加上新的参数使之以调试的方法启动。重启系统,在启动时就可以看到菜单,可以进入正常windows xp,也可以进入Debug模式的windows xp。 4.设置VMware管道虚拟串口。调试机与被调试机用串口相连,但是有被调试机是虚拟机的情况下,就不可能用真正的串口连接了,但是可以在虚拟机上生成一个用管道虚拟机的串口,从而可以继续内核调试。 4.请画出Windows架构简图

windows源码分析(14)-权限管理篇

windows源码分析(14)-权限管理篇Windows系统是支持多用户的。每个文件可以设置一个访问控制表(即ACL),在ACL中规定每个用户、每个组对该文件的访问权限。不过,只有Ntfs文件系统中的文件才支持ACL。 (Ntfs文件系统中,每个文件的ACL是作为文件的一个附加属性保存在文件中的)。不仅ntfs文件支持ACL机制,每个内核对象也支持ACL,不过内核对象的ACL保存在对象头部的安全属性字段中,只存在于内存,对象一销毁,ACL就跟着销毁。因此,内核对象的ACL是临时的,文件的ACL则是永久保存在磁盘上的。文件的ACL由文件的创建者设置后保存在文件中,以后只有创建者和管理员才可以修改ACL,内核对象的ACL由对象的创建者在创建时指定。 Windows系统中为每个用户、组、机器指定了一个ID,叫SID。每个用户登录到系统后,每当创建一个进程时,就会为进程创建一个令牌(进程的令牌叫主令牌),该令牌包含了用户、组、特权信息。由于子进程在创建时会继承父进程的令牌,所以一个用户创建的所有进程的令牌都是一样的,包含着相同的用户、组、特权等其他信息,只是令牌ID不同而已。换个角度看,令牌实际上相当于用户身份,进程要访问对象时,就出示它的令牌让系统检查,向系统表明自己是谁,在哪几个组中。 这样,当有了令牌和ACL后,当一个进程(准确说是线程)要访问一个对象时,系统就会检查该进程的令牌,申请的访问权限,然后与ACL比较,看看是否满足权限,不满足的话就拒绝访问。 下面我们看看相关的数据结构 typedef struct _SID { //用户ID、组ID、机器ID UCHAR Revision;//版本号

相关主题
文本预览
相关文档 最新文档