超过460,000+ 应用技术资源下载
rar

WINDOWS核心编程 (pdf下载)

  • 1星
  • 日期: 2013-09-22
  • 大小: 25.74MB
  • 所需积分:1分
  • 下载次数:2
  • favicon收藏
  • rep举报
  • 分享
  • free评论
标签: WINDOWS核心编程下载

WINDOWS核心编程:本书是讲解Windows 操作系统内部机制的专著,作者从基本概念入手,全面系统地介绍了Windows的各种基本构件,如进程、线程、DLL和内存管理等,并列举了大量应用程序,精辟地分析了构件的使用方法,为掌握Windows 编程技巧提供了一条有效的捷径。对于不同水平的Windows 编程人员来说,本书都具有极好的参考价值。目      录译者序前言第一部分   程序员必读第1章   对程序错误的处理 11.1   定义自己的错误代码 41.2   ErrorShow示例应用程序 5第2章   Unicode 112.1   字符集 112.1.1   单字节与双字节字符集 112.1.2   Unicode:宽字节字符集 122.2   为什么使用Unicode 132.3   Windows 2000与Unicode 132.4   Windows 98与Unicode 132.5   Windows CE与Unicode 142.6   需要注意的问题 142.7   对COM的简单说明 142.8   如何编写Unicode源代码 152.8.1   C运行期库对Unicode的支持 152.8.2   Windows定义的Unicode数据类型 172.8.3   Windows中的Unicode函数和ANSI           函数 172.8.4   Windows字符串函数 192.9   成为符合ANSI和Unicode的应用程序 192.9.1   Windows字符串函数 192.9.2   资源 222.9.3   确定文本是ANSI文本还是Unicode          文本 222.9.4   在Unicode与ANSI之间转换字符串 23第3章   内核对象 273.1   什么是内核对象 273.1.1   内核对象的使用计数 273.1.2   安全性 283.2   进程的内核对象句柄表 303.2.1   创建内核对象 303.2.2   关闭内核对象 323.3   跨越进程边界共享内核对象 323.3.1   对象句柄的继承性 323.3.2   改变句柄的标志 353.3.3   命名对象 363.3.4   终端服务器的名字空间 393.3.5   复制对象句柄 39第二部分   编程的具体方法第4章   进程 454.1   编写第一个Windows应用程序 464.1.1   进程的实例句柄 494.1.2   进程的前一个实例句柄 504.1.3   进程的命令行 504.1.4   进程的环境变量 514.1.5   进程的亲缘性 544.1.6   进程的错误模式 544.1.7   进程的当前驱动器和目录 544.1.8   进程的当前目录 554.1.9   系统版本 564.2   CreateProcess函数 584.2.1   pszApplicationName和           pszCommandLine 594.2.2   psa Process、psa Thread和           binherit Handles 604.2.3   fdwCreate 624.2.4   pvEnvironment 644.2.5   pszCurDir 644.2.6   psiStartInfo 644.2.7   ppiProcInfo 674.3   终止进程的运行 694.3.1   主线程的进入点函数返回 694.3.2   ExitProcess函数 694.3.3   TerminateProcess函数 704.3.4   进程终止运行时出现的情况 714.4   子进程 724.5   枚举系统中运行的进程  73第5章   作业 915.1   对作业进程的限制 935.2   将进程放入作业 995.3   终止作业中所有进程的运行 995.4   查询作业统计信息 1005.5   作业通知信息 1035.6   JobLab示例应用程序 104第6章   线程的基础知识 1216.1   何时创建线程 1216.2   何时不能创建线程 1226.3   编写第一个线程函数 1236.4   CreateThread函数 1246.4.1   psa 1246.4.2   cbStack 1246.4.3   pfnStartAddr和pvParam 1256.4.4   fdwCreate 1266.4.5   pdwThreadID 1266.5   终止线程的运行 1276.5.1   线程函数返回 1276.5.2   ExitThread函数 1276.5.3    TerminateThread函数 1276.5.4    在进程终止运行时撤消线程 1286.5.5   线程终止运行时发生的操作 1286.6   线程的一些性质 1296.7   C/C++运行期库的考虑 1316.7.1   Oops—错误地调用了Create Thread 1386.7.2   不应该调用的C/C++运行期库函数 1386.8   对自己的ID概念应该有所了解 139第7章   线程的调度、优先级和亲缘性 1427.1   暂停和恢复线程的运行 1437.2   暂停和恢复进程的运行 1447.3   睡眠方式 1457.4   转换到另一个线程 1457.5   线程的运行时间 1467.6   运用环境结构 1487.7   线程的优先级 1527.8   对优先级的抽象说明 1537.9   程序的优先级 1567.9.1   动态提高线程的优先级等级 1587.9.2   为前台进程调整调度程序 1597.9.3   Scheduling Lab示例应用程序 1607.10   亲缘性 167第8章   用户方式中线程的同步 1728.1   原子访问:互锁的函数家族 1728.2   高速缓存行 1778.3   高级线程同步 1788.4   关键代码段 1808.4.1   关键代码段准确的描述 1828.4.2   关键代码段与循环锁 1858.4.3   关键代码段与错误处理 1858.4.4   非常有用的提示和技巧 186第9章   线程与内核对象的同步 1909.1   等待函数 1919.2   成功等待的副作用 1949.3   事件内核对象 1959.4   等待定时器内核对象 2049.4.1   让等待定时器给APC项排队 2079.4.2   定时器的松散特性 2099.5   信标内核对象 2109.6   互斥对象内核对象 2119.6.1   释放问题 2139.6.2   互斥对象与关键代码段的比较 2149.6.3   Queue示例应用程序 2149.7   线程同步对象速查表 2239.8   其他的线程同步函数 2249.8.1   异步设备I/O 2249.8.2   WaitForInputIdle 2249.8.3   MsgWaitForMultipleObjects (Ex) 2259.8.4   WaitForDebugEvent 2259.8.5   SingleObjectAndWait 226第10章   线程同步工具包 22810.1   实现关键代码段:Optex 22810.2   创建线程安全的数据类型和反信标 23910.3   单个写入程序/多个阅读程序的保护 25110.4   实现一个WaitForMultipleExpressions       函数 259第11章   线程池的使用 27411.1   方案1:异步调用函数 27511.2   方案2:按规定的时间间隔调用函数 27711.3   方案3:当单个内核对象变为已通知状态           时调用函数 28311.4   方案4:当异步I/O请求完成运行时调用          函数 285第12章   纤程 28712.1   纤程的操作 28712.2   Counter示例应用程序 289第三部分   内 存 管 理第13章   Windows的内存结构 29913.1   进程的虚拟地址空间 29913.2   虚拟地址空间如何分区 30013.2.1   NuLL 指针分配的分区—适用于             Windows 2000和Windows 98 30013.2.2   MS-DOS/16位Windows 应用程序兼容             分区—仅适用于Windows 98 30113.2.3   用户方式分区—适用于Windows 2000             和Windows 98 30113.2.4   64 KB禁止进入的分区—仅适用             于Windows 2000 30213.2.5   共享的MMF分区—仅适用于             Windows 98 30313.2.6   内核方式分区—适用于Windows              2000和Windows 98 30313.3   地址空间中的区域 30313.4    提交地址空间区域中的物理存储器 30413.5   物理存储器与页文件 30413.6   保护属性 30713.6.1   Copy-On-Write 访问 30813.6.2   特殊的访问保护属性的标志 30913.7   综合使用所有的元素 30913.7.1   区域的内部情况 31213.7.2   与Windows 98地址空间的差别 31513.8   数据对齐的重要性 319第14章   虚拟内存 32314.1   系统信息 32314.2   虚拟内存的状态 33014.3   确定地址空间的状态 33614.3.1   VMQuery函数 33714.3.2   虚拟内存表示例应用程序 343第15章   在应用程序中使用虚拟内存 35415.1   在地址空间中保留一个区域 35415.2   在保留区域中的提交存储器 35515.3   同时进行区域的保留和内存的提交 35615.4   何时提交物理存储器 35715.5   回收虚拟内存和释放地址空间区域 35815.5.1   何时回收物理存储器 35915.5.2   虚拟内存分配的示例应用程序 36015.6   改变保护属性 36815.7   清除物理存储器的内容 36915.8      地址窗口扩展—适用于             Windows 2000 372第16章   线程的堆栈 38516.1   Windows 98下的线程堆栈 38716.2   C/C++运行期库的堆栈检查函数 38916.3   Summation示例应用程序 390第17章   内存映射文件 39717.1   内存映射的可执行文件和DLL           文件 39717.1.1   可执行文件或DLL的多个实例             不能共享静态数据 39817.1.2   在可执行文件或DLL的多个实             例之间共享静态数据 40017.1.3   AppInst示例应用程序 40417.2   内存映射数据文件 40917.2.1   方法 1:一个文件,一个缓存 40917.2.2   方法 2:两个文件,一个缓存 40917.2.3   方法 3:一个文件,两个缓存 41017.2.4   方法 4:一个文件,零缓存 41017.3   使用内存映射文件 41017.3.1   步骤 1:创建或打开文件内核             对象 41117.3.2   步骤 2:创建一个文件映射内核             对象 41217.3.3   步骤 3:将文件数据映射到进程               的地址空间 41417.3.4   步骤4:从进程的地址空间中撤消             文件数据的映像 41617.3.5   步骤 5和步骤 6:关闭文件映射对象             和文件对象 41717.3.6   文件倒序示例应用程序 41817.4   使用内存映射文件来处理大文件 42617.5   内存映射文件与数据视图的相关性 42717.6   设定内存映射文件的基地址 42817.7   实现内存映射文件的具体方法 42917.8   使用内存映射文件在进程之间共享       数据 43117.9   页文件支持的内存映射文件 43117.10   稀疏提交的内存映射文件 438第18章   堆栈 45118.1   进程的默认堆栈 45118.2   为什么要创建辅助堆栈 45218.2.1   保护组件 45218.2.2   更有效的内存管理 45318.2.3   进行本地访问 45318.2.4   减少线程同步的开销 45318.2.5   迅速释放堆栈 45318.3   如何创建辅助堆栈 45418.3.1   从堆栈中分配内存块 45518.3.2   改变内存块的大小 45618.3.3   了解内存块的大小 45618.3.4   释放内存块 45718.3.5   撤消堆栈 45718.3.6   用C++程序来使用堆栈 45718.4   其他堆栈函数 460第四部分   动态链接库第19章    DLL基础 46319.1   DLL与进程的地址空间 46419.2   DLL的总体运行情况 46519.3   创建DLL模块 46719.3.1   输出的真正含义是什么 46919.3.2   创建用于非Visual C++工具            的DLL 47119.4   创建可执行模块 47219.5   运行可执行模块 474第20章   DLL的高级操作技术 47720.1   DLL模块的显式加载和          符号链接 47720.1.1   显式加载DLL模块 47820.1.2   显式卸载DLL模块 47920.1.3   显式链接到一个输出符号 48020.2   DLL的进入点函数 48120.2.1   DLL_PROCESS_ATTACH通知 48220.2.2   DLL_PROCESS_DETACH通知 48320.2.3   DLL_THREAD_ATTACH通知 48520.2.4   DLL_THREAD_DETACH通知 48520.2.5   顺序调用DllMain 48620.2.6   DllMain与C/C++运行期库 48820.3   延迟加载DLL 48920.4   函数转发器 49920.5   已知的DLL 49920.6   DLL转移 50020.7   改变模块的位置 50120.8   绑定模块 506第21章   线程本地存储器 50921.1   动态TLS 50921.2   静态TLS 513第22章   插入DLL和挂接API 51522.1   插入DLL:一个例子 51522.2   使用注册表来插入DLL 51722.3   使用Windows挂钩来插入DLL 51822.4   使用远程线程来插入DLL 53122.4.1   Inject Library 示例应用程序 53422.4.2   Image Walk DLL 54122.5   使用特洛伊DLL来插入DLL 54422.6   将DLL作为调试程序来插入 54422.7   用Windows 98上的内存映射文件          插入代码 54422.8   用CreateProcess插入代码 54422.9   挂接API的一个示例 54522.9.1   通过改写代码来挂接API 54622.9.2   通过操作模块的输入节来挂接API 54622.9.3   LastMsgBoxInfo示例应用程序 549第五部分   结构化异常处理第23章   结束处理程序 56523.1   通过例子理解结束处理程序 56623.2   Funcenstein1 56623.3   Funcenstein2 56623.4   Funcenstein3 56823.5   Funcfurter1 56823.6   突击测验:FuncaDoodleDoo 56923.7   Funcenstein4 57023.8   Funcarama1 57123.9   Funcarama2 57223.10   Funcarama3 57223.11   Funcarama4:最终的边界 57323.12   关于finally块的说明 57423.13   Funcfurter2 57523.14   SEH结束处理示例程序 576第24章   异常处理程序和软件异常 57824.1   通过例子理解异常过滤器和异常处理       程序 57824.1.1   Funcmeister1 57824.1.2   Funcmeister2 57924.2   EXCEPTION_EXECUTE_HANDLER 58024.2.1   一些有用的例子 58124.2.2   全局展开 58324.2.3   暂停全局展开 58524.3   EXCEPTION_CONTINUE_          EXECUTION 58624.4   EXCEPTION_CONTINUE_          SEARCH 58824.5   Get Exception Code  58924.6   Get Exception Information 59224.7   软件异常 595第25章   未处理异常和C++异常 59825.1   即时调试 60025.2   关闭异常消息框 60125.2.1   强制进程终止运行 60125.2.2   包装一个线程函数 60125.2.3   包装所有的线程函数 60125.2.4   自动调用调试程序 60225.3  程序员自己调用UnhandledException       Filter 60225.4   UnhandledExceptionFilter函数的一些       细节 60325.5    异常与调试程序 60425.6   C++异常与结构性异常的对比 618第六部分   窗      口第26章   窗口消息 62326.1   线程的消息队列 62326.2   将消息发送到线程的消息队列中 62526.3    向窗口发送消息 62626.4    唤醒一个线程 63026.4.1   队列状态标志 63026.4.2   从线程的队列中提取消息的             算法 63126.4.3   利用内核对象或队列状态标             志唤醒线程 63426.5   通过消息发送数据 63626.6   Windows如何处理ANSI/Unicode       字符和字符串 642第27章   硬件输入模型和局部输入状态 64527.1   原始输入线程 64527.2   局部输入状态 64627.2.1   键盘输入与焦点 64727.2.2   鼠标光标管理 64927.3   将虚拟输入队列同局部输入状态挂接       在一起 65127.3.1   LISLab 示例程序 65227.3.2   LISWatch 示例程序 666第七部分   附      录附录A   建立环境 675附录B   消息分流器、子控件宏和API宏 686

更多简介内容

推荐帖子

基于PCI的嵌入式板卡能访问主机的Windows核心进程吗?
我现在在做一个项目,项目要求是通过一块安装在计算机主板上的嵌入式板卡,对计算机出现故障时能自动恢复系统。我的思路是:嵌入式板卡里运行Linux,写入一个Linux守护进程,该守护进程实现对计算机核心进程的监测如explorer.exe、svchost.exe、system.exe等,当这些进程消失时意味着系统出现故障,此时该守护进程转到执行一个shell或批处理程序进行系统镜像恢复。请问这么做的可
rado3090 嵌入式系统编程
关于Windows CE实用开发技术 电子档 下载问题
以前的地址我由于更新网站已经改掉了。 Windows CE实用开发技术 电子档下载。 版权说明,本电子档版权归原书作者所有,下载仅供学习,请与下载后24小时删除。 保护合法版权,请购买正版书籍! 请勿多线程,保护本空间的速度! 谢谢!! 下载请访问http://www.51wince.cn/article/146.htm。 或请直直接点击一下连接下载!注意上面的要求!!!! 下载
mimosa4188 嵌入式系统编程
windows 编程 关于无线上网 端口号的 问题?
我们现在需要建立一个 100个节点的无线网络, 这 100 个节点中有97个是现场的 无线数据模块,通过手机卡实现 无线上网,3个节点 是数据中心,分别接有一台 PC机(此PC机为固定IP), 然后 这97个 无线模块 分别 向一台 PC机发送数据. 上述情况下 我见到过 两种 PC机的编程方式: 方式1:PC机程序 邦定 一个固定IP地址和1个端口号?  方式2:PC机程序 邦定 
weizhou 嵌入式系统编程
windows 编程 关于无线上网 端口号的 问题?
我们现在需要建立一个 100个节点的无线网络, 这 100 个节点中有97个是现场的 无线数据模块,通过手机卡实现 无线上网,3个节点 是数据中心,分别接有一台 PC机(此PC机为固定IP), 然后 这97个 无线模块 分别 向一台 PC机发送数据. 上述情况下 我见到过 两种 PC机的编程方式: 方式1:PC机程序 邦定 一个固定IP地址和1个端口号?  方式2:PC机程序 邦定 
anna29215582 产业风云
windows 编程 关于无线上网 端口号的 问题?
我们现在需要建立一个 100个节点的无线网络, 这 100 个节点中有97个是现场的 无线数据模块,通过手机卡实现 无线上网,3个节点 是数据中心,分别接有一台 PC机(此PC机为固定IP), 然后 这97个 无线模块 分别 向一台 PC机发送数据. 上述情况下 我见到过 两种 PC机的编程方式: 方式1:PC机程序 邦定 一个固定IP地址和1个端口号?  方式2:PC机程序 邦定 
djyuanwei 嵌入式系统编程
立宇泰最新6410核心板资料下载
6410核心板采用8层板工艺,具有最佳的电气性能和抗干扰性能,使S3C6410稳定工作于667MHz主频之上(DDR数据和CLK信号达到266MHz)。多达 320个引出脚,充分扩展了S3C6410的硬件资源,让使用者能够无局限自由地进行扩展板设计。                                          附件: 立宇泰ARMSYS 6410开发板硬件用户手册:
vv0147 嵌入式系统编程

评论


个人中心

意见反馈

求资源

回顶部

下载专区


TI最新应用解决方案

工业电子 汽车电子 个人电子

搜索下次设计所需的
TI 器件

● 目前在售器件有45,000款
● 6.99美元标准运费,不受时间和地点限制
● 无最低起订量要求

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

EEWorld电子技术资料下载——分享有价值的资料

北京市海淀区知春路23号集成电路设计园量子银座1305 电话:(010)82350740 邮编:100191

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2018 EEWORLD.com.cn, Inc. All rights reserved
$(function(){ var appid = $(".select li a").data("channel"); $(".select li a").click(function(){ var appid = $(this).data("channel"); $('.select dt').html($(this).html()); $('#channel').val(appid); }) })