当前位置:文档之家› Windows系统编程 习题答案 作者 李晓黎 练习题参考答案

Windows系统编程 习题答案 作者 李晓黎 练习题参考答案

第1章操作系统概述一、选择题1.A 2.D二、填空题1.程序2.数据3.MS-DOS4.用户模式5.内核模式6.Win327.POSIX8.OS/29.执行体服务10.内核11.硬件抽象层三、简答题1.答:(1)对应用程序的用户群进行分析,有些行业的用户至今还在使用Windows 98系统。

如果要为他们开发应用程序,就要考虑使用Windows 98作为开发环境。

而如果应用程序的用户是普通的家庭用户,则要考虑使用Windows XP作为开发环境。

(2)在经典的C/S结构应用程序中,服务器程序通常运行在Windows Server操作系统上,而客户端程序通常运行在Windows XP、Windows 7等兼顾家用和商用的操作系统上。

(3)从Windows XP开始,所有现在版本Windows都基于Windows NT内核。

因此,Windows系列产品具有很好的向下兼容性。

也就是说在低版本Windows上开发的应用程序通常可以稳定的运行在高版本Windows,而反之则不一定。

因此应尽可能选择满足客户需求的低版本Windows作为卡发环境。

2.答:Windows操作系统的用户模式由系统支持进程、服务进程、应用程序、环境子系统和Ntdll.dll组成。

3.答:硬件抽象层是物理硬件与计算机之间一层,设计这一层的目的是隐藏硬件中的不同。

从而为操作系统内核提供一个一致的运行平台,这样Windows就可以在不同的母板上运行而不需要修改内核。

第2章使用Visual Studio 2008开发Visual C++应用程序一、选择题1.B 2.A 3.B 4.C二、填空题1.Debug2.Release3.CObjct4.CWinThread5.CDialog三、简答题1.答:断点是程序中的一行代码,程序在运行到断点时将中断,用户可以查看变量的值,单步调试程序,对程序的运行情况进行分析。

2.答:在MFC中,可以采用文档/视图结构将应用程序中数据的存储和显示分离开来。

“文档”可以看作是一个应用程序的数据元素的集合;“视图”是数据的用户界面,可以通过窗口显示,也可以通过打印机打印出来。

视图可以为用户提供与文档中数据进行交互的功能。

一般情况下,采用文档/视图结构的应用程序至少应由以下对象组成:●应用程序,是CWinApp的派生对象,它充当整个应用程序的容器。

●框架窗口,是CFrameWnd派生对象。

第3章MFC用户界面设计一、选择题1.C 2.A 3.B二、填空题1.CListBox2.InsertString3.CDialog::DoModal()4.CDialog5.GetDlgItem()6.CListBox7.图标视图(Icon)、8.小图标视图(Small Icon)9.列表视图(List)10.报表视图11.UPDA TE_COMMAND_UI三、操作题略第4章GDI编程一、选择题1. A 2.C 3.B 4.C 5.D6. A二、填空题1.WM_PAINT 2.COLORREF3.TextOut() 4.CFontDialog三、简答题1.答:GDI是位于应用程序与不同输出设备硬件之间的中间层,这种结构让程序员从直接处理不同硬件的工作中解放出来,把硬件间的差异交给了GDI处理,使Windows应用程序能够顺畅地在Windows支持的任何图形输出设备上运行。

设备环境(Device Context)是GDI内部维护的一些数据结构。

它与特定的输出设备相关联。

一个设备环境对应输出设备上的一块区域。

设备环境中包含一些图形属性,这些属性定义了GDI绘图函数的工作方式,例如输出文字或图形的前景和背景颜色、坐标等。

2.答:调用CreatePen()函数创建一个画笔对象。

然后使用CDC:: SelectObject()函数为设备环境选择画笔对象,就可以使用画笔对象绘图了。

第5章文件系统编程一、选择题1.C 2.B 3.D 4.A 5.B6.C二、填空题1.GetLogicalDriveStrings()2.GetDiskFreeSpaceEx()3.SHBrowseForFolder()4.CreateDirectory ()5.CFileDialog6.GetFileSize()三、简答题1.答在Visual C++中可以通过标准输入输出库、Windows API和MFC类文件编程。

标准输入输出库的可移植性较好,既可以在Windows下使用,也可以在Linux和Unix等操作系统下使用;而Windows API则只能在Windows平图台下使用;MFC类只能用于支持MFC的应用程序。

第6章Windows注册表编程一、选择题1.A 2.B 3.C 4.B二、填空题1.键2.值3.regedit.exe4.RegEnumKey()三、简答题1.答HKEY_LOCAL_MACHINE、HKEY_CURRENT_CONFIG、HKEY_CLASSES_ROOT、HKEY_USERS、HKEY_CURRENT_USER第7章进程编程一、选择题1.A 2.D 3.B二、填空题1.被创建(created)2.就绪(ready)3.运行(running)4.阻塞(blocked)5.挂起(suspend)6.终止(terminated)7.CreateProcess()8.EnumProcess()三、问答题1.答:进程是正在运行的程序的实例。

每个运行的V isual C++项目都对应一个进程,每个进程至少包含一个线程,它从main()函数开始执行,直到执行return语句返回,主线程结束,该进程也被从内存中卸载。

主线程在运行过程中还可以创建新的线程,实现多线程的功能。

计算机程序是由指令(代码)组成的,而进程则是这些指令的实际运行体。

如果多次运行一个程序,则该程序也能对应多个进程。

2.答:进程由如下几个部分组成。

●与程序相关联的可执行代码的映像;●内存空间(通常是虚拟内存中的一些区域),其中保存可执行代码、进程的特定数据、用于记录活动例程和其他事件的调用栈、用于保存实时产生的中间计算结果的堆(heap)。

●分配给进程的资源的操作系统描述符(比如文件句柄)以及其他数据资源。

●安全属性,比如进程的所有者和权限。

●处理器的状态,比如寄存器的个内容、物理内存地址等。

操作系统在叫做进程控制块(Process control block,PCB)的数据结构中保存活动进程的上述信息。

3.答:互斥体(mutex)是保证一个资源被互斥访问的机制。

所谓互斥访问即指同一时间只能有一个线程(进程)访问资源。

在进程通讯中通常使用互斥体防止运行一个应用程序的多个实例。

调用CreateMutex()函数可以创建或打开一个互斥体对象。

四、练习题略第8章多线程编程一、选择题1.A 2.D二、填空题1.CONTEXT 2.CreateThread()3.WaitForMultipleObjects() 4.CRITICAL_SECTION5.未受信(nonsignaled)6.受信(signaled)三、简答题1.答:线程是操作系统可以调度的最小执行单位,通常是将程序拆分成2个或多个并发运行的任务。

一个线程就是一段顺序程序。

但是线程不能独立运行,只能在程序中运行。

不同的操作系统实现进程和线程的方法也不同,但大多数是在进程中包含线程,Windows就是这样。

一个进程中可以存在多个线程,并且可以共享进程的资源(比如内存)。

而不同的进程之间则是不能共享资源的。

2.答:线程与进程的对比如下:●进程通常可用独立运行,而线程则是进程的子集,只能在进程运行的基础上运行。

●进程拥有独立的私有内存空间,一个进程不能访问其他进程的内存空间;而一个进程中的线程则可以共享内存空间。

●进程之间只能通过系统提供的进程间通信的机制进行通信;而现场间的通信则简单得多。

●一个进程中的线程之间切换上下文比不同进程之间切换上下文要高效得多。

第9章Windows服务编程一、选择题1.B 2.D 3.B 4.B二、填空题1.Services.msc 2.CreateService()3.StartService() 4.A TL三、简答题1.答服务控制器(Service Control Manager ,SCM)是Windows NT家族操作系统中的一个系统进程,它可以启动、停止Windows服务,并与Windows服务交流。

服务控制器对应的可执行文件是%SystemRoot%\services.exe,它以Windows控制台程序的形式运行。

在系统启动时,由Wininit进程加载。

SCM的主函数是SvcCtrlMain(),它将加载被配置为自动启动的服务列表。

第11章动态链接库编程一、选择题1.A 2.A二、填空题1.DllMain()2.LoadLibrary()3.GetProcAddress()三、简答题1.答:导入库的扩展名是*.lib,它与DLL文件同时生成,它们的名字相同,只有扩展名不同。

导入库中包含一个导入地址表(IA T,import address table)。

DLL中的每个函数都在导入地址表有一个记录。

如果在项目中引用了DLL文件,则在生成和链接可执行文件时,链接到动态链接库通常被处理为链接到导入库。

这样,可执行文件就可以通过导入库中的导入地址表知道如何调用DLL中的函数。

导入库就像一本书的目录和索引,而DLL则是书的正文。

在生成可执行文件时,可执行文件中已经包含了导入库中的导入地址表。

在运行时,还必须找到DLL文件。

可执行文件会根据导入地址表在DLL文件中调用函数。

第11章Windows钩子编程一、选择题1.A 2.B二、填空题1.WH_KEYBOARD2.SetWindowsHookEx3.UnhookWindowsHookEx()三、简答题1.答:钩子是Windows中可以拦截事件的一种机制。

可以指定一个函数作为特定类型的被拦截事件的钩子过程。

钩子过程可以对拦截的每个事件进行处理。

2.答:nCode,是钩子过程用于决定采取什么动作的钩子编码,它取决于钩子的类型。

不同类型的钩子都有相对应的一组钩子编码。

第12章WMI编程一、选择题1.A 2.A二、填空题1.root\cimv22.系统类3.核心与公共基类4.Microsoft扩展类5.TotalPhysicalMemory6.核心7.公共8.扩展9.wbemtest.exe三、简答题1.答:使用WMI技术的方式通常包括以下3种:●通过WMIC命令行工具对系统进行查询和管理。

●编写WMI脚本实现自动任务管理。

●通过C++程序接口、.NET类等方法编写应用程序获取和管理Windows操作系统中的对象信息。

相关主题