当前位置:文档之家› Windows 中断程序设计(一)

Windows 中断程序设计(一)

Windows 中断程序设计(一)
Windows 中断程序设计(一)

Windows 中断程序设计(一)

摘要该文探讨Windows3.1的中断机制,并结合DPMI接口给出一种中断程序设计方法,以越过系统和应用程序的消息队列,处理外部实时事件。

一、前言

Windows提供强大的功能以及友好的图形用户界面(GUI),使得它不仅广泛的用作管理事务型工作的支持平台,也被工业领域的工程人员所关注。但Windows3.1并非基于优先级来调度任务,无法立即响应外部事件中断,也就不能满足工业应用环境中实时事件处理和实时控制应用的要求。因此,如何在Windows环境中处理外部实时事件一直是技术人员尤其是实时领域工程人员所关注的问题。目前已有的方法大都采用内挂实时多任务内核的方式,如Windows下的实时控制软件包FLX等,而iRMX实时操作系统则把Windows3.1当作它的一个任务来运行。对于大型的工程项目,开发人员可采用购买实时软件然后集成方式。

对中小项目,从投资上考虑就不很经济。如何寻找一种简明的方法来处理外部实时事件依然显得很必要。

本文首先阐述Windwos的消息机制及中断机制,然后结合DPMI接口,给出一种保护模式下中断程序的设计方法,以处理外部实时事件。经实际运行结果表明,该方法具有简洁、实用、可靠的特点,并同样可运行于Win95。

二、Windows的消息机制

Windows是一消息驱动式系统,见图1。Windows消息提供了应用程序

与应用程序之间、应用程序与Windows系统之间进行通讯的手段。应用程序要实现的功能由消息来触发,并靠对消息的响应和处理来完成。Windows系统中有两种消息队列,一种是系统消息队列,另一种是应用程序消息队列。计算机的所有输入设备由Windows监控,当一个事件发生时,Windows先将输入的消息放入系统消息队列中,然后再将输入的消息拷贝到相应的应用程序队列中。应用程序中的消息循环从它的消息队列中检索每一个消息并发送给相应的窗口函数中。一个事件的发生,到达处理它的窗口函数必需经历上述过程。值得注意的是消息的非抢先性,即不论事件的急与缓,总是按到达的先后排队(一些系统消息除外),这就使得一些外部实时事件可能得不到及时的处理。

图1

三、Windows的保护模式及中断机制

1.Windows的保护模式

保护模式指的是线性地址由一个选择符间接生成的,该选择符指向描述表中的某一项;而实模式中则通过一个段/偏移量对来直接寻址。80386(486)CPU提供的保护模式能力包括一个64K的虚拟地址空间和一个4G的段尺寸。Windows3.1实现时有所差别,它支持标准模式和增强模式。标准模式针对286机器,不属本文探讨范围。增强模式是对386以上CPU而言,Windows正是使用保护模式来打破1M的屏障并且执行简单的内存保护。它使用选择器、描述器和描述器表控制访问指定内存的位置和段。描述器表包括全局描述器表、局部描述器表、中断描

述器表。保护模式与实模式有许多不同。其中显著的差异是访问内存的机制不同。

2.中断机制

(1)实模式中断

为了便于理解,我们先回顾实模式中断。

在实模式下,中断向量表IVT起到相当重要的作用。无论来自外部硬件的中断或是内部的软中断INTn,在CPU中都产生同样的响应。

①CPU将当前的指令指针寄存器(IP)、代码段寄存器(CS)、标志寄存器压入堆栈。

②然后CPU使用n值作为指向中断向量表IVT的索引,在IVT中找出服务例程的远地址。

③CPU将此远地址装入CS:IP寄存器中,并开始执行服务例程。

④中断例程总以IRET指令结束。此指令使存在堆栈中的三个值弹出并填入CS、IP和标志寄存器,CPU继续执行原来的指令。

(2)保护模式中断

保护模式中断过程与实模式中断过程类似,但它不再使用中断向量表IVT,而使用中断描述符表(IDT)。值得一提的是,Windows运行时IVT还存在,应用程序并不使用它,Windows仍然使用,但含义已不同。

①IVT结构:IVT在RAM的0000∶0000之上,占据开始的1024字节。它仍然由BIOS启动例程设置,由DOS填充到RAM中。

②IDT中断描述符表:保护模式下,Windows操作系统为实现中断机制而

建立的一个特殊表,即中断描述符表IDT。该表被用来保存中断服务例程的线性地址,它们是真正的24位或32位地址,没有段:偏移值结构。中断描述器表最多可含有256个例程说明,详细说明请见【3】。I

DT结构见图2。

图2

③当中断或异常发生时,处理过程与实模式类同。当前的CS∶IP值和标志寄存器值被存储。保存的内容还包括CPU其他内部寄存器的值,以及目前正在被执行的任务的有关信息(若必须发生任务切换的话)。CPU设法获取中断向量后,以它为索引值,查找IDT中的服务例程远地址,接着将控制转移到该处的服务例程。这是与实模式转移到IVT的不同所在。保护模式使用IDTR寄存器分配和定位内存中的IDT中断描述符表。IDT 在内存中是可移动的,与IVT固定在内存中刚好相反。IDT中断描述符表在Windows中起决定性的作用。理解了Windows下保护模

式的中断机制。有助于我们理解中断服务程序的设计,它的关键就在于如何将服务例程的地址放入IDT中断描述符表中。当中断发生时,如何将断点地址及CPU各寄存器值保护起来;中断结束时,如何将保护的值恢复。Windows系统本身并不提供实现上述功能的API,而DOS保护模式接口DPMI正具备了上述的功能。

下面我们首先介绍DPMI接口,然后基于它实现Windows下中断服务程序的设计。

四、DOS保护模式接口DPMI

Windows除了标准服务外,还支持一组特殊的DOS服务,称为DOS保护模式接口DPMI,由一些INT2FH和INT31H服务组成。它使应用程序能够访问PC系列计算机的扩充内存,同时维护系统的保护功能。DPMI通过软件中断31h来定义了一个新的接口,使得保护模式的应用程序能够用它作分配内存,修改描述符以及调用实模式软件等工作。

Windows为应用程序提供DPMI服务。即Windows是DPMI的宿主(host),应用程序是DPMI的客户(client),可通过INT-31H调用得到DPMI服务。INT-31H本身提供多功能。其中它的中断管理服务允许保护模式用于拦截实模式中断,并且挂住处理器异常。有些服务能够和DPMI宿主合作,以维护应用程序的虚拟中断标志。

可以用INT31H来挂住保护模式中断向量,以中断方式处理外部实时事件。利用INT31H,功能0205H:设置保护模式中断向量,将特定中断的保护模式处理程序的地址置入中断向量里。调用方式:AX=0205H,BL=中断号,CX∶(E)DX=中断处理程序选择符:偏移值。返回:执行成功CF=清零,执行失败CF=置位。

挂住/解挂中断向量的时机很重要。主窗口第一次被创建时会传送它WM-CREATE消息,这时是挂住中断向量的最好时机。退出时需解挂向量,否则Windows可能崩溃。主窗口接收到WM-DE-STROY之后进行解挂工作,是最适合的。解挂向量可先用INT35H,0204H功能将老的中断向量保存,退出时用INT35H,0205H恢复。

五、编程实现

有了DPMI的支持,我们就可以很方便地处理数据采集、串行通信等工业过程中的实时事件。下面以Windows3.1平台下中断方式实现的串行通信为例,说明中断程序的编制和实现。为便于参考,给出了详细的代码。开发平台BC3.1/BC4.5,其本身支持0.9版的DPMI,无需运行其它支持DPMI的软件。编程语言C,可与C++混合编译。

初始化COM1,9600波特率,每字符8bits,1个停止位,中断接收,查询发送。//windowsasycommunication

//byLiXiuming

//lastmodifiedonJune25,1996

#include〈windows.h〉

#include〈dos.h〉

voidinterruptfarDataReceive();

voidinterruptfar(*old-vector)();

unsignedchardatacom-r1024],datacom-s1024];

intinflag=0;

unsignedints8259;

intInitCom1()

Windows程序设计题(含简答题答案)

Windows 程序设计》模拟题 单项选择题 1. 在 VC++ 中,项目文件的扩展名是( B )。 A ) exe B)dsp C ) dsw D ) cpp 2. 在 MFC 中,利用 ClassWizard 不能( D )。 A )建立新类 B )进行消息映射 C )增加类的成员变量 D )插入资源 当滑块滑动时,滑块条控件将发送滚动消息来通知父窗口,垂直滑动条发送( 3. C )消 息。 4. 5. A ) WM_CHAR B ) WM_HSCROLL C ) W M_VSC ROLL 更新菜单状态的消息是( C A ) WM_COMMAND )。 C ) UPDATE_COMMAND_UI 对于消息队列描述正确的是( A )在Windows 中只有一个消息系统, 据结构,用于临时存储消息。 D ) WM_CHANG E B ) UPDATE D) INVALIDATE 即系统消息队列。 消息队列是一个系统定义的数 B )系统可从消息队列将信息直接发给窗口。 另外,每个正在 Windows 下运行的应用程 序都有自己的消息队列。 C )系统消息队列中的每个消息最终都要被 USER 模块传送到应用程序的消息队列中去。 应用程序的消息对列中存储了程序的所有窗口的全部消息。 D )以上都正确 6. 在 MFC 中,所有的控件都是( B )类的派生类,都可以作为一个特殊的窗口来处理。 CView B ) CWnd C) 7. 使用 CWindow C) D ) CDialog GetDC () 获取的设备上下文在退出时,必须调用( A )释放设备上下文。 ReleaseDC() B ) delete() DeleteDC () D ) Detach () 8. 希望菜单无效,应该用 CCmdUI 类的( A )成员函数。 A ) Enable B ) SetRadio C ) SetCheck D ) SetText 9.希望菜单前出现一个“V”,应该用 CCmdUI 类的(C )成员函数。 A ) Enable B ) SetRadio C ) SetCheck D ) SetText 10.下面(A )不是MFC 设备环境类CDC 类的派生类。 A ) GDI B ) CPaintDC C) CClientDC D) CWindowDC 11.在MFC 中,所有的文档类都派生于( C ),所有的视图类都派生于( A )。 A) CView B) CWindow C) CDocument D) CFormView

windows程序设计之扫雷游戏经典之作

WIN32模拟WINDOWS XP扫雷 程序 课程设计目的与要求: 本课程设计是计算机科学与技术专业重要的实践性环节之一,是对本程学习后进行的一次全面而综合的练习。本次课程设计的目的与任务主要有: 1.巩固和加深学生对C和C++语言的基本知识的理解与掌握。 2.掌握C和C++语言编程和调试的基本技能 3.运用C和C++语言对程序的简单设计 4.掌握程序设计说明文档的能力与技巧 5.提高与运用C和C++语言解决能实际问题的能力 一、题目描述: 自行分析Windows XP系统自带扫雷游戏,查找规则并对主要功能进行模仿程序实现,对于实现过程中出现的bug进 行调试解决。 二、使用语言: C和C++ 语言 选用C++语言的原因,简而言之主要是因为C++的设计目标,就是要让C++既具有适合于系统程序设计的C语言所具 有的可适应性和高效性,又能在其程序组织结构方面具有像其 他的语言所支持的程序优势。这即是说,C++所提供的抽象机 制能够被应用于那些对效率和可适应性具有极高要求的程序设 计任务之中。

三、编译以及运行环境: 编译环境:Microsoft Visual C++ 6.0 运行环境:Windows XP或其他兼容兼容系统 四、题目分析: 经过对游戏的初步分析,扫雷游戏含有如下规则: 根据输入的信息,执行相应的挖雷,插旗,疑问标记,自动蔓延开挖等。挖雷过程由计时器计时,由一个计数器统计插旗后雷的剩余个数。如果选择了标记功能,那么单机右键会依次对未知点进行插旗,标记,取消插旗与标记。如果点滴到插旗的如果点击到了未插旗子的雷区,如果是雷,则判定游戏失败,之后对雷区的点击进行屏蔽,不予响应。如果是疑问标记则像正常区域对待。如何判断胜利,如果所有的雷都被插旗或者点击后剩余的雷区, 五、程序运行流程简介以及流程图: 点击程序按默认参数进行初始化,输入,表情对鼠标左右键点击进行变化响应,对于雷区内点击进行规律响应,对雷区点击后果进行统计,判断失败与成功,失败或者成功之后,对于雷区内的输入也就是点击进行屏蔽,对菜单游戏级别、重新开始游戏按钮响应。级别选择,重新游戏时时间归零、雷数显示刷新。如此重复规则,直到点击退出。 程序简要流程图:

Windows程序设计题(含简答题答案)

《Windows程序设计》模拟题 一.单项选择题 1、在VC++中,项目文件得扩展名就是(B)。 A)exe????B)dsp C)dsw???D)cpp 2、在MFC中,利用ClassWizard不能(D)。 A)建立新类??B)进行消息映射 C)增加类得成员变量?D)插入资源 3、当滑块滑动时,滑块条控件将发送滚动消息来通知父窗口,垂直滑动条发送(C)消息。 A)WM_CHAR??B)WM_HSCROLL C)W M_VSCROLL???D)WM_CHANGE 4、更新菜单状态得消息就是(C )。 A)WM_MANDB)UPDATE C)UPDATE_MAND_UI D)INVALIDATE 5、对于消息队列描述正确得就是(D) A)在Windows中只有一个消息系统,即系统消息队列。消息队列就是一个系统定义得 数据结构,用于临时存储消息。 B)系统可从消息队列将信息直接发给窗口。另外,每个正在Windows下运行得应用程序都有自己得消息队列。 C)系统消息队列中得每个消息最终都要被USER模块传送到应用程序得消息队列中去。 应用程序得消息对列中存储了程序得所有窗口得全部消息. D)以上都正确 6、在MFC中,所有得控件都就是(B)类得派生类,都可以作为一个特殊得窗口来处理。 A)CView??B)CWnd C)C Window???D)CDialog 7、使用GetDC()获取得设备上下文在退出时,必须调用(A)释放设备上下文. A)ReleaseDC()???B)delete() C)D eleteDC()???D)Detach() 8、希望菜单无效,应该用CCmdUI类得(A )成员函数。 ???B)SetRadio A)Enable?? ? C)SetCheck???D)SetText 9、希望菜单前出现一个“√",应该用CCmdUI类得(C)成员函数. A)Enable ???B)SetRadio C)SetCheck??D)SetText 10、下面(A)不就是MFC设备环境类CDC类得派生类. A)GDI ????B)CPaintDC C)CClientDC ??D)CWindowDC 11、在MFC中,所有得文档类都派生于(C),所有得视图类都派生于(A )。 A)CView B)CWindowC)CDocumentD)CFormView 12、采用C++进行绘图时,(B)用于指定图形得填充样式,(A)用于指定图形得边框样式.

windows程序设计学习笔记(一)

Windows程序设计学习笔记 2015年10月4日 一、宽字符wide-character 1、wchar_t: char的双字节(Unicode) 定义:typedef unsigned short wchar_t 示例:wchar_t c=’A’; wchar_t *pw=L”hello!”; //L(代表long)告诉编译器按宽字符保存,即每个字符占两个字节 wchar_t a[]=L”hello!”; 2、宽字符库函数 wcslen( ):计算宽字串符的长度 如:wchar_t *pw=L”hello!”; iLength=wcslen(pw); //字符串长度是6 二、windows头文件类型 1、CHAR和WCHAR typedef char CHAR; //8位 typedef wchar_t WCHAR; //16位变量前面可加wc以说明是一个宽字符 2、字符串指针 (1)8位字符串指针 tpyedef CHAR *PCHAR, *LPCH, *PCH, *NPSTR, *LPSTR, *PSTR; tpyedef CONST CHAR *LPCCH, *PCCH, *LPCSTR, *PCSTR; 前缀N和L表示“near”和“long”,指的是16位windows中两种大小不同的指针,在Win32中near和long指针没有区别 (2)16位字符串指针 tpyedef WCHAR *PWCHAR, *LPWCH, *PWCH, *NWPSTR, *LPWSTR, *PWSTR; tpyedef CONST WCHAR *LPCWCH, *PCWCH, *LPCWSTR, *PCWSTR; 3、WINAPI 定义:#define WINPAI _stdcall 该语句指定了一个调用约定,包括如何生成机器代码以在堆栈中放置函数调用的参数三、Hello程序 /*------------------------------------- HELLO.C--windows下显示Hello,world! 作者:lw 时间:2015年国庆 -------------------------------------*/ #include LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM); int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow) { static TCHAR szAppName[] = TEXT("HelloWin"); HWND hwnd; MSG msg; WNDCLASS wndclass; wndclass.style = CS_HREDRAW | CS_VREDRAW; wndclass.lpfnWndProc = WndProc;

Windows程序设计题(含简答题标准答案)

《Windows程序设计》模拟题 一.单项选择题 1. 在VC++中,项目文件的扩展名是(B)。 A)exe ????B)dsp C)d sw?????D)cpp 2.在MFC中,利用ClassWizard不能(D )。 A)建立新类?????B)进行消息映射 C)增加类的成员变量?D)插入资源 3. 当滑块滑动时,滑块条控件将发送滚动消息来通知父窗口,垂直滑动条发送(C)消息。 A)WM_CHAR ?B)WM_HSCROLL C)WM_VSCROLL???D)WM_CHANGE 4. 更新菜单状态的消息是(C)。 A)WM_COMMANDB)UPDATE C)UPDATE_COMMAND_UI D)INVALIDATE 5.对于消息队列描述正确的是( D ) A)在Windows中只有一个消息系统,即系统消息队列。消息队列是一个系统定义的数据结构,用于临时存储消息。 B)系统可从消息队列将信息直接发给窗口。另外,每个正在Windows下运行的应用程 序都有自己的消息队列。 C)系统消息队列中的每个消息最终都要被USER模块传送到应用程序的消息队列中去。应用程序的消息对列中存储了程序的所有窗口的全部消息。 D)以上都正确 6. 在MFC中,所有的控件都是(B )类的派生类,都可以作为一个特殊的窗口来处理。 ?B)CWnd A)CView ??? C)C Window ???D)CDialog 7.使用GetDC()获取的设备上下文在退出时,必须调用(A)释放设备上下文。 A)ReleaseDC()???B)delete() C)D eleteDC() ?D)Detach() 8. 希望菜单无效,应该用CCmdUI类的(A )成员函数。 A)Enable ???B)SetRadio C)S etCheck ??D)SetText 9. 希望菜单前出现一个“√”,应该用CCmdUI类的(C)成员函数。 A)Enable??B)SetRadio C)SetCheck????D)SetText 10. 下面(A)不是MFC设备环境类CDC类的派生类。 A)GDI??????B)CPaintDC C)C ClientDC ???D)CWindowDC 11. 在MFC中,所有的文档类都派生于(C),所有的视图类都派生于(A )。 A)CViewB)CWindowC)CDocument D)CFormView 12. 采用C++进行绘图时,(B )用于指定图形的填充样式,(A)用于指定图形的边框样式。 A)画笔B)画刷C)区域D)位图

windows程序设计

消息驱动运行中发生的各种事件(鼠标键盘输入,各种状态的改变等),以消息的形式通知Windows系统Windows系统接收消息,提交给发生事件的应用程序应用程序的窗口处理函数负责处理响应收到的消息处理完成后继续等待下一个消息API application programming Interface SDK software Development kit 事件是用户对计算机操作的动作或程序中某个对象的状态发生的变化,每个事件对应一个消息,即每个事件发生的效果是产生消息消息是描述事件发生的信息事件驱动程序执行的顺序不是事先规定的,而是由事件的发生来控制在程序执行过程中,当某个对象的状态发生变化,或有外部输入等情况发生,则产生相应的事件当事件产生时,系统会发出特定的消息编写程序时可以对这些消息做出反应,也可以不做出;若要做出反应(即响应消息),则把响应此消息的程序写在与此消息相关联的函数中在程序执行时,一旦产生了一个消息,会调用与此消息相关联的函数窗口是Windows应用程序基本的操作单位,是应用程序与用户之间交互的接口,也是系统管理应用程序的基本单位消息传输事件发生,产生消息消息保存到消息队列分配给应用程序消息队列消息循环提取消息窗口函数响应消息MFC Microsoft foundation class MFC应用程序框架提供了一般应用程序需要的全部面向对象软件组件的集成集合MFC程序结构基于框架窗口的应用程序(早期的MFC)程序运行管理、窗口及数据管理分开两部分,与SDK程序类似基于文档/视图的应用程序单文档应用程序(重点)程序运行管理、窗口管理、交互管理、数据管理分开基于对话框的应用程序程序运行管理、对话框管理分开目前的MFC应用程序都采用文档/视图结构,把原来窗口框架类的工作分开窗口框架类管理窗框视图类(即视窗类)管理数据显示、接收用户输入文档类负责数据管理文档视图架构的思想数据嵌入文档中,利用文档的架构管理文档与视图通信,使数据在视图中显示视图显示数据,并与用户交互视图放入窗口中文档模板类对象管理上述对象协调工作CDocument是负责管理数据的类应用程序中的文档类是这个类的派生类作用数据管理程序员应将用户的实际数据对象内嵌在自己的文档类中需要与自己的视图类通信在程序中实现CDocument的派生类,以便嵌入数据对象,并改写成员函数实现对数据的处理用于派生应用程序的视图类CView 作用处理与用户的交互显示文档类中的数据接收用户输入(例如鼠标操作)通常要改写视图类的成员函数OnDraw或OnPrint,实现数据显示框架自动调用OnDraw函数WM_PAINT消息OnPaint()OnDraw() 菜单及响应利用菜单编辑器修改IDR_MAINFRAME 菜单资源在相应的类中为新菜单项映射消息COMMAND单击或用快捷键选中时生产UPDATE_COMMAND_UI上一级菜单显示前生产用于控制菜单状态编写新菜单项的消息处理函数快捷键在菜单项标题后面加“(&字母)”菜单动态为要添加的菜单项定义一个宏(例如ID_MENU1)用CWnd::GetMenu( )获得指向菜单条的指针(如果在子菜单上添加,应用CMenu::GetSubMenu()获得该菜单的指针)为菜单项手工映射消息处理函数在适当的地方调用InsertMenu或AppendMenu添加菜单项调用CWnd::DrawMenuBar()函数重画菜单动态删除菜单项与上面类似(使用DeleteMenu函数)动态创建菜单项用函数BOOL CreateMenu( );获得新菜单句柄,再用此句柄当作AppendMenu函数的第2个参数(需进行(UTIN)强制类型转换)通常用于创建弹出式菜单的顶级(不需映射消息)快捷菜单建立菜单如果菜单已经存在,且功能齐全,只需确定弹出方式即可也可以另加一个菜单资源,此法可使菜单条中不显示快捷菜单关联类(对于新加菜单)把此菜单资源关联到视图类上选中此菜单资源的情况下打开类向导,选视图类影射消息并编写消息处理函数选择弹出方式可在视图类的WM_CONTEXTMENU消息(鼠标右键单击客户区时产生)处理函数中弹出Windows系统有一个存放消息的队列每个应用程序也有一个消息队列Windows系统先将收到的消息存放在系统队列中,然后再分发到相应的应用程序队列中应用程序则从自身的队列中获取消息并进行处理类的消息响应一个类要响应多种消息对于每一种消息最重要的是知道是哪个消息:消息的标识(ID 身份证)这个消息对应的响应函数是什么(函数的起始地址)解决的办法建立一个结构体数组(消息映射表)一行(一个数组元素)是一个消息的信息每行至少包含消息的标识(ID)指向响应函数的指针消息的响应当收到消息后,根据消息ID在表中查找,找到后调用对应的消息处理函数消息路由当一个类收到消息后,先在自己的消息映射表中搜索,搜索到就执行相应的消息处理函数,然后结束消息处理过程未搜到,则到上一层基类中搜索,依此类推如果都未搜到,则交给系统默认的窗口处理函数去处理消息种类窗口消息命令消息控件通知消息实现消息映射消息映射的要点为每个要响应的消息建立一个处理函数为每个能够响应消息的类建立一个结构类型的数组(消息映射表)并填写这个数组编写每个消息处

windows系统权限管理分析

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

Windows程序设计复习资料(完整答案)

一、单项选择题: 1.WinMain()函数的工作。 WinMain()函数是Windows程序的入口点 在WinMain中进行:注册窗体类、建立窗体、显示窗体、更新窗体、建立消息循环2.非MFC的Windows程序中,不是处理WM_PAINT消息的时候怎样获得客户区的设备环境句柄。 BeginPaint ----------EndPaint GetDC---------------ReleaseDC(成对出现) 利用GetDC()函数获取设备环境句柄 3.句柄的含义。 句柄是一个(通常为32位的)无符号整数(unsigned int),它代表一个内核对象内核对象在应用层的表示 4.在MM_TEXT映射模式下,什么情况下客户坐标和逻辑坐标可能不同。 当窗口客户区有滚动条时客户坐标和逻辑坐标可能不同 5.Windows程序的控制流程。 Windows程序没有固定的控制流程,事件驱动程序控制流程 6.事件驱动、消息驱动的概念。 事件驱动程序设计是一种全新的程序设计方法,它不是由事件的顺序来控制,而是由事件的发生来控制,而这种事件的发生是随机的、不确定的,并没有预定的顺序,这样就允许程序的的用户用各种合理的顺序来安排程序的流程。 消息是事件到达Windows内部后的称呼 7.对话框、控件的作用。 对话框是程序与用户之间进行交互,接收用户输入、并把数据显示出来的一个窗口; 控件是用户可与之交互以输入或操作数据的对象。控件通常出现在对话框中或工具栏上。 8.MFC中怎样处理WM_PAINT消息。 在OnDraw()函数中处理该消息 9.GetMessage()函数在什么情况下返回0,从而导致消息循环终止,程序结束。 在接收到WM_QUIT消息时返回0 10.Windows中,应用程序的输出是怎样进行的。 通过设备描述表DC(Device Context)来进行应用程序与物理设备之间的交互11.MFC中,大多数类的基类都是什么。 CObject类 12.一个MFC应用程序必须有且只能有一个从哪个类派生的全局应用程序对象,此对象在运行时刻控制应用程序中所有其他对象的活动。 CWinApp类 13.每次当窗口客户区需要重新绘制时,应用程序框架怎么处理。 发送WM_PAINT消息,调用OnDraw()函数进行重绘 14.CDC类的作用。 CDC是设备描述表类的基类,除了一般的窗口显示外,还用于基于桌面的全屏幕绘制和非屏幕显示的打印机输出。 15.当程序中某个函数改变了数据而需要重新绘制客户区时,OnDraw()函数不会被自动调

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盘

Windows程序设计题

《Windows程序设计》模拟题 一.单项选择题 1. 在VC++中,项目文件的扩展名是(B)。 A)exe B)dsp C)dsw D)cpp 2. 在MFC中,利用ClassWizard不能(D)。 A)建立新类B)进行消息映射 C)增加类的成员变量D)插入资源 3. 当滑块滑动时,滑块条控件将发送滚动消息来通知父窗口,垂直滑动条发送(C)消息。 A)WM_CHAR B)WM_HSCROLL C)WM_VSCROLL D)WM_CHANGE 4. 更新菜单状态的消息是( C )。 A)WM_COMMAND B)UPDATE C)UPDATE_COMMAND_UI D)INVALIDATE 5. 对于消息队列描述正确的是( D ) A)在Windows中只有一个消息系统,即系统消息队列。消息队列是一个系统定义的数据结构,用于临时存储消息。 B)系统可从消息队列将信息直接发给窗口。另外,每个正在Windows下运行的应用程序都有自己的消息队列。 C)系统消息队列中的每个消息最终都要被USER模块传送到应用程序的消息队列中去。 应用程序的消息对列中存储了程序的所有窗口的全部消息。 D)以上都正确 6. 在MFC中,所有的控件都是(B)类的派生类,都可以作为一个特殊的窗口来处理。 A)CView B)CWnd C)CWindow D)CDialog 7. 使用GetDC()获取的设备上下文在退出时,必须调用(A)释放设备上下文。 A)ReleaseDC() B)delete() C)DeleteDC() D)Detach() 8. 希望菜单无效,应该用CCmdUI类的(A)成员函数。 A)Enable B)SetRadio C)SetCheck D)SetText 9. 希望菜单前出现一个“√”,应该用CCmdUI类的(C)成员函数。 A)Enable B)SetRadio C)SetCheck D)SetText 10. 下面(A)不是MFC设备环境类CDC类的派生类。 A)GDI B)CPaintDC C)CClientDC D)CWindowDC 11. 在MFC中,所有的文档类都派生于(C),所有的视图类都派生于(A)。 A)CView B)CWindow C)CDocument D)CFormView 12. 采用C++进行绘图时,(B)用于指定图形的填充样式,(A)用于指定图形的边框样式。

《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源码分析(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;//版本号

windows 7系统文件夹管理员权限的获取方法

windows 7系统文件夹管理员权限的获取方法 windows 7系统不仅在界面上下了很多功夫,而且在安全方面也做了很多工作。但是这也给很多win7系统用户带来了麻烦----在win7下替换、修改或删除系统中某个文件夹往往都需要取得管理员权限,特别是系统盘(C盘)下的文件夹。这里教大家如何获得win7文件夹权限,并给大家提供一个修改win7注册表的reg,运行之后右键选择"获得权限"即可获得win7下整个文件夹的管理权限。 Win 7下管理员权限修改方法原理 我们以系统盘下的zh-CN文件夹为例 1、在zh-CN文件夹图标上面点击鼠标右键,再点击属性,如图1: 2、打开文件夹属性选项卡,按顺序单击:安全》高级》所有者》编辑,选中Administrators用户组(或者你的用户所在的组),同时勾选下面的"替换子容器及对象的所有者"。确定并关闭属性对话框即获取该文件的所有权。如图2:

3、再次单击鼠标右键打开属性对话框,依次单击:安全》高级,选中下面的两个勾,然后点击编辑,选中并双击Administrators(或者你的用户所在的组>; 单击"完全控制",按确定依次退出即可,如图3:

4、OK,至此你已经拥有这个文件夹的管理权限,可以进行下一步的修改和替换了。 Win 7下管理员权限获得注册表reg修改方法 以下为引用的内容: Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT*shellrunas] @="管理员取得所有权" "NoWorkingDirectory"="" [HKEY_CLASSES_ROOT*shellrunascommand] @="cmd.exe /c takeown /f "%1" & icacls "%1" /grant administrators:F" "IsolatedCommand"="cmd.exe /c takeown /f "%1" & icacls "%1" /grant administrators:F" [HKEY_CLASSES_ROOTexefileshellrunas2] @="管理员取得所有权" "NoWorkingDirectory"="" [HKEY_CLASSES_ROOTexefileshellrunas2command] @="cmd.exe /c takeown /f "%1" & icacls "%1" /grant administrators:F" "IsolatedCommand"="cmd.exe /c takeown /f "%1" & icacls "%1" /grant administrators:F" [HKEY_CLASSES_ROOTDirectoryshellrunas] @="管理员取得所有权" "NoWorkingDirectory"="" [HKEY_CLASSES_ROOTDirectoryshellrunascommand] @="cmd.exe /c takeown /f "%1" /r /d y & icacls "%1" /grant administrators:F /t"

Windows编程基础-期末考试试卷头期末-A卷答案

北华航天工业学院2013—2014学年第二学期 Windows编程基础课程考试卷(A、B) 考核形式:开卷闭卷班级:姓名:学号: 一、填空题(每空1分,共10分) 1. 用户可以通过项目工作区窗口的ResourceView 视图来查看资源。 2. 一个单文档的MFC 应用程序框架一般包括5个类:应用程序类、框架窗口类、 视图类、文档类和文档模板类。 3. 改变菜单项文本是使用CCmdUI 类的SetText 成员函数。 4. 滚动条类CScrollBar的成员函数规定了滚动条的操作。设置滚动条的范围使用SetRange 函数,设置滚动块的位置使用SetScrollPos 函数,获取滚动块的当前位置使用GetScrollPos 函数。 5. 对话框默认标识符前缀是IDD 。 二、选择题(每空2分,共40分) 1.MFC类库中的类按层次关系可知,CStatic的直接父类为(B )。 A、CObject B、CWnd C、CCmdTarget D、CFrameWnd 2. 以下控件中,( C )没有Caption属性。 A、按钮 B、群组框 C、编辑控件 D、静态控件 3. 列表框ClistBox类的成员函数( A )用来向列表框增加列表项,成员函数( C )用来清除列表项所有项目,成员函数( F )用来返回列表框的列表项的总数。 A、AddString B、DeleteString C、ResetContent D、FindString E、GetCurSel F、GetCount 4. 假定AB为一个类,则执行“”AB a(4),b(3),*p[2];”语句时,自动调用该类构造函数的次数为( A )。 A、2 B、3 C、4 D、5 5.在类外定义类的成员函数时,应当使用( B )来标识该函数为特定类的成员。A、:B、::C、-> D、this

Windows程序设计(第五版)源代码A(chap08)

chap08-Beeper1 /*----------------------------------------- BEEPER1.C -- Timer Demo Program No. 1 (c) Charles Petzold, 1998 -----------------------------------------*/ #include #define ID_TIMER 1 LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ; int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow) { static TCHAR szAppName[] = TEXT ("Beeper1") ; HWND hwnd ; MSG msg ; WNDCLASS wndclass ; wndclass.style = CS_HREDRAW | CS_VREDRAW ; wndclass.lpfnWndProc = WndProc ; wndclass.cbClsExtra = 0 ; wndclass.cbWndExtra = 0 ; wndclass.hInstance = hInstance ; wndclass.hIcon = LoadIcon (NULL, IDI_APPLICATION) ; wndclass.hCursor = LoadCursor (NULL, IDC_ARROW) ; wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH) ; wndclass.lpszMenuName = NULL ; wndclass.lpszClassName = szAppName ; if (!RegisterClass (&wndclass)) { MessageBox (NULL, TEXT ("Program requires Windows NT!"), szAppName, MB_ICONERROR) ; return 0 ; } hwnd = CreateWindow (szAppName, TEXT ("Beeper1 Timer Demo"), WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL) ;

windows权限设置

windows中,权限指的是不同账户对文件,文件夹,注册表等的访问能力在windows中,为不同的账户设置权限很重要,可以防止重要文件被其他人所修改,使系统崩溃 我们可以在控制面板中设置账户时设置权限 作为微软第一个稳定且安全的操作系统,Windows XP经过几年的磨合过渡期,终于以超过Windows系列操作系统50%的用户占有量成为目前用户使用最多的操作系统。在慢慢熟悉了Windows XP后,人们逐渐开始不满足基本的系统应用了,他们更加渴望学习一些较深入且实用的知识,以便能让系统充分发挥出Windows XP 的高级性能。 因此本文以Windows XP Professional版本为平台,引领大家感受一下Windo ws XP在"权限"方面的设计魅力! 一、什么是权限 Windows XP提供了非常细致的权限控制项,能够精确定制用户对资源的访问控制能力,大多数的权限从其名称上就可以基本了解其所能实现的内容。 " 权限"(Permission)是针对资源而言的。也就是说,设置权限只能是以资源为对象,即"设置某个文件夹有哪些用户可以拥有相应的权限",而不能是以用户为主,即"设置某个用户可以对哪些资源拥有权限"。这就意味着"权限"必须针对"资源"而言,脱离了资源去谈权限毫无意义──在提到权限的具体实施时,"某个资源"是必须存在的。 利用权限可以控制资源被访问的方式,如User组的成员对某个资源拥有"读取"操作权限、Administrators组成员拥有"读取+写入+删除"操作权限等。 值得一提的是,有一些Windows用户往往会将"权力"与"权限"两个非常相似的概念搞混淆,这里做一下简单解释:"权力"(Right)主要是针对用户而言的。"权力"通常包含"登录权力" (Logon Right)和"特权"(Privilege)两种。登录权力决定了用户如何登录到计算机,如是否采用本地交互式登录、是否为网络登录等。特权则是一系列权力的总称,这些权力主要用于帮助用户对系统进行管理,如是否允许用户安装或加载驱动程序等。显然,权力与权限有本质上的区别。 二、安全标识符、访问控制列表、安全主体 说到Windows XP的权限,就不能不说说"安全标识符"(Security Identifier, SI D)、"访问控制列表"(Access Control List,ACL)和安全主体(Security Principal)这三个与其息息相关的设计了。 1.安全标识符 安全标识符在Windows XP中,系统是通过SID对用户进行识别的,而不是很多用户认为的"用户名称"。SID可以应用于系统内的所有用户、组、服务或计算机,因为SID是一个具有惟一性、绝对不会重复产生的数值,所以,在删除了一个账户(如

Windows程序设计

一单项选择题 试题1 满分值:4.0分状态:已答 应用程序可以使用GDI创建3种类型的图形输出,不包括【】位图 矢量图形 光栅图形 文本 [我的答案] 光栅图形 试题2 满分值:4.0分状态:已答 关于工具栏、菜单和加速键的关系,正确的说法是【】 工具按钮与菜单必须一一对应 工具栏与加速键一一对应 工具按钮不必与菜单一一对应 菜单与加速键一一对应 [我的答案] 工具按钮不必与菜单一一对应 试题3 满分值:4.0分状态:已答 【】函数用于在指定位置输出字符串: Print TextOut Scanf

[我的答案] Print 试题4 满分值:4.0分状态:已答 下列【】不是MFC消息映射机制有关的宏: DECLARE_MESSAGE_MAP BEGIN_MESSAGE_MAP DECLARE_SERIAL END_MESSAGE_MAP [我的答案] DECLARE_SERIAL 试题5 满分值:4.0分状态:已答 在视图类中获得文档类对象指针用函数【】: GetDocument UpdateAllViews OnUpdate SetModifiedFlag [我的答案] GetDocument 试题6 满分值:4.0分状态:已答 能间接调用视图类的OnDraw函数的是【】OnTimer LButtonDown

Invalidate [我的答案] Invalidate 试题7 满分值:4.0分状态:已答实心画刷只需要定义【】 填充样式 填充颜色 填充模式 填充图案 [我的答案] 填充颜色 试题8 满分值:4.0分状态:已答【】设置进度条的当前位置SetRange SetStep SetPos StepIt [我的答案] SetPos 试题9 满分值:4.0分状态:已答常见的菜单类型不包括【】。 自动菜单

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