当前位置:文档之家› KMDF示例

KMDF示例

KMDF示例
KMDF示例

摘要

本文档描述了如何用KMDF(Windows系列OS下WDF驱动开发环境的组件)开发驱动的简单示例,用于指导已熟悉KMDF的开发人员来编写第一个内核模式的驱动。本文通过几个内核模式驱动的示例来阐明WDF驱动的结构以及如何实现驱动的通用功能。

从结构组织上,本文在简单回顾KMDF的基础上,在第4章讲述如何编写基于KMDF 的最小Function驱动,在第5章讲述如何编写基于KMDF的纯软件驱动,在第6章讲述如何编写基于KMDF的硬件设备驱动。

由于译者水平有限,错误在所难免,请见谅。

xjtusdbzh

https://www.doczj.com/doc/d43307614.html,

目录

1 简介 (4)

2 WDF示例代码 (4)

2.1 按名称分类 (4)

2.2 按设备分类 (4)

2.3 KMDF和WDM示例的区别 (5)

2.4使用宏 (5)

3 结构和概念 (5)

3.1 对象创建 (6)

3.2 上下文区 (6)

3.3 IO队列 (6)

3.4 IO请求 (7)

4 KMDF最小驱动 (7)

4.1 DriverEntry (7)

4.2 AddDevice (8)

4.2.1 设备对象和上下文区 (8)

4.2.2 设备接口 (8)

4.2.3 默认IO队列 (9)

4.3 读、写和IOCTL (9)

5 KMDF无硬件驱动 (9)

5.1文件打开关闭 (9)

5.2另外的属性 (10)

5.2.1同步Scope (10)

5.2.2 IRQL (10)

5.2.3 CleanUp (10)

5.2.4 设定设备对象属性 (10)

5.3 PnP和电源 (10)

5.3.1 注册回调 (11)

5.3.2 电源策略管理 (11)

5.3.3 上电和下电的回调 (12)

5.3.4 Wake信号的回调 (12)

5.4 WMI (12)

5.4.1 初始化WMI (12)

5.4.2 WMI实例事件的回调 (12)

5.4.3 触发WMI回调 (12)

6 KMDF硬件驱动 (13)

6.1 支持中断 (13)

6.1.1 创建中断对象 (13)

6.1.2 中断使能和禁用 (13)

6.1.3 中断使能后和禁用前 (13)

6.1.4 处理中断 (14)

6.1.5 中断的延期处理 (14)

6.2 映射资源 (14)

6.3 多IO队列处理IO (15)

6.3.1 创建和配置队列 (15)

6.3.2 处理并发请求 (15)

6.3.3 处理BufferIO (16)

6.3.4 转发到其他队列 (16)

6.3.5从手动队列获得请求 (16)

6.4 注册表相关 (16)

6.5 自管理IO的WatchDog定时器 (16)

6.5.1 设备启动和重启时的自管理IO (17)

6.5.2 设备下电和被移除的自管理IO (17)

6.5.3 实现Watchdog定时器 (17)

1 简介

WDF是微软基于Windows系列OS的下一代驱动开发模型,同时支持Kernel模式和User模式驱动开发,两者基于独立但功能类似的驱动框架(分别是KMDF和UMDF)。

KMDF的设计目的是提高开发效率、鼓励更多工程师进行驱动开发,使用它我们可以迅速建立驱动的框架结构(能加载和运行),在此之上,我们可以添加更复杂的或硬件特定的功能。

本文讲解如何用KMDF写WDF驱动,重点关注WDF附带的示例代码细节,包括Sample Toaster、Featured Toaster和PCIDRV,两个Toaster用于了解WDF开发的一般步骤(不含硬件的驱动一个是最小驱动,一个是纯软件驱动),而PCIDRV用于示范硬件的驱动开发方法。

阅读本文,需要了解:Kernel编程的基础(例如IRQL和锁),WDF的设计目的、KMDF 对象模型以及IO模型,请参考《Architecture of the Kernel-Mode Driver Framework》,对应我翻译过的《WDK之内核模式驱动框架KMDF简介.doc》,以及《Architecture of the Windows Driver Foundation》。

2 WDF示例代码

WDF安装后有几个内核驱动示例代码,位于Src\Kmdf子目录中,您可以参考其驱动基本框架的编写以及特定功能的实现技巧。本节从名称、设备功能列出主要示例,关于驱动特性表请查英文原文档。

2.1 按名称分类

驱动名称描述

Echo 不控制任何硬件,示范如何使用串行IO对列莱完成读写,如何取消请求

FakeModem 无控制器Modem驱动

Firefly HID设备过滤驱动

NdisEdge 上沿是NDIS,下沿是USB、1394以及串口等

Ramdisk RAM磁盘驱动,示范如何在内存中创建虚拟磁盘

Serial 串口驱动

2.2 按设备分类

驱动名称设备模型描述

Serial 串口、并口、IDE控制器、

PS/2控制器硬件支持端口映射IO,支持中断(用户通知输入到达或其他异步事件)

Toaster bus driver 不符合PCI规范的多功能

PCI设备,多端口串口卡,

多端口(Port)网卡硬件有多个功能,支持多个设备或者驱动支持虚拟总线

Toaster filter driver 键盘、鼠标过滤驱动、存储

类过滤驱动、串口设备改变IO请求或者提供上层应用程序直接访问的过滤驱动

或者改变硬件资源的过滤驱动

NdisEdge 上沿是NDIS,下沿是USB、1394以及串

口等

Ramdisk RAM磁盘驱动,示范如何在内存中创建

虚拟磁盘

Serial 串口驱动

2.3 KMDF和WDM示例的区别

KMDF示例基本沿用WDM的示例的名称,如果不特别声明,两者甚至实现同样的功能,对两者进行对比分析将使您非常有收获。

基于KMDF的驱动代码更少、更简单,原因是KMDF完成了大部分WDM的细节,这样避免了重复编写所有驱动都需要的通用功能,只要为必须要处理的事件定义并实现回调函数即可。

例如,WDM驱动和KMDF驱动都需要支持电源管理和PnP,WDM驱动要成千行代码来确保驱动必须处理所有设备状态和所有IO请求(IRP),甚至必须处理驱动不支持的IRP。而基于KMDF的驱动不需要实现PnP和电源管理,也不需要处理自己不感兴趣的IRP,只需要处理设备硬件支持的功能和IO请求,其开发过程一般是先写一个简单的框架,再添加一点功能,测试没有问题后,再加其他更复杂的功能。您可对比最简单的例子来验证这一点,例如WDM的src/general/toaster/func/incomplete1和KMDF的src/kmdf/toaster/func/simple。

2.4使用宏

KMDF中使用宏PAGED_CODE和UNREFERENCED_PARAMETER,这两个宏都定义于ntddk.h中。

PAGED_CODE,checked版本有效,若IRQL不小于DISPATCH_LEVEL则产生断言。

UNREFERENCED_PARAMETER禁止编译器对没有使用的参数产生警告。

3 结构和概念

KMDF驱动是基于对象、靠事件驱动,并在运行时动态和KMDF框架连接起来,本节是KMDF基本概念的描述。

KMDF定义了驱动的通用结构的对象类型,每个对象有方法、属性、事件(通过回调触发),驱动要对设备需要的、而KMDF默认处理又不适合的事件设定回调函数,总之,基于KMDF的驱动包括:DriverEntry、多个回调函数以及若干功能函数。

KMDF驱动一般有一个驱动对象,多个设备对象,若干个队列对象,分别为:WDFDRIVER,WDFDEVICE,WDFQUEUE。

KMDF对象以树型结构来组织,WDFDRIVER是根,对象的生命周期为,当父对象被删除后,子对象自动被删除。

所有KMDF对象的创建方式都一样,包括初始化、创建两个步骤,对象可以有一个或多个上下文区,用于保存特定的数据。

本节描述对象和上下文区的创建、IO队列和IO请求,这些对KMDF非常重要。

3.1 对象创建

对象创建分三步:初始化配置、初始化属性、创建实例,分别使用

WDF_Object_CONFIG_INIT,WDF_OBJECT_ATTRIBUTES和Wdf Object Create。

其中配置对各对象不一样的,保存了各事件的回调函数指针,在创建的时候传给KMDF,由KMDF框架在必要的时候调用,而属性结构是各对象一样的,包括cleanup、destruction 回调、同步、执行的IRQL(指明对并发的支持程度、允许的最高IRQL)和上下文区信息(指针、类型、大小)。另外,如果不定义上下文区,那么属性一般使用默认值。

3.2 上下文区

对象实例可以有多个上下文区,用于存储数据,例如驱动分配的事件等,类似WDM的Extension(不懂什么情况下需要多个上下文区)。

驱动创建对象的时候指定该区的大小和类型,后续,KMDF创建该对象的时候,分配该区的内存(nonpaged),并初始化之,当KMDF删除该对象时候,上下文区被KMDF删除和释放。

上下文区被认为是对象的一部分,对驱动透明,因此驱动必须使用存取函数来获得该区的指针,KMDF提供宏来创建该存取函数(用宏来建立存取函数名真是Wonderful Idea)。

驱动分多个步骤定义和初始化上下文区,首先,定义代表该区的结构(头文件中),其次,声明上下文的类型(有名和无名,可在头文件中),指出Context的类型就是该结构类型,并创建存取函数名,最后,驱动把该区和对象实例关联起来。

上下文区是对象属性结构的一部分,其他部分包括同步Scope,执行级别IRQL,最后,驱动创建对象实例的时候把它传给KMDF框架。

3.3 IO队列

KMDF用IO队列管理发给驱动的请求,每个队列支持若干请求类型,所有队列可单独进行配置,KMDF和驱动本身都可以对IO请求排队。

队列的最重要的特性包括它接收请求的类型、分发请求的方式以及是否由KMDF负责它的电源管理。

单个队列可处理多种类型的请求,例如,驱动可能有一个同时处理读写请求的队列和一个只接收IO控制请求的队列。分发方式决定了同一时间驱动处理该类型请求的个数,例如串行、并行和手动三种不同的方式,串行就是同一时间只分发一个请求,等驱动处理完了再分发下一个,并行就是只要请求来了,就分发,手动是KMDF不主动分发,直到驱动主动

调用函数去分发(在驱动准备好处理的时候)。

默认情况下,KMDF的IO队列是自动电源管理的,就是说,KMDF根据电源状态(系统和设备)控制队列的启动和停止,另外,KMDF使用空队列来提示开始计算设备的idle 时间。

驱动用WDF_IO_QUEUE_CONFIG来配置队列,同时指定:接收请求的类型,队列分发请求的方式,IO请求处理的回调函数,是否让KMDF管理队列的电源,队列是否接收buffer 大小为0的请求等等。

和其他对象一样,队列也有自己的属性(通常使用默认),有时会更改,例如:

需要创建若干对象特定的上下文区用于保存数据;

指定队列被删除时候触发的回调函数;

指定队列的父对象(默认是设备对象)

3.4 IO请求

WDFREQUEST对象代表了应用程序发送的IRP,KMDF负责管理它,驱动甚至不直接接触IRP本身。当KMDF框架调用驱动的IO事件的回调函数时候,传入该对象指针作为参数。

驱动处理IRP时候使用IO请求的原始内存或者使用对象WDFMEMORY,后者能更简单和安全。

4 KMDF最小驱动

位于目录WinDDK\6000\src\kmdf\toaster\func\simple,属于纯软件功能驱动,创建4个对象:驱动、设备、设备接口、IO队列,并处理若干IRP(例如读、写和IOCTL),这是基于KMDF的最小驱动。源代码包括DriverEntry入口,AddDevice回调,读写回调以及IOCTL 回调。不对应硬件,所以不处理PnP和Power事件,功能和源代码对应关系如下图所示。

4.1 DriverEntry

用AddDevice指针初始化驱动对象的配置结构,设备枚举的时候KMDF调用AddDevice。

创建Driver对象,代表内存中的驱动,本质上,是在KMDF中注册了该驱动对象。

初始化驱动的事件跟踪(可选,此例无)

初始化驱动使用的资源(驱动级别,非设备级别,可选,此例无)

本函数是驱动加载后第一个执行的函数,不需要像WDM驱动那样保存驱动指针和注册表位置,KMDF框架会保存他们。

4.2 AddDevice

对于支持PnP的驱动,必须支持AddDevice回调函数,在OS枚举驱动的每个设备对象时候,KMDF调用该函数,其功能如下:

初始化设备属性及其上下文区(包括定义结构以及获得该区指针的函数名),然后创建设备,并挂到设备栈上。

设定PnP和电源管理的回调(可选,本例无)

创建设备接口(有三种方法:Inf的DDInstalls.Interface,Usermode程序的SetupDI函数和驱动直接创建设备接口)。

配置并创建IO队列

若对应的物理设备支持中断,那么创建中断对象(可选,本例无)

对于无硬件设备的驱动,实际上不需要处理PnP管理、电源管理以及中断,只需要实现创建设备对象,设备接口,配置IO队列(指定要处理的IRP以及回调指针)。

4.2.1 设备对象和上下文区

本例中上下文区对应FDO_DATA结构,存取该区的函数对应为ToasterFdoGetData,然后用WDF_OBJECT_ATTRIBUTES_INIT_CONTEXT_TYPE把该区和设备对象的属性关联起来,这样属性中就有了上下文区类型、需要的大小以及代表该区的指针。最后用属性做参数创建设备对象,并保存创建成功的设备对象指针和WDFDEVICE_INIT对象,KMDF按照FDO_DATA的大小来申请其空间,并根据其他信息来申请WDFDEVICE_INIT的空间,并初始化之,主要包括初始化设备和驱动的特性的方法,例如驱动支持的IO类型、设备的名称、设备的SDDL(安全描述定义语言),默认,KMDF驱动使用Buffer类型的IO。

WdfDeviceCreate创建设备对象时,把设备挂接到设备栈上,并设定适合的Flag和属性,然后返回WDFDEVICE对象指针,代表创建好的设备对象。

4.2.2 设备接口

每个能够被应用程序或者OS组件打开的设备都必须有一个设备接口,有三种方式可以创建之:

用户模式的安装程序使用SetupDi来创建。

Inf文件在DDInstall.Interfaces节来创建。

驱动调用WdfDeviceCreateInterface来创建。

创建时需要已创建成功的设备对象(实际上是用于关联设备和接口)、唯一的GUID号以及名字(可选),使用名字的目的是区分同一个GUID(包括相同驱动和不同驱动)的设备。

4.2.3 默认IO队列

本例使用了默认IO队列,让KMDF来进行队列的电源管理,默认队列会接收所有驱动没有明确要求发给别的队列的IO请求,例如读、写以及IOCTL等,注意,默认队列不接收Create请求(如何驱动定义了回调,例如读回调,那么KMDF会调用该回调)。

创建默认IO队列的配置时,传入配置参数ioEvents让KMDF去初始化之,设定分发方式为Parallel,之后在ioEvents设定读、写以及IOCTL的回调函数。

创建默认IO的队列时,传入设备对象、配置参数和属性参数(本例无),返回队列指针。

4.3 读、写和IOCTL

驱动可处理多个IO请求,例如读、写、IOCTL、内部IOCTL和默认处理。驱动在每个队列中注册需要的回调,当IO请求到达,KMDF分发请求,对于有注册回调的,直接调用,对于没有注册回调的,调用默认队列处理函数。

当KMDF调用回调时候,传入队列指针、内存指针等信息。如果驱动支持Buffer方式或者DirectIO方式的内存,那么驱动可以使用传入内存信息,也可以使用内存对象来获取内存,后者能简单和安全一些。

关于读处理,用OutputMemory获得内存,对于写处理,有三种选择,用CopyToBuffer 把Request对象的内存复制到驱动自己的内存,用InputMemory或者GetBuffer来获得内存的指针(具体应用请自行参考示例代码)

5 KMDF无硬件驱动

本例从第4章扩展而来,增加了文件打开关闭、若干属性设置、PnP和电源以及WMI。

5.1文件打开关闭

当打开设备的应用程序或者OS组件发出Create、Close和Cleanup请求的时候,驱动会收到文件对象事件(当然,驱动必须先注册这些事件的回调)。

对于Create事件,驱动要么注册回调直接被调用,要么从队列中收到事件。前者需要驱动在AddDevice函数中先以Create回调函数指针初始化一个文件对象的配置,然后在DeviceInit中设定该配置。后者需要创建队列指定WdfRequestTypeCreate类型,如果该队列的分发方式不是手动,那么应该注册并实现EvtIoDefault回调。如果驱动同时使用两者,那么入队优先。如果驱动同时不使用两者,那么KMDF收到该Create的IRP后会创建一个文件对象,并返回成功,驱动不会收到该IRP。

本例中的Create、Close都是使用了文件对象的配置,而对Cleanup则使用了设备对象的属性。

在AddDevice中设定设备对象的配置两种方式:队列或回调,前者优先。KMDF对文件打开不默认处理,驱动必须显式声明。

5.2另外的属性

本例新增三种属性,包括同步Scope、IRQL以及CleanUp。

5.2.1同步Scope

同步Scope决定了KMDF调用按照并发还是串行调用对象(设备或者队列)的回调,分为四种:设备、队列、无和默认。采用设备级别的,本质上所有IO是非异步的,所以驱动不需要对访问的共享数据加锁(有时成为Frameworks Locking)。驱动可使用同步scope去处理自己的硬件和数据,但不要使用这些去处理wdm驱动,以避免死锁(如何产生死锁,并没有搞懂)。采用队列级别,则KMDF串行调用队列中的IO事件。采用无Scope级别,则KMDF将不主动获得自选锁,同时并发调用回调,是WDFDRIVER的默认值。采用默认级别,则KMDF将根据该对象的父对象的Scope级别来调用,是除了WDFDRIVER以外的对象的默认值。

5.2.2 IRQL

驱动代码的执行级别是指KMDF应该在哪个IRQL上执行回调函数,分为三种,Passive、Dispatch和Default。如果设置Passive,KMDF会想办法让在Passive级别去调用,甚至是用workitem去保证这一点。如果设置位Default,那么调用者可能会在<=dispatch的任何级别去调用驱动,(例如当上层驱动或者KMDF已经维护了自旋锁,那么本驱动会在Dispatch级别被调用),注意分页故障。大部分驱动由于和wdm驱动在驱动栈中共存,应该使用Default。如果设置为Dispatch,那么并不表示该回调一定要在Dispatch上执行,只是说可能并且最高在该IRQL执行,必须注意分页故障。

5.2.3 CleanUp

在对象正在被删除的时候调用该函数,用于完成和对象相关的删除工作。对于设备对象,只是在设备删除的时候调用,用于清除和设备对象相关的内存等资源。如果驱动使用了该设备的引用,或者在该设备的上下文中申请了空间,那么应该在cleanup中删除。对于大部分驱动,该回调不需要,如果你申请了一个WDFMEMORY对象,只要保证其父对象是设备对象,那么你不需要释放其空间,KMDF会完成这个工作。

5.2.4 设定设备对象属性

驱动在AddDevice中设定这些属性,具体方法是,先定义属性对象,然后用结构FDO_DATA初始化之,然后显示设定Scope、IRQL、CleanUp,然后以该属性对象为参数创建设备对象。

5.3 PnP和电源

简单驱动可以使用WDF默认的PnP和电源管理处理,但大部分驱动都必须对PnP和电源请求做自己硬件相关的处理。

本例中Toaster驱动是设备的电源策略管理者,支持低电源状态下进行Idle和被唤醒,为此,驱动注册PnP、电源和电源策略事件回调,设定设备的电源策略,实现唤醒信号的处

理,实现上电和去电的回调以支持低电源时候进入Idle状态。

本例不对应硬件,所有的处理都非常简单,进一步的资料请参考《Introduction to Plug and Play and Power Management in the Windows Driver Foundation》。

5.3.1 注册回调

PnP和电源事件是对应于设备对象的,所以驱动必须在AddDevice函数中注册这些事件的回调,这些回调一般成对出现,在设备被添加或上电时实现一个,而在设备被移除或去电时实现另一个。实现方法都是定义属性对象,在其中赋值回调函数,把属性对象集成到设备的INIT对象中,创建设备对象时候把INIT对象传入。

进入工作态前、后,离开工作态前、后都有回调函数,如下表所示。

函数名称描述

EvtDevicePrepareHardware 设备进入Working状态前(Map资源)EvtDeviceD0Entry 设备进入Working状态后

EvtDeviceD0Exit 设备退出Working状态前EvtDeviceReleaseHardware 设备退出Working状态后(unMap资源)电源策略事件用于通知驱动在OS或者设备电源状态发生改变的时候应该进行的处理。实现方式和PnP、电源事件的方法类似,只不过把属性对象换成专门的电源策略对象。

具体讲是是否允许S0或SX状态下使用Wake信号(允许用户通过WMI设定,注意此功能依赖与总线特性),以及如何使用,如下表所示。

函数名称描述

EvtDeviceArmWakeFromS0 使能设备在OS处于S0时唤醒OS EvtDeviceDisarmWakeFromS0 禁用设备在OS处于S0时唤醒OS EvtDeviceWakeFromS0Triggered 当OS处于S0时对Wake信号的处理EvtDeviceArmWakeFromSX 使能设备在OS处于SX时唤醒OS EvtDeviceDisarmWakeFromSX 禁用设备在OS处于SX时唤醒OS EvtDeviceWakeFromSXTriggered 当OS处于SX时对Wake信号的处理

5.3.2 电源策略管理

在AddDevice中创建设备对象之后,驱动应该设定和Idle和Wake相关的电源策略。Idle 设置指定设备不工作多长时间就进入Idle状态,指定在OS的哪个电源状态让设备进入Idle 状态,指定是否允许用户改变idle的设定。

对Idle支持实现如下,先定义电源策略Idle对象idleSettings,然后用一个枚举常量初始化之,来指明是否允许设备在系统S0态产生Wake信号(USB设备应该选择选择性挂起常量),然后把idleSettings的超时值,指定设备不工作多长时间就进入Idle状态,最后让设备采用idleSettings。

Wake up设置指定设备是否可以唤醒OS(允许用户通过WMI设定,注意此功能依赖与总线特性),指定当OS进入sleep后,把设备状态置为D3。

5.3.3 上电和下电的回调

驱动为设备进入和退出工作态分别实现了D0Entry和D0Exit回调,这两个函数都会有一个入参,表示进入D0前和退出D0后的电源状态。

5.3.4 Wake信号的回调

若设备支持Wake Up,那么驱动应实现6个回调。为了使能Wake信号,KMDF会在设备处于D0态且电源管理IO停止的时候来调用2个使能函数,所以驱动在使能Wake信号的时候不会收到电源管理队列分发的IO请求,进而不需要把IO请求和Wake使能回调同步。

在使能回调中,功能驱动应该做设备相关的操作使得设备能够产生Wake信号,Wake 信号使能之后,KMDF把设备转换出D0态,此时驱动不需要特定处理,KMDF会调用D0Exit。

禁用则相反,也就是说执行顺序如下表所示:

函数名称描述

ArmS0/SX 先使能Wake信号

EvtDeviceD0Exit 然后退出D0态

EvtDeviceD0Entry 先进入D0态

Dis ArmS0/SX 然后禁用Wake信号

整个原理不是特别明白。

5.4 WMI

驱动初始化WMI,通过以下几个步骤:注册WMI数据提供者,创建多个数据块(WMI 实例对象,用于读写),实现数据块的读写,调用其读写(可选)。

5.4.1 初始化WMI

具体包括注册MOF的名字,填写WMI提供者对象的配置(GUID、若干Flag指定是否支持特定实例的回调和事件跟踪、实例对象的Buffer大小,WMI处理函数指针),然后创建之,进而填写该提供者对应的WMI实例对象的配置(包括提供者、提供者配置、若干Flag 指定是否只读、是否需要驱动显式注册实例对象,若干WMI功能函数指针用于处理WMI 请求),然后创建之。(共创建3个instance,其中设备信息块只允许修改debug级别,设备到达通知块无属性,控制块允许读写并提供函数处理)。

5.4.2 WMI实例事件的回调

KMDF实现了四种事件回调,包括读写整个实例、写实例中的某一项以及执行特定函数,用于响应WMI用户(指明了WMI提供者的GUID)的请求。

本例种实现读写WMI都比较简单,主要是对WMI实例的上下文区进行读写。

5.4.3 触发WMI回调

KMDF驱动可以主动触发WMI事件回调。本例在PreHard函数中触发,目的是动态获得WMI实例名称,用于Log。从源代码上讲,主要是填写结构WNODE_SINGLE_INSTANCE 的内容(空间驱动申请,WMI释放),然后调用IoWMIWriteEvent来触发。

6 KMDF硬件驱动示例

6 KMDF硬件驱动

PCIDRV驱动适用于PCI以太网卡,使用port和memory资源控制设备,能够在运行时停止和启用设备以支持低电源状态,支持数据读写的并发。

该示例位于:pcidrv/sys目录,除了支持Toaster功能外还支持以下特性:

处理PnP和电源事件

支持DMA接口

支持事件跟踪

支持中断

支持资源映射

使用多个IO队列处理设备IO

读写注册表

PCIDRV示例支持硬件,所以包含很多设备特定的代码,比Toaster复杂的多。

关于PnP、电源管理、DMA、事件跟踪的模型请参考其他文档《Introduction to Plug and Play and Power Management in the Windows Driver Foundation》,《DMA Support in Windows Drivers》,以及《Getting Started with Software Tracing in Windows Drivers》。

6.1 支持中断

为支持设备中断处理,KMDF驱动需要创建中断对象、使能/禁用中断、处理使能前/禁用后(可选)、中断发生后处理之。

6.1.1 创建中断对象

一般在AddDevice中创建中断,每个硬件中断都必须对应一个中断对象,每个中断对象都必须有Isr和Dpc的处理函数。

硬件中断发生时,KMDF框架调研Isr(在DIRQL级别),Isr会把后续相关处理压入到Dpc队列,当Dpc准备好后,框架调用之(在Dispatch级别)。

要创建中断对象,先创建其Config,设定Isr、Dpc、Disable、Enable、Spin Lock等等,如果中断使能后还要做些事情,必须实现两个相关回调(Post、Pre,这两个是在Passive级别调用)。中断对象一般不指定属性。

6.1.2 中断使能和禁用

设备进入D0态的过程中,KMDF框架先后调用D0Entry、IsrEnable、PostIsrEnable,D0Entry用于初始化设备,IsrEnable用于启动中断,执行与DIRQL,故应尽快完成,PostIsrEnable执行于Passive,用于做后续不太重要的工作。

设备退出D0态的过程中,KMDF框架先后调用PreDis,IsrDisable,D0Exit。

6.1.3 中断使能后和禁用前

在上电过程中,有些设备,如果在中断使能后,马上就被初始化时会引起中断风暴(大量的中断同时启用),而另一些设备,如果中断不使能,就不能初始化,为适应这些情况,

在中断使能后,设备初始化前,引入一个函数去处理这些情况,即PostIsrEnable函数,由KMDF框架自动调用他,在必要的情况下,继续初始化设备。

在下电过程中,KMDF框架先后调用PreDisable、Disable、D0Exit,注意PreDisable和PostEnable必须在PnPPower结构中定义。

6.1.4 处理中断

当中断产生,OS调用驱动来处理中断,但是,可能有多个设备连接到某个中断信号上,实际上,操作系统维护中断服务的列表,当中断信号来了,OS遍历该列表,直到有设备驱动认可和处理该中断信号。

此时KMDF截获操作系统的调用,然后依次调用驱动注册的Isr回调,注意其运行级别时DIRQL(超过APC_LEVEL),不要产生页故障,并且应尽可能少的占用执行时间。 Isr 回调应该仅仅实现以下几步:

如果设备没有中断,立即返回FALSE(Isr必须先检测中断是否被禁用以及是否激活)。

停止设备继续接收中断。

把中断相关工作压入DPC中。

6.1.5 中断的延期处理

DPC完成设备特定的中断处理,并使能中断,运行于DISPATCH_LEVEL,必须注意页故障。本例中,驱动创建IO队列的时候,同时创建了自旋锁,用于保护其处理IO的时候不被抢断。DPC最后需要来使能中断,必须DIRQL级别上执行。

6.2 映射资源

驱动在PreHard中映射资源,在RelHard中解除映射(和PreHard对应即可),用于设备进入D0前(设备枚举中或者因要重分配资源而重新上电时)和退出D0后对硬件做一些准备和清除工作,一般会成对被调用。

KMDF调用D0Entry之前,先调用PreHard,PreHard应该只映射资源,而不调用硬件初始化的相关任务,USB驱动一般在此时获得设备、配置描述符,选择配置,而不试图存取硬件。在PreHard中能够获得OS分配给设备的资源列表,并通过遍历以获得每个资源的详细信息。

在有些机器能把硬件资源映射成IO资源和内存资源,所以为了平台独立性,驱动应该支持这两种映射,这一点上,KMDF驱动和WDM驱动类似。

对于IO映射,驱动保存其基地址、范围以及和访问该资源的函数指针(读写IO端口的),对于内存映射,驱动检查其大小是否够用,然后把物理地址映射为基地址,并保存访问函数指针,同时也保存其基地址和范围。

对于中断资源,KMDF驱动只简单创建一个中断对象(在AddDevice中),该对象会自己收集其资源,而不需要驱动干涉。

硬件资源和设备紧密相关,编程时需要特别注意。驱动需要在设备被移除或者OS需要

重新分配资源的时候,把已经映射的资源取消映射。

本示例基于PCI设备,有3个基址寄存器,分别为内存、IO和Flash,驱动来决定是否使用内存和IO基址寄存器来存取控制和状态寄存器,在有些平台,IO寄存器能够映射到内存空间,驱动必须处理这些映射。

驱动在PreHard中调用NICMapHwResources,把OS分配的资源映射为IO和内存资源。

6.3 多IO队列处理IO

驱动创建和配置IO队列时有几种选择,最重要的是哪些IO被入队、哪些分发方式被使用(串、并、手动(驱动自己请求KMDF来发,同步、异步都可以)以及是否让KMDF 管理队列,设备对象可以有任意多个IO队列,每一个都可以被单独配置。

如果设备有默认队列和特定队列,KMDF把特定的IO压入特定队列,其他的压入默认队列,如果设备没有默认队列,KMDF只把特定的IO压入特定队列,而让其他IO请求失败(对Func和Bus驱动失败,对过滤驱动只是透传)。

驱动可以启动和暂停IO队列的分发。默认,KMDF处理IO的取消,当IO请求已经入队但是还没有分发,KMDF负责自动取消它,此时,如果驱动注册了取消通知回调,驱动还可以做一些事情,否则,驱动根本不知道这事。

如果UI要取消某IO请求,而该请求也已经被分发到驱动了,那么只有驱动注册取消回调,然后显式的标记它为取消,它才会被取消,如果此时驱动把该请求转发到其他队列,此时KMDF有参与,所以该IO请求会变成可取消的。

默认,KMDF处理IO请求的电源管理,每个IO队列从其所相关的设备继承电源状态,在PnP、电源状态切换以及设备不在工作态的任何时候,KMDF把来的IO请求入队,但不分发。因此,如果驱动在设备进入D0之前创建队列,那么该队列是Stopped的状态,KMDF 把任何发送给该设备的IO请求入队,当后续该设备进入工作态,KMDF恢复去分发请求。当然,驱动可以更改这种机制。

默认KMDF不分发0长度的IO请求,但驱动同样可以改变该机制。

6.3.1 创建和配置队列

驱动按以下步骤创建和配置队列:创建配置、初始化之(指定分发方式)、设定IO事件的回调、设定电源管理方式、设定是否接收0长度请求、指定接收的IO请求类型。(此种队列是非默认队列,对于默认队列,只要不需要显式设定接收IO请求的类型,KMDF会对驱动有注册回调的就调用,对于驱动没有注册回调的,有KMDF默认处理)。

本例对Read、Write、IOCTL各创建一个手动队列,由驱动自己分发请求,对于Write、IOCTL各有一个并发队列,由KMDF分发请求。本例无默认队列。

本例中创建5个队列,代码较多但很类似,请自行参考。

6.3.2 处理并发请求

如果IO请求需要DMA,驱动必须在处理该IO的时候建立DMA事务,具体见《DMA Support in Windows Drivers》。

如果IO请求不需要DMA,驱动只要获得并解析参数,然后直接处理或者分发到其他队列即可。注意从队列可获得设备指针,进而获得设备的上下文指针,那里保存着很多驱动的有用信息。

本例实现了多个IOCTL,其中QueryOID用了BufferIO,而Indecate直接转发到其他队列,请参考代码。

6.3.3 处理BufferIO

驱动能从Request对象分别获得In和Out的指针,对于BufferIO的对象,这两个指针不同,而对于MethodBuffer的对象,两者相同,所以驱动必须先备份出In内容,然后再写Out内容。获得这些指针的时候会指定一个最小长度需求,如果该指针代表的内存长度不够,那么指针获得操作将失败。然后,驱动会做一些设备特定的操作,如果此过程中In或者Out 代表的内存不够大,驱动将以失败来完成该Request,但此时会返回需要的长度,以便于UI 调整好内存大小继续调用。

顺便提一下,FIELD_OFFSET真是个好东西。

6.3.4 转发到其他队列

有时,驱动必须转发请求到其他,例如,KMDF只能把同一类请求都发送到某一队列,而驱动处理这些请求时,可能需要马上响应,这样就不能让处理占用太多的时间。所以,此时应该为可能占用很多时间的处理转移一下处理的位置,即对请求处理时候,把他转发到其他队列,然后马上返回。其他队列接收到请求,再进行处理。

6.3.5从手动队列获得请求

驱动主动从队列获得请求,可以获得第一个、最后一个,以及特定请求(注意find是查询,Found是出队)。有一些通用的查询技巧,注意查询和出队的区别,出队之后,驱动负责管理该请求,例如必须去完成、转发到其他驱动或者转发到其他队列。

驱动靠NICGetIoctlRequest函数中的死循环来检测驱动内部队列是否有新东西。(不清楚转发后如何通知驱动开始处理,不懂)

6.4 注册表相关

KMDF包括大量函数供驱动读写注册表,例如创建、打开、关闭注册表Key,查询、改变、删除注册表Key的内容。

在驱动创建设备对象前后都可以访问注册表,只不过使用的函数不同。根据Key类型的不同,有不同函数来处理,例如:DWORD、Binary、SZ等等。

对于NDIS驱动,驱动不负责电源策略管理,对其他驱动,驱动负责该管理。

6.5 自管理IO的WatchDog定时器

驱动可能需要处理一些和被入队的IO请求不相关的IO动作,或者需要和WDM驱动的行为同步。例如,驱动可能需要维护一个监视设备状态的监视器。类似的,驱动可能需要在设备启动和关闭操作系列步骤中和设备以及其他驱动通信。KMDF提供自管理的IO来适

应这种情况,KMDF提供的自管理的IO回调更适合于WDM,而不是WDF。(此段不懂)要使用自管理IO,驱动必须实现多个IO事件回调,KMDF在某些过程中出现PnP和电源状态切换时调用,例如在设备从系统中添加或者删除,设备被停止来平衡资源,设备转入低电源模式,设备从Idle态切换到低电源态,以及设备从低电源态切换回工作态。

这些IO事件回调包括:初始化、挂起、Flush、清除以及重启。

6.5.1 设备启动和重启时的自管理IO

当OS启动或者用户插入设备时,KMDF在调用D0Entry后,在完成PnP或者电源IRP 之前调用初始化回调,注意,在设备从低电源态转入工作态时,不调用该初始化回调。

Init初始化回调实现KMDF框架不管理的IO的初始化工作,例如,监视可能初始化的设备的状态以及启动定时器。

而当设备从低电源态到工作态,例如从Idle或者被停止以平衡资源态回到工作态,那么KMDF调用重启Restart回调。

该Restart回调的时机也是D0Entry之后,相关IRP完成之前,该回调应该恢复所有IO 活动(Init初始化的,在设备退出工作态挂起的),一般和Suspend回调功能相反。

Restart回调一般在Suspend回调之后,而后者一般只在设备进入低电源态以及被停止用于重分配资源时候调用。

6.5.2 设备下电和被移除的自管理IO

当上报下电或者被移除,KMDF调用多个回调以便让驱动停止和清除自管理的IO。

当设备要进入下电状态,例如要Idle,被移除了或者OS需要重新分配资源,KMDF都调用Suspend回调。该回调应该停止任何自管理IO活动(所有当设备存在,被激活的且需要被处理的活动),当设备处于可操作的状态,如果需要重新分配资源,下电或者被移除,KMDF会在调用D0Exit之前调用该回调。当异常删除后,在调用SurRem前调用该回调,如果设备在低电源态,后续如果设备在D0态。

如果设备正在被移除,KMDF会在设备进入Stop之后调用Fulsh回调,该回调必须让所有没有完成的IO请求失败,并且该回调时在Suspend和D0Exit退出之后被KMDF调用的。

最后,KMDF调用CleanUp回调,该回调保证所有自管理IO被完全停止,并释放所有在Init回调中分配的资源,和Init一样,该回调只被调用一次。

6.5.3 实现Watchdog定时器

本示例使用自管理IO来实现watchdog定时器,用于硬件连接和悬挂的检测,包括以下几部分:

为自管理IO事件设定回调。

在Init回调中创建定时器。

在Suspend回调中停止定时器。

在Restart回调中重启定时器。

在CleanUp回调删除定时器。

本示例没有实现Flush回调,因为没有和自管理IO相关的IO请求,所以不需要在Flush 中取消IO请求,永Suspend和CleanUp足够了。

骆驼祥子简答题

《骆驼祥子》简答题 1.请问小说的题目“骆驼祥子”主要包含哪些含义? 答案:以“骆驼祥子”来命名有三层含义:(1)点明小说的主人公——祥子;(2)概括著作的一个主要情节——骆驼祥子称号的得来。(3)揭示主人公的性格——像骆驼一样吃苦耐劳、 沉默憨厚。 2. 请简单介绍小说围绕祥子主要讲述了哪些故事? 答案:三起三落 (1)奋斗三年挣钱买了车→被十几个大兵抢了车; (2)卖骆驼又攒了买车钱→被孙侦探抢了买车钱; (3)结婚后靠虎妞买了车→最后下葬虎妞卖了车。 3、试结合祥子的相关事例分析其形象性格前后有着怎样的变化? 答案:由人变“兽”,人生道路上的三部曲: (1)在自食其力的劳动中充满自信与好强; (2)在畸形结合的家庭中痛苦无奈地挣扎; (3)在极度绝望中扭曲了灵魂堕落成走兽。 4、请用简洁的语言概括发生在祥子身上的一件事。 答案:祥子一次送曹先生去看电影。在茶馆里碰见了饿晕倒在地的老马和他的孙儿小马。老马是一个有自己车的车夫,他的悲惨遭遇给祥最大的希望蒙上了一层阴影。他隐约地感到即 使自己买上车仍然没有好日子过。 5、《骆驼祥子》中的祥子在曹太太家的生活怎样? 答案:吃得饱、有间宽绰的屋子、饭食不苦、主人对他很客气 6、有人说:假如曹先生能及时回京,虎妞不死,小福子不死,祥子就不会走向堕落。你同 意吗?请结合小说谈谈自己的理解感受。 答案:不同意,《骆驼祥子》中的祥子代表的是祥子这一类生活在社会底层受迫害的人, 即使这一个祥子凭借如此的巧合未堕落,只要现实未改变他终究不幸,更何况一定会有其他 祥子一类的人堕落下去,这是大多数那个时代的“祥子”的命运 7、祥子前后有什么变化?你认为造成祥子这种变化的原因是什么? 答案:祥子开始是“体面的,要强的,好梦想的,利己的,个人的,健壮的,伟大的”,而后来变成了“堕落的,自私的,不幸的”,这是由封建社会黑暗腐朽的社会制度造成的。 8.请结合《骆驼祥子》的背景,总结小说的思想主旨。 20-30 年代正是中国现代史上最黑暗、最混乱的多灾多难的年代。新旧军阀不断的争权 夺势的混战,再加上各种自然灾害的横行,使得中国农村迅速走向破产。而成批破产的农民,为了谋求生路便纷纷涌入城市。祥子就是这些涌入城市的破产农民中的一个典型。 明确:小说主要讲述了人力车夫祥子人生中三起三落,由人堕落为“兽”的悲惨遭遇, 表达了作者对当时黑暗社会的批判, 对像祥子一样社会最底层的劳动者苦难命运的同情和 关怀。 9、请结合小说内容简单介绍《骆驼祥子》在语言表达上有哪些特色? 明确:京味、幽默 “京味”如:写祥子从军阀部队逃出来以后喝馄饨时,“热汤像股线似的一直通到腹部,打 了两个响嗝,他知道自己又有了命”。完全用北京市民的口语,口中含汤的细节,热汤传身 的感觉,引起了祥子生命存在的心理体验。 “幽默”如:祥子的外貌和祥子给曹先生送东西的情节。 10.除了祥子之外,你还同情小说中的那一个人物?为什么?示例:小福子。尽管她一步

性能测试结果分析

性能测试结果分析 分析原则: 具体问题具体分析(这是由于不同的应用系统,不同的测试目的,不同的性能关注点) 查找瓶颈时按以下顺序,由易到难。 服务器硬件瓶颈-〉网络瓶颈(对局域网,可以不考虑)-〉服务器操作系统瓶颈(参数配置)-〉中间件瓶颈(参数配置,数据库,web服务器等)-〉应用瓶颈(SQL语句、数据库设计、业务逻辑、算法等) 注:以上过程并不是每个分析中都需要的,要根据测试目的和要求来确定分析的深度。对一些要求低的,我们分析到应用系统在将来大的负载压力(并发用户数、数据量)下,系统的硬件瓶颈在哪儿就够了。 分段排除法很有效 分析的信息来源: 1)根据场景运行过程中的错误提示信息 2)根据测试结果收集到的监控指标数据 一.错误提示分析 分析实例: 1)Error:Failed to connect to server “https://www.doczj.com/doc/d43307614.html,″: [10060] Connection Error:timed out Error: Server “https://www.doczj.com/doc/d43307614.html,″ has shut down the connection prematurely 分析: A、应用服务死掉。 (小用户时:程序上的问题。程序上处理数据库的问题) B、应用服务没有死 (应用服务参数设置问题)

例:在许多客户端连接Weblogic应用服务器被拒绝,而在服务器端没有错误显示,则有可能是Weblogic中的server元素的 AcceptBacklog属性值设得过低。如果连接时收到connection refused消息,说明应提高该值,每次增加25% C、数据库的连接 (1、在应用服务的性能参数可能太小了;2、数据库启动的最大连接数(跟硬件的内存有关)) 2)Error: Page download timeout (120 seconds) has expired 分析:可能是以下原因造成 A、应用服务参数设置太大导致服务器的瓶颈 B、页面中图片太多 C、在程序处理表的时候检查字段太大多 二.监控指标数据分析 1.最大并发用户数: 应用系统在当前环境(硬件环境、网络环境、软件环境(参数配置))下能承受的最大并发用户数。 在方案运行中,如果出现了大于3个用户的业务操作失败,或出现了服务器shutdown的情况,则说明在当前环境下,系统承受不了当前并发用户的负载压力,那么最大并发用户数就是前一个没有出现这种现象的并发用户数。 如果测得的最大并发用户数到达了性能要求,且各服务器资源情况良好,业务操作响应时间也达到了用户要求,那么OK。否则,再根据各服务器的资源情况和业务操作响应时间进一步分析原因所在。 2.业务操作响应时间: 分析方案运行情况应从平均事务响应时间图和事务性能摘要图开始。使用“事务性能摘要”图,可以确定在方案执行期间响应时间过长的事务。 细分事务并分析每个页面组件的性能。查看过长的事务响应时间是由哪些页面组件引起的?问题是否与网络或服务器有关? 如果服务器耗时过长,请使用相应的服务器图确定有问题的服务器度量并查明服务器性能下降的原因。如果网络耗时过长,请使用“网络监视器”图确定导致性能瓶颈的网络问题

行政执法考题示例

考题示例及答案 (部分考试范围,仅供参考,通用考题为网上随机抽取) 一、判断题 1、十八届三中全会通过的《中共中央关于全面深化改革若干重大问题的决定》指出,改革开放是当代中国最鲜明的特色。( A )A、正确B、错误 2、2013年10月23日,中国共产党第十八届中央委员会第四次全体会议通过了《中共中央关于全面推进依法治国若干重大问题的决定》。( A )A、正确B、错误 3、国家鼓励、支持和引非公有制经济发展,并对非公有制经济依法实行监督和管理。(A ) A、正确 B、错误 4、全国人大代表的组成只包括各个省、自治区、直辖市和特别行政区的代表。( B ) A、正确 B、错误 5、公务员的管理,坚持公开、平等、竞争、择优的原则,依照法定的权限、条件、标准和程序进行。(A )A、正确B、错误 6、国家对公务员实行集中管理,提高管理效能和科学化水平。(B )A、正确B、错误 7、没有法定依据或者不遵守法定程序的,行政处罚无效。( A )A、正确B、错误 8、限制人身自由的行政处罚只能由法律、行政法规设定。( B )A、正确B、错误 9、行政机关应当于举行听证的5日前将举行听证的时间、地点通知申请人、利害关系人,必要时予以公告。( B )A、正确B、错误 10、公民、法人或者其他组织对行政机关实施行政许可,享有陈述权、申辩权。( A ) A、正确 B、错误 11、行政强制措施包括限制公民人身自由,查封场所、设施或者财物,扣押财物,冻结存款、汇款等。(A )A、正确B、错误 12、作出冻结决定的行政机关应当在5日内向当事人交付冻结决定书。(B ) A、正确 B、错误 13、政府信息是指行政机关在履行职责过程中制作的,以一定形式记录的信息。(B )A、正确B、错误 14、行政机关公开政府信息,应当遵循公正、公平、便民的原则。( A ) A、正确 B、错误 15、行政执法实行无过错责任制。( B )A、正确B、错误 16、行政相对人对行政执法机关所作出的行政执法行为,享有陈述权、申辩权。( A ) A、正确 B、错误 17、《行政复议法》的立法目的是为了防止和纠正违法的或者不当的具体行政行为,保护公民、法人和其他组织的合法权益,保障和监督行政机关依法行使职权。( A ) A、正确 B、错误 18、公民、法人或者其他组织认为具体行政行为侵犯其合法利益,可以向人民法院提出行政复议申请。( B )A、正确B、错误 19、由专门的行政法院负责受理和审理行政案件。(B )A、正确B、错误

简答题专项复习(有答案)

1.(2012淮安市)如图1-12所示为人和一些动物的发声频率、听觉频率的范围信息,试归纳出上述信息的共性特征,井简述其合理性. 图1-12 1.答:根据题干的图中信息得到:狗的发声范围:452~1800赫兹,猫的发声范围是:760~1500赫兹,而蝙蝠是10000~120000赫兹,海豚的是7000~120000赫兹.狗的听觉范围是:15~50000赫兹,猫的听觉范围是:60~65000赫兹,而蝙蝠是1000~120000赫兹,海豚的是150~150000赫兹.所以狗的发声的频率范围最小.听觉频率范围最大的动物是海豚. 2.(2012梅州)放电影时银幕上发生的反射属于什么反射?简述银幕做成白色的原因。 答案:放电影时银幕上发生的反射属于漫反射。银幕做成白色的原因是白色的银幕能反射各种色光(或不同频率、波长的光)(评分说明:每一问各2分,共4分) 3.(2011宁波)临近毕业,承承所在班级拍摄毕业照是,摄影师看到两边有些同学没有进入镜头,他及时进行了调整,顺利完成了拍照,请你说说摄影师是怎样进行调整的? 将镜头离同学远一点,同时将暗箱的长度缩短一点。 4.(2012大连市)从冰箱冷冻室拿出的冻鱼,放在一盆冷水中,过一段时间将鱼从水中拿出,发现鱼的表面出现了一层较厚的冰。剥开这层冰,发现鱼已经完全“解冻”。请分析说明鱼表面这层较厚的冰是如何形成的。(“解冻”过程中,鱼的温度始终低于0℃) 从冷冻室拿出的鱼,温度远低于0℃.当将其放入水中时,它和水之间存在温度差,于是发生热传递。鱼吸收热量温度升高,水放出热量温度降低。当水温达到0℃时,由于鱼的温度还是低于0℃,所以水继续放热,于是凝固形成了冰。 5.(2011泉州市)1夏天,扇扇子为什么会感到凉快? 答:扇扇子时气流加快,使汗液蒸发加快,从而加快了蒸发时从身体吸热,所以感到凉快。

非连续性文本试题示例

综合性学习试题: 示例一:读图识表 作为一种新的文化展现,“读图”已经渗透到生活的各个方面,图文转换也成了一种考查学生阅读、分析、归纳、表述等多种能力的题型。 《北京市节约用水办法》将于2012年7 月1 日起实施。为了深入宣传该“办法”,培养学生的节水意识,某校举办了“北京水资源”专题展览。在参观的过程中,请你完成下面的任务。 分析下图,提取主要信息,并用一句话概括北京水资源的现状。 [解析]本题考查学生直接提取图表的显性信息,并根据信息进行推断总结、概括的能力。提取图表的主要信息时,要注意从“北京市人均

水资源量”与“国际人均极度缺水标准”“国际人均危及人类生存的灾难性标准”的比较入手,关注发展趋势。概括北京水资源的现状时,注意根据所提取的主要信息推断总结,并且语言要简明扼要,用一句话概括。 答案示例:①北京市人均水资源量远远低于国际人均极度缺水标准,甚至还低于国际人均危及人类生存的灾难性标准。②北京水资源极度匮乏。 示例二:文字拟写 这类试题一般由命题者给出材料或话题,要求考生根据题目的要求进行创作。如拟写宣传标语、广告词、对联、短信、建议、辩论词、颁奖词、演讲词、开场白、结束语、串联词、推荐语等等。由于它们的特点各不相同,写作要求也有差异,如标语、广告词、对联等具有形象性、创造性的特点,拟写时要结合语境,把握内容,控制字数,做到格式整齐,音韵和谐,修辞得当。 辩论词话题要明确,观点鲜明,语言准确,有理有据,理例相依;颁奖词、演讲词、开场白、结束语、串联词等大都要求文字简洁,语言恳切,富有气势,能调动听者的情绪,引起情感的共鸣。 而推荐语是把好的方案、优秀人物及其事迹向人或组织介绍,希望被接受而讲的话语,因此要注意观点与材料的统一。 3 月22日是“世界水日”,学校要办节水宣传画展。请你从下

问答题示例

问答题示例 1.画出低碳钢受拉是的应力应变曲线,并解释钢材的屈服强度和极极限强度的意义与 作用。或问:各参数及屈服比,对选用钢材有何意义? 2.碳素结构钢的牌号有哪几种类型。试说明依牌号的变化,碳素钢将做什么样的变化? 为神魔土木工程中主要用Q235钢? 3.大理石一般仅限室内墙面柱面及磨损小的地面装饰,为什么? 4.从水化硬化过程说明建筑石膏有哪些特点? 5.为什么石膏制品适用于室内而不适用于室外? 6.现有甲乙两种水泥厂生产的水泥熟料,其矿物成分如下:若用上述熟料分别制成水 泥,是估计他们的强度发展速度,水保养28天的强度有何差异? 7.硅酸盐水泥强度发展规律?影响水泥凝结硬化的主要因素? 8.什么叫水泥的体积安定性?水泥的体积安定性不良的原因是什么?如何解决安定 性不良? 9.叙述矿渣水泥的定义,水化特点,技术性能。 10.混合材料参量高的通用硅酸盐水泥有哪些特性? 11.什么是混凝土的和易性?和易性包括那几方面内容如何测定?影响因素有哪些? 12.为什么不宜用高强水泥配低强混凝土?为什么不宜用低强水泥配高强混凝土? 13.什么叫混凝土的耐久性?提高混凝土的耐久性的一般措施有哪些方面? 14.简述引气剂加入混凝土中,混凝土性能的变化? 15.试述砂石含泥量对混凝土性能的影响? 计算 1.一块标准的普通粘土砖,其尺寸240 115 240 mm,已知密度为 2.7g/cm3 ,干燥时 质量为2500g,吸水饱和为2900g。求:(1)材料的表观密度(2)材料的孔隙率 (3)材料的体积吸水率。 2.已知某砌块的外观尺寸为240mm 240mm 115mm ,孔隙率为37%,单块砌块干 燥时质量为2487g,进水饱和后质量为2984g,试计算:(1)该砌块的表观密度。(2) 质量吸水率与体积吸水率(3)开口孔隙率与体积吸水率 3.已知某混凝土搅拌站的混凝土实验室配合比为C:S:G=1:1.92:3.9 7,W/C=0.56,1立方米混凝土水泥用量为300Kg,试计算:(1) 若搅拌站的砂和石的含水率为5%和1%,则配制8立方米混凝土各材料实际用 量为多少?(2)若采用水泥强度等级为42.5的普通水泥,试估计水泥28 天强度。 4.某混凝土工程,其配合比为C:S:G=1:1.98:3.90,W/C=0.6 4,混凝土拌合物的体积密度为2400kg/m3,试计算:1立方米混凝土 用量为多少。若采用水泥强度等级为42.5的普通水泥,试估计水泥28天强度。 5.计算某

《Web项目测试实战》性能测试需求分析章节样章

5.1.2性能测试需求提取 复习了一些常见的理论概念后,我们开始性能测试需求的提取。这个过程是非常重要的,往往测试失败,就是因为在这个过程中不知道如何得到确切的性能指标,而导致测试无法正常开展。性能测试需求提取一般的流程如图5- 1所示。 图5- 1性能测试需求提取流程 分析提取指标 在用户需求规格说明书中,会给出系统的功能、界面与性能的要求。规范的需求规格说明书都会给出明确的性能指标,比如单位时间内访问量要达到多少、业务响应时间不超过多少、业务成功率不低于多少、硬件资源耗用要在一个合理的范围中,这些指标都会以可量化的数据进行说明。如果,实际项目并没有这些正规的文档时,项目经理部署测试任务给测试组长时,一般就会说明是否要对项目的哪些业务模块进行性能测试,以及测试的要求是什么的。最麻烦的就是项目经理或者客户要求给出一个测试部门认为可以的数据,这样非常难做的。可是“甲方”往往都是提要求的,“乙方”只能“无条件”接受! 表5- 1需求规格说明书中的性能要求 表5- 1给出的指标非常明确,在测试过程中,我们只需收集用户登录模块的响应时间、登录成功率、并发数、CPU使用率、内存使用率的数据,然后与表5- 1的指标进行比较即可,通过的,就认为达到了客户要求的性能,未达到就分析原因,并给出测试报告及解决建议。 大多数是没有明确的需求,需要我们自己根据各种资料、使用各种方法去采集测试指标。以OA系统为例,假设《OA系统需求规格说明书》中并未指明系统的性能测试要求,需要测试工程师自己分析被测系统及采集性能衡量指标。 分析OA系统的结构,所有功能中仅有考勤模块可能是被测系统最终用户经常使用的业务点,那么我们的重点应该在放在该模块上。一般我们可以从下面三个方面来确定性能测试点: 第一、用户常用的功能。常用的功能一旦性能无法满足,比如登录功能,从输入用户名与密码点击登录按钮到显示成功登录信息,花了5分钟,这样的速度是 人无法忍受的。而对于用户不常用的,比如年度报表汇总功能,三个季度甚 至是一年才使用,等个10分钟也是正常的,这些是跟用户的主观感受相关 的,得根据实际情况区分。

软件测试试题实例

1.什么是软件测试 使用人工和自动手段来运行或测试某个系统的过程,其目的在于检验它是否满足规定的需求或是弄清预期结果与实际结果之间的差异 2.软件测试的目的是什么 软件测试的目的在于发现错误;一个好的测试用例在于发现从前未发现的错误;一个成功的测试是发现了从前未发现的错误的测试。 3.软件测试的目标 软件测试以检验是否满足需求为目标。 4.什么是软件缺陷 满足下列五个规则之一才称为软件缺陷: 1)软件未达到产品说明书标明的功能。 2)软件出现了产品说明书指明不会出现的错误。 3)软件功能超出产品说明书指明的范围。 4)软件未达到产品说明书虽未指出但应该达到的目标。 5)软件测试人员认为软件难以理解、不易使用、运行速度缓慢,或者最终用户认为不好。 5.什么黑盒测试 黑盒测试是把测试对象看做一个黑盒子,测试人员完全不考虑程序内部的逻辑结构和内部特性,只依据程序的需求规格说明书,检查程序的功能是否符合它的功能说明。因此黑盒测试又叫功能测试或数据驱动测试。 6.黑盒测试方法都包括哪些 等价类划分、边界值分析、决策分析法、因果图分析、错误推测法等。 7.什么是等价类划分 把所有可能的输入数据(有效的和无效的)划分成若干个等价的子集(称为等价类),使得每个子集中的一个典型值在测试中的作用与这一子集中所有其它值的作用相同. 可从每个子集中选取一组数据来测试程序 8.什么是边界值分析法 边界值分析法就是对输入或输出的边界值进行测试的一种黑盒测试方法.通常边界值分析法是作为对等价类划分法的补充 9.什么情况下使用决策分析法 在一些数据处理问题当中,某些操作的实施依赖于多个逻辑条件的组合,即:针对不同逻辑条件的组合值,分别执行不同的操作。决策表很适合于处理这类问题 10.你是如何利用决策分析法设计用例 (1)确定规则的个数。 有n个条件的决策表有2n个规则(每个条件取真、假值)。 (2)列出所有的条件桩和动作桩。

实例程序

以下为CPP源文件代码,工程建立参见《VC指导》 示例1:设备打开和关闭 #include #include #include "driver.h" void main() { DWORD dwErrCde; ULONG lDevNum; long lDriverHandle; lDevNum=0; dwErrCde = DRV_DeviceOpen( lDevNum,&lDriverHandle); if ( dwErrCde != SUCCESS ) { printf("设备打开错误!\n"); return ; } else { printf("设备打开成功!\n"); printf("设备句柄:%ld\n",lDriverHandle); } dwErrCde = DRV_DeviceClose( &lDriverHandle ); if ( dwErrCde != SUCCESS ) { printf("设备关闭错误!\n"); return ; } else { printf("设备关闭成功!\n"); } }

示例2:读取AI单通道采样值 #include #include #include "driver.h" void main() { long DriverHandle; PT_AIConfig ptAIConfig; PT_AIVoltageIn ptAIVoltageIn; float advalue; DRV_DeviceOpen(0,&DriverHandle); //打开设备 //AI配置 ptAIConfig.DasChan=0;//AI通道0 ptAIConfig.DasGain=0;//Gain Code,+/-5V DRV_AIConfig(DriverHandle, (LPT_AIConfig)&ptAIConfig); //读取指定AI通道的电压值 ptAIVoltageIn.chan = 0;//通道0 ptAIVoltageIn.gain = 0;//Gain Code,+/-5V ptAIVoltageIn.TrigMode = 0; //内部触发 ptAIVoltageIn.voltage = (FLOAT far *)&advalue;//返回电压值 DRV_AIVoltageIn(DriverHandle,(LPT_AIVoltageIn)&ptAIVoltageIn); printf("AD value=%f!\n",advalue); DRV_DeviceClose( &DriverHandle ); //关闭设备 } 示例3:单通道AO输出 #include #include #include "driver.h" void main() { long DriverHandle; PT_AOConfig ptAOConfig; PT_AOVoltageOut ptAOVoltageOut;

混凝土简答题.上

第一章简答题 1.试述混凝土棱柱体试件在单向受压短期加载时应力一应变曲线的特点。在结构计算中,峰值应变和极限压应变各在什么时候采用? 2.什么是混凝土的徐变?影响混凝土徐变的主要因素有哪些?徐变会对结构造成哪些影响? 3.画出软钢和硬钢的受拉应力一应变曲线?并说明两种钢材应力一应变发展阶段和各自特点。 4.混凝土结构对钢筋的性能有哪些要求? 1.图1-1 是一次短期加载下混凝土的应力-应变曲线。oa段,ζc-εc关系接近直线,主要是骨料和结晶体受里产生的弹性变形。ab段,ζc大约在(0.3~0.8)cf之间,混凝土呈现明显的塑性,应变的增长快与应力的增长。bc段,应变增长更快,直到峰值应变0,应力此时达到最大值----棱柱体抗压强度fc。cd段,混凝土压应力逐渐下降,当应变达εcu时,应力下降趋缓,逐渐稳定。峰值应变ε0,是均匀受压钩件承载力计算的应变依据,一般为0.002左右。极限压应变,是混凝土非均匀受压时承载力计算的应变依据,一般取0.0033左右。 2.在不变的应力长期持续作用下,混凝土的变形岁时间的增长而徐徐增长的现象称为徐变。徐变主要与应力大小、内部组成和环境几个因素有关。所施加的应力越大,徐变越大;水泥用量越多,水灰比越大,则徐变越大;骨料越坚硬,徐变越小;振捣条件好,养护及工作环境湿度大,养护时间长,则徐变小。徐变会使构件变形增加,是构件的应力发生重分布。在预应力混凝土结构中徐变会造成预应力损失。在混凝土超静定结构中,徐变会引起内力重分布 3.图1-2 是软钢(有明显流

幅的钢筋)的应力-应变曲线。在A点(比例极限)之前,应力与应变成比例变化;过A点后,应变较应力增长快,到达B’点(屈服上限)钢筋开始塑流;B点(屈服下限)之后,钢筋进入流幅,应力基本不增加,而应变剧增,应力-应变成水平线;过C点后,应力又继续上升,到达D点(极限强度);过D点后钢筋出现颈缩,应变迅速增加,应力随之下降,在E点钢筋被拉断。图1-3是硬钢(无明显流幅的钢筋)的应力-应变曲线。钢筋应力在大约0.65倍的极限抗拉强度之前,应力-应变按直线变化,之后,应力-应变成曲线发展,但直到钢筋应力达到极限抗拉强度,没有明显的屈服点和流幅。超过极限抗拉强度后,由于颈缩出现下降段,最后被拉断。 4.(1)要求钢筋强度高,可节省钢材。 (2)要求钢筋的塑性好,使结构在破坏之前有明显的预兆。 (3)要求钢筋的可焊性好,使钢筋焊接后不产生裂纹及过大变形。 (4)要求钢筋与混凝土的粘接锚固性能好,使钢筋与混凝土能有效的共同工作。 第二章简答题 1.何谓结构上的作用、作用效应及结构的抗力? 2.荷载和作用有什么区别? 3.何谓结构的功能要求,它包括哪些内容?可靠度和可靠性的关系是什么? 4.我国不同类型建筑结构的设计使用年限是如何划分的? 5.结构的设计基准期和设计使用年限有何不同? 6.规范如何划分结构的安全等级? 7.何谓结构的极限状态?它包括哪两方面内容? 8.结构的功能函数和极限状态方程如何表达? 1.结构上的作用是指施加在结构上的集中力或分布,以及硬气结构外加变形或约束变形的原因。按其性质可分为直接作用或间接作用,以力的形式作用于结构上,称为直接作用,习惯上称荷载;以变形的形式出现在结构上,称为间接作用。按其随时间的变异分为永久作用,可变作用,偶然作用。 (1)永久作用:为在设计基准期内量值不随时间变化或变化与平均值相比可以忽略不计的作用,特点是统计规律与时间参数无关,例如结构自重,土压力等; (2)可变作用:在设计基准期内,有时出现有时不出现其量值随时间变化,且变化与平均值相比不可忽略,特点是统计规律与时间参数有关,例如风荷载,雪荷载,楼面活荷载;(3)偶然作用:在设计基准期内不一定出现,但一旦出现,往往数值大,持续时间短,例如爆炸,撞击,目前对一些偶然作用,国内尚未有比较成熟的确定的方法。 直接作用或间接作用与结构构件上,在结构构件内产生的内力或变形称为作用效应,例如梁中的弯矩,剪力,柱中的轴力,板的挠度以及变形裂缝等都属于作用效应。当为直接作用(荷载)时,其效应也称荷载效应。结构或结构件承受内力或变形的能力称为结构抗力,亦即结构承受作用效应的能力,如构件的受弯承载力,构件的刚度等。抗力与结构的形式,截面尺寸,材料等因素有关。 2.通常能使结构产生效应的原因,多数可归结为直接作用在结构上的力集(包括集中力和分布力),因此习惯上都将结构上的各种作用统称为荷载。但是有些情况下,比如温度变化,地基变形,地面运动等现象,这类作用不是以力集的形式出现,称为荷载并不合适,就像地震时,结构由于地面运动而产生惯性力,此力是结构对地震的反应,并非是力直接作用在结构上,应该叫“地震作用”。因此,通常认为作用的含义较全面,而荷载只是作用的一种形式。 3.结构在规定的设计使用年限内应满足的功能要求包括安全性、实用性和耐久性,具体包括:

性能测试分析报告案例

***系统性能测试报告 V1.0 撰稿人:******* 时间:2011-01-06

目录 1.测试系统名称及测试目标参考 (3) 2.测试环境 (3) 3.场景设计 (3) 3.1测试场景 (3) 3.1测试工具 (4) 4.测试结果 (4) 4.1登录 (4) 4.2发送公文 (6) 4.3收文登记 (8)

1.测试系统名称及测试目标参考 被测系统名称:*******系统 系统响应时间判断原则(2-5-10原则)如下: 1)系统业务响应时间小于2秒,用户对系统感觉很好; 2)系统业务响应时间在2-5秒之间,用户对系统感觉一般; 3)系统业务响应时间在5-10秒之间,用户对系统勉强接受; 4)系统业务响应时间超过10秒,用户无法接受系统的响应速度。 2.测试环境 网络环境:公司内部局域网,与服务器的连接速率为100M,与客户端的连接速率为10/100M 硬件配置: 3.场景设计 3.1测试场景 间

间 间 3.1测试工具 ●测试工具:HP LoadRunner9.0 ●网络协议:HTTP/HTTPS协议 4.测试结果 4.1登录 ●运行1小时后实际登录系统用户数,用户登录后不退出,一直属于在线状态,最 终登录的用户达到9984个;

●响应时间 ●系统资源

服务器的系统资源表现良好(CPU使用率为14%,有15%的物理内存值)。磁盘等其他指标都表现正常,在现有服务器的基础上可以满足9984个在线用户。 4.2发送公文 运行时间为50分钟,100秒后300个用户全部加载成功,300个用户开始同时进行发文,50分钟后,成功发文数量如下图所示,成功发文17792个,发文失败37 个;

财税知识基础应用—试题示例

财税知识基础应用—试题示例 科目代码:C011 第1题(单选题,1.5分)2017年6月10日,海河电器公司购进一台机器,取得增值税普通发票,该机器原值1000000元,预计使用5年,净残值100000元,采用年数总和法计提折旧,则海河电器公司2017年应为该机器计提的折旧额为()元。 A.125000 B.300000 C.150000 D.750000 答案:C 解析:应计提的折旧=(1000000-100000)×5÷15÷2=150000(元)。 第2题(单选题,1.5分)海河电器公司所签订销售合同中,载明销售金额为500万元(购销合同的印花税税率为0.3‰)。则该公司需要缴纳的印花税税额为()元。 A.2500 B.1500 C.5000 D.3000 答案:B 解析:销售合同应贴的印花税按合同中注明的价款作为计税依据,因此该公司应贴的印花税为500×0.3‰×10000=1500(元)。 第3题(多选题,2.5分)海河电器公司从事电冰箱、空调的生产与销售,可能涉及的税种有()。 A.消费税

B.增值税 C.资源税 D.城市维护建设税 E.企业所得税 答案:BDE 解析:电冰箱、空调的销售属于增值税的征收范围,在缴纳增值税的同时缴纳城建税及附加,销售的电冰箱、空调所有权属已经发生转移,还可能涉及企业所得税,因此选项BDE 正确。 第4题(多选题,2.5分)海河电器公司发生的下列各项中,应记入“财务费用”科目的有()。 A.利息支出 B.银行承兑汇票承兑手续费 C.财务会计人员工资 D.财务部门办公费 E.财务部门差旅费 答案:AB 解析:选项CDE应记入“管理费用”科目。 声明:此资源由本人收集整理于网络,只用于交流学习,请勿用作它途。如有侵权,请联系,删除处理。

8279示例程序

8279键盘和显示程序 Z8279 EQU 08701H //8279状态/命令口地址 D8279 EQU 08700H //8279 数据口地址 LEDMOD EQU 10H //左端输入八位字符显示 //外部译码键扫描方式,双键互锁 LEDFEQ EQU 38H //扫描速率 LEDCLS EQU 0D1H //清除 LEDWR0 EQU 80H //设定的将要写入的显示RAM地 址 ORG 0000H AJMP START ORG 0040H START: MOV SP,#60H LCALL INIT8279 //初始化8279 W AIT: MOV DPTR,#Z8279 MOVX A,@DPTR ANL A,#0FH JZ WAIT MOV A,#40H MOVX @DPTR,A MOV DPTR,#D8279 MOVX A,@DPTR ANL A,#3FH MOV R4,#00H MOV R5,A LCALL DISLED SJMP W AIT INIT8279: //8279初始化子程序 PUSH DPH //保存现场 PUSH DPL PUSH ACC LCALL DELAY //延时 MOV DPTR ,#Z8279 MOV A,#LEDMOD //置8279工作方式 MOVX @DPTR,A MOV A,#LEDFEQ //置键盘扫描速率 MOVX @DPTR,A MOV A,#LEDCLS //清除 LED 显示 MOVX @DPTR,A LCALL DELAY //延时 MOV DPTR,#Z8279 MOV A,#90H MOV DPTR,#D8279 MOV A, #40H MOVX @DPTR,A MOV A,#40H MOVX @DPTR,A MOV A,#0H MOVX @DPTR,A MOV A,#0H MOVX @DPTR,A MOV A, #0EFH MOVX @DPTR,A MOV A,#27H MOVX @DPTR,A MOV A,#5BH MOVX @DPTR,A MOV A, #7FH MOVX @DPTR,A POP ACC //恢复现场 POP DPL POP DPH RET 显示字符子程序 输入:R4,位置:R5 DISLED: PUSH DPH //保存现场 PUSH DPL PUSH ACC MOV A,#LEDWR0 //置显示起始地址 ADD A,R4 //加位置偏移量 MOV DPTR,#Z8279

物理中学考试简答题示例及问题详解80个

中考物理常考简答题示例及答案 1、在游泳池边向池底看去,感觉池水并不深,下水后才知道不是这么回事,试分析:为什么池水深度看起来比实际的浅? 答:光从一种介质斜射入另一种介质时要发生折射,人从空气看河底,实际看到的是河底的虚像,虚像的位置比实际河底的位置浅。 2、通常皮鞋的表面有许多毛孔,不是很光滑。当有灰尘附着在表面时,皮鞋就失去光泽,涂上鞋油仔细用布擦一擦,皮鞋就变得又亮又好看了,为什么? 答:因为皮鞋的表面不光滑有灰尘,光射向鞋面后发生漫反射,这样皮鞋就失去了光泽,涂上鞋油后,鞋油的微小颗粒能填充到鞋的毛孔中,用布仔细擦试,使鞋油涂抹得更均匀,鞋面就变得十分光滑,光射向鞋面后会发生镜面反射,皮鞋看起来就更光亮更好看了。 3、当往玻璃杯中倒入半杯开水时,你会发现杯子的上半部模糊不清,请你用初中物理知识解释这种现象。 答:往玻璃杯中倒入半杯开水时,开水蒸发产生水蒸气。高温水蒸气遇到温度较低的玻璃壁就液化成小水珠,并附在玻璃壁上,所以杯子的上半部模糊不清。 4、仔细观察,你会发现烧开水时,在最靠近壶嘴的地方反而不出现“白气”想一想,为什么? 答:那是因为靠近壶嘴的地方温度高,从壶嘴出来的是水蒸气,而水蒸气是肉眼看不到的。而那些看得到的"白气"是水蒸气遇冷而液化了,成了液态的小水珠,所以看得见。 5、在沙漠中的仙人掌的叶子呈针状有什么作用? 答:沙漠中的仙人掌的针状叶子减小了表面积,可防止体水分蒸发过快,有利于仙人掌在沙漠中的生存. 6、煨炖食物时,有经验的人总是先用大火将食物烧开,然后改用小火,试说明其中的道理。 答:先用大火可以将水迅速烧开,达到相对最高的温度沸点,继续加热水的温度不变,但是要保持水持续沸腾,要持续加热,调小火,是为了维持水沸腾,让水温保持最高,及可以使食物熟得快,也可以节能。 7、医生给病人检查时,常把一把小镜子在酒精灯上烧一烧,然后再放入病人的口腔,为什么? 答:这样做的目的是提高小镜子的温度,避免口腔中的水蒸气在镜面上遇冷而液化成小水珠附着在镜面上,使平面镜成像模糊.

软件性能测试结果分析总结

软件性能测试结果分析总结 平均响应时间:在互联网上对于用户响应时间,有一个普遍的标准。2/5/10秒原则。 也就是说,在2秒之内给客户响应被用户认为是“非常有吸引力”的用户体验。在5秒之内响应客户被认为“比较不错”的用户体验,在10秒内给用户响应被认为“糟糕”的用户体验。如果超过10秒还没有得到响应,那么大多用户会认为这次请求是失败的。 定义:指的是客户发出请求到得到响应的整个过程的时间。在某些工具中,请求响应时间通常会被称为“TTLB”(Time to laster byte) ,意思是从发起一个请求开始,到客户端收到最后一个字节的响应所耗费的时间。 错误状态情况分析:常用的HTTP状态代码如下: 400 无法解析此请求。 401.1 未经授权:访问由于凭据无效被拒绝。 401.2 未经授权: 访问由于服务器配置倾向使用替代身份验证方法而被拒绝。 401.3 未经授权:访问由于ACL 对所请求资源的设置被拒绝。 401.4 未经授权:Web 服务器上安装的筛选器授权失败。 401.5 未经授权:ISAPI/CGI 应用程序授权失败。 401.7 未经授权:由于Web 服务器上的URL 授权策略而拒绝访问。 403 禁止访问:访问被拒绝。 403.1 禁止访问:执行访问被拒绝。 403.2 禁止访问:读取访问被拒绝。 403.3 禁止访问:写入访问被拒绝。 403.4 禁止访问:需要使用SSL 查看该资源。 403.5 禁止访问:需要使用SSL 128 查看该资源。 403.6 禁止访问:客户端的IP 地址被拒绝。

403.7 禁止访问:需要SSL 客户端证书。 403.8 禁止访问:客户端的DNS 名称被拒绝。 403.9 禁止访问:太多客户端试图连接到Web 服务器。 403.10 禁止访问:Web 服务器配置为拒绝执行访问。 403.11 禁止访问:密码已更改。 403.12 禁止访问:服务器证书映射器拒绝了客户端证书访问。 403.13 禁止访问:客户端证书已在Web 服务器上吊销。 403.14 禁止访问:在Web 服务器上已拒绝目录列表。 403.15 禁止访问:Web 服务器已超过客户端访问许可证限制。 403.16 禁止访问:客户端证书格式错误或未被Web 服务器信任。 403.17 禁止访问:客户端证书已经到期或者尚未生效。 403.18 禁止访问:无法在当前应用程序池中执行请求的URL。 403.19 禁止访问:无法在该应用程序池中为客户端执行CGI。 403.20 禁止访问:Passport 登录失败。 404 找不到文件或目录。 404.1 文件或目录未找到:网站无法在所请求的端口访问。 需要注意的是404.1错误只会出现在具有多个IP地址的计算机上。如果在特定IP地址/端口组合上收到客户端请求,而且没有将IP地址配置为在该特定的端口上侦听,则IIS返回404.1 HTTP错误。例如,如果一台计算机有两个IP地址,而只将其中一个IP地址配置为在端口80上侦听,则另一个IP地址从端口80收到的任何请求都将导致IIS返回404.1错误。只应在此服务级别设置该错误,因为只有当服务器上使用多个IP地址时才会将它返回给客户端。404.2 文件或目录无法找到:锁定策略禁止该请求。 404.3 文件或目录无法找到:MIME 映射策略禁止该请求。

24个汇编实例小程序文件

24个汇编小程序 题目列表: 逆序输出字符串“BASED ADDRESSING” 从键盘上输入两个数,分别放到x,y单元,求出它们的和 试编写一段程序,要求在长度为10h的数组中,找出大于42h的无符号数的个数并存入地址为up开始区域,找出小于42h的无符号数的个数并存入地址为down的开始区域 键盘输入一段字符串,其中小写字母以大写字母输出,其他字符不变输出 从键盘上就收一个小写字母,找出它的前导字符和后续字符,在顺序显示这三个字符 把一个包含20个数据的数组M分成两组:正整数组P和负整数组N,分别把这两个数组中的数据的个数显示出来 求出首地址为data的100个字数组中的最小偶数,并把它放在ax中 输入两船字符串string1和string2,并比较两个字符串是否相等,相等就显示“match”,否则显示“no match” 从键盘接收一个四位的十六进制数,并在终端显示与它等值的二进制数 从键盘输入一系列以$为结束符的字符串,然后对其中的非数字字符计数,并显示计数结果 有一个首地址为mem的100个字的数组,试编程序删除数组中所有为零的项,并将后续项向前压缩,最后将数组的剩余部分补上零 从键盘上输入一串字符(用回车键结束,使用10号功能调用)放在string中,是编制一个程序测试字符串中是否存在数字。如有,则把cl的第五位置1,否则将该位置置0 在首地址为data的字数组中,存放了100h的16位字数据,试编写一个程序,求出平均值放在ax寄存器中,并求出数组中有多少个数小于此平均值,将结果放在bx寄存器中(f分别考虑有符号数、无符号数情况) 一直数组A包含15个互不相等的整数,数组B包含20个互不相等的整数。试编制一个程序,把既在A中又在B中出现的整数存放于数组C中 设在A、B和D单元中分别存放着三个数。若三个数都不是0,则求出三个数的和并存放在S 单元,若其中有一个数为0,则把其它两个单元也清零。请编写此程序

性能测试案例分析

1.简要场景描述: 被测项目的数据库服务采用ORACLE 10g,测试功能点选择的是一个新建录入保存业务。当并发20用户时,数据库资源占用正常,处理业务响应时间正常,当并发40用户时,数据库服务器CPU占用率突增到100%,系统几乎不响应。 2.对ORACLE 10g进行监控: 2.1首先打开监控开关: exec dbms_monitor.serv_mod_act_trace_enable (service_name=>''); 在oracle安装目录\product\10.2.0\admin\gsp\udump目录下每个session形成.trc文件。 2.2通过tkprof进行分析: 根据日期选择相应的.trc文件,在命令行下通过tkprof进行分析: tkprof servname_ora_2336.trc utput=servname_ora_2336.txt SORT=(EXEELA, PRSELA, FCHELA) 形成结果文件servname_ora_2336.txt。 2.3查看分析结果文件: 发现存在大量的建临时表语句,耗用了大量的CPU资源,而且花费的时间很长。 create table myHelp4879f036d (Rowp int PRIMARY KEY,OID varchar(1000),Code varchar(1000),Name varchar(1026),ZJM varchar(100),Path varchar(40)) call count cpu elapsed disk query current rows ------- ------ -------- ---------- ---------- ---------- ---------- ---------- Parse 0 0.00 0.00 0 0 0 0 Execute 1 19.06 196.34 24 751455 1552 0 Fetch 0 0.00 0.00 0 0 0 0 ------- ------ -------- ---------- ---------- ---------- ---------- ---------- total 1 19.06 196.34 24 751455 1552 0

面向对象程序的设计期末考核试题样例与解答

《面向对象程序设计》期末考核试题样例及解答 一、单项选择(每小题1分,12小题,共12分) 1.C++源程序文件的缺省扩展名为( )。 A.cpp B.exe C.obj D.lik 2.x>0||y==5 的相反表达式为()。 A.x<=0||y!=5 B.x<=0&&y!=5 C.x>0||y!=5 D.x>0&&y==5 3.在下面的字符数组定义中,有语法错误的是( )。 A.char a[20]=“abcdefg”; B.char a[]=“x+y=55.”; C.char a[15]; D.char a[10]=’5’; 4.以下正确的函数原型语句是( )。 A.double fun(int x,int y) B.double fun(int x;int y) C.double fun(int,int); D.double fun(int x,y); 5.在下面存储类中,()的对象不是局部变量。 A.外部静态类 B.自动类 C.函数形参 D.寄存器类 6.假定有 “struct BOOK{char title[40];float price;};BOOK*book=new BOOK;”, 则正确的语句是()。 A.strcpy(book->title,”Wang Tao”); B.strcpy(book.title,”Wang Tao”); C.strcpy(*book.title,”Wang Tao”); D.strcpy((*book)->title,”Wang Tao”); 7.软件产品所具有的全部或部分地再用于新的应用的能力称为该软件的()。 A.可维护性 B.可复用性 C.兼容性 D.正确性 8.在多文件结构的程序中,通常把含有 main()函数的文件称为()。 A.主文件 B.实现文件 C.程序文件 D.头文件 9.在一个用链表实现的队列类中,假定每个结点包含的值域用 elem 表示,包含的指 针域用 next 表示,链队的队首指针用 elemHead 表示,队尾指针用 elemTail 表示,若链队 为空,则进行插入时必须把新结点的地址赋给( )。 A.elemHead B.elemTail C.elemHead 和 elemTail D.elemHead 或 elemTail 10.假定 AB 为一个类,则执行“AB a,b(2),c[3],*p=&a;”语句时共调用该类无参构造函数的次数为( )。 A. 5 B. 6 C. 3 D. 4 11.引入友元的主要目的是为了()。 A.增强数据安全性 B.提高程序的可靠性 C.提高程序的效率和灵活性 D.保证类的封装性 12.如果是类 B 在类 A 的基础上构造,那么,就称()。 A.类 A 为基类或父类,类 B 为超类或子类 B.类 A 为基类、父类或超类,类 B 为派生类或子类 C.类 A 为派生类,类 B 为基类 D.类 A 为派生类或子类,类 B 为基类、父类或超类

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