自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(2)
  • 资源 (17)
  • 收藏
  • 关注

转载 poj 3615 :Cow Hurdles (floyd)----很好

<br /> 题意:奶牛们为了比赛要刻苦训练跳木桩。现在有n个木桩,并知道其中m对木桩的高度差。问奶牛们能从木桩u跳到木桩v,最少的跳跃高度是多少?<br /> <br />思路:基础的floyd。只是在传递的地方要改变一下松弛条件就可以了。<br /> <br />源代码:(540K 422MS/329MS)<br />#include<iostream><br /> using namespace std;<br /> const int Max = 305;<br /> const int i

2010-12-03 23:21:00 273

原创 Candies 3159----差分约束系统+spfa

<br />【题目大意】<br />给n个人派糖果,给出m组数据,每组数据包含A,B,c  三个数,意思是A的糖果数比B少的个数不多于c,即B的糖果数 - A的糖果数<= c 。最后求n 比 1 最多多多少糖果。<br />【解题思路】<br />这是一题典型的差分约束题。不妨将糖果数当作距离,把相差的最大糖果数看成有向边AB的权值,我们得到 dis[B]-dis[A]<=w(A,B)。看到这里,我们联想到求最短路时的松弛技术,<br /> 即if(dis[B]>dis[A]+w(A,B), di

2010-12-03 21:13:00 372

Principles of concurrent and Distributed Programming

Principles of concurrent and Distributed Programming (the 2nd Edition, which is based on Spin), Ben-Ari, Addison-Wesley, 2006. The latest edition of a classic text on concurrency and distributed programming – from a winner of the ACM/SIGCSE Award for Outstanding Contribution to Computer Science Education. From the Back Cover Final Cover Copy – Ben-Ari Principles of Concurrent and Distributed Programming 2nd Edition M. Ben-Ari The latest edition of a classic text from a winner of the ACM/SIGCSE Award for Outstanding Contribution to Computer Science Education. Software today is inherently concurrent or distributed – from event-based GUI designs to operating and real-time systems to Internet applications. The new edition of this classic introduction to concurrency has been completely revised in view of the growing importance of concurrency constructs embedded in programming languages and of formal methods such as model checking that are widely used in industry. The 2nd edition: Ø Focuses on algorithmic principles rather than language syntax; Ø Emphasizes the use of the Spin model checker for modeling concurrent systems and verifying program correctness; Ø Explains the implementation of concurrency in the Java and Ada languages. Ø Facilitates lab work with software tools for learning concurrent and distributed programming. Check out the companion website for the book at www.pearson.co.uk/ben-ari to find additional resources for both students and instructors, including source code in various languages for the programs in the book, answers to the exercises, and slides for all diagrams, algorithms and programs. About the Author Mordechai (Moti) Ben-Ari is an Associate Professor in the Department of Science Teaching at the Weizmann Institute of Science in Rehovot, Israel. He is the author of texts on Ada, concurrent programming, programming languages, and mathematical logic, as well as Just a Theory: Exploring the Nature of Science. In 2004 he was honored with the ACM/SIGCSE Award for Outstanding Contribution to Computer Science Education.

2011-01-10

P2P网络技术原理与C++开发案例 源代码和第五章电子书 Peercast(王浩聪注释版)

基础理论篇 第1章 P2P基本概念 3 1.1 P2P网络的定义 3 1.2 P2P网络结构 4 1.2.1 集中式P2P网络 4 1.2.2 完全分布式非结构化P2P网络 5 1.2.3 完全分布式结构化P2P网络 6 1.2.4 混合式P2P网络 7 1.2.5 P2P网络和传统网络的对比 8 1.3 P2P网络的应用 9 1.4 P2P的发展 11 1.4.1 起步 11 1.4.2 发展 11 1.4.3 高峰 11 1.5 P2P技术国内外研究现状 12 1.5.1 国外相关研究 12 1.5.2 国内研究现状 12 1.6 本章总结 13 1.7 练习题 13 第2章 主流P2P系统 15 2.1 文件共享类系统 15 2.1.1 Napster 15 2.1.2 Gnutella 17 2.1.3 BitTorrent 19 2.1.4 eMule 20 2.1.5 Maze 22 2.2 即时通信类系统 24 2.2.1 Skype 24 2.2.2 QQ 26 2.2.3 GTalk 27 2.3 流媒体类系统 28 2.3.1 AnySee 28 2.3.2 PPLive 29 2.4 共享存储类系统 30 2.4.1 OceanStore 30 2.4.2 Granary 32 2.5 对等计算类系统 34 2.6 本章总结 35 2.7 练习题 35 第3章 P2P网络的基础——搜索和路由算法 36 3.1 传统搜索技术 36 3.2 P2P搜索技术的发展 37 3.3 DHT网络(结构化P2P网络)的搜索技术 39 3.3.1 DHT路由原理 39 3.3.2 Chord 40 3.3.3 Pastry 44 3.3.4 CAN 46 3.3.5 Tapestry 48 3.3.6 Kademlia 50 3.3.7 小结 53 3.4 非结构化P2P网络的搜索技术 53 3.4.1 Flooding 54 3.4.2 Modified-BFS 55 3.4.3 Iterative Deepening 55 3.4.4 Random Walk 56 3.4.5 Query Routing 57 3.4.6 Gnutella2 59 3.4.7 移动Agent 59 3.4.8 小结 60 3.5 小世界(Small World)模型 61 3.5.1 小世界模型概述 61 3.5.2 聚类分布(CD)算法 62 3.5.3 小世界网络的研究现状 66 3.6 P2P搜索技术研究的挑战 66 3.7 本章总结 67 3.8 练习题 67 第4章 P2P应用与安全 69 4.1 P2P应用面临的安全问题 69 4.1.1 P2P应用引发的版权问题 69 4.1.2 P2P应用对现有网络应用的威胁 71 4.1.3 P2P网络病毒与蠕虫 71 4.1.4 结构化P2P网络的隐患 72 4.2 P2P应用与安全技术 76 4.2.1 P2P应用中的密码学技术 76 4.2.2 P2P应用中的网络安全技术 78 4.2.3 利用P2P网络解决安全问题 82 4.3 P2P实例系统--Skype的安全性分析 88 4.3.1 Skype简介 89 4.3.2 Skype安全机制分析 93 4.3.3 Skype流量识别 96 4.4 本章总结 98 4.5 练习题 98 第5章 P2P应用的相关技术 100 5.1 P2P与网络穿越 100 5.1.1 NAT网络概念 100 5.1.2 STUN协议与NAT穿越 103 5.1.3 UDP穿越NAT 106 5.1.4 TCP穿越NAT 107 5.1.5 NAT类型检测 108 5.1.6 常见NAT穿越解决方案 111 5.2 P2P与IMS结合 112 5.2.1 什么是IMS 112 5.2.2 P2P与IMS的网络融合 112 5.3 VoIP通信基础 113 5.3.1 VoIP系统概念 113 5.3.2 H.323协议 115 5.3.3 SIP 115 5.3.4 RTP 117 5.3.5 RTSP 118 5.4 P2P和SIP的结合 119 5.4.1 P2P和SIP结合方案分析 120 5.4.2 基于Pastry设计P2P-SIP系统 122 5.5 本章总结 125 5.6 练习题 126 C++开发案例篇 第6章 P2P应用开发平台 129 6.1 Windows Peer-to-Peer Networking平台 129 6.1.1 Windows Peer-to-Peer Networking平台简介 129 6.1.2 Windows Peer-to-Peer Networking平台结构 130 6.1.3 Windows Peer-to-Peer Networking平台工作机制 132 6.1.4 Windows Peer-to-Peer Networking平台开发环境 136 6.1.5 Windows Peer-to-Peer Networking平台开发入门 139 6.2 JXTA 161 6.2.1 JXTA简介 161 6.2.2 JXTA的平台结构 162 6.2.3 JXTA的基本概念 163 6.2.4 JXTA的网络架构 166 6.2.5 JXTA开发环境 171 6.3 本章总结 175 6.4 练习题 175 第7章 P2P文件共享系统开发实例一——eMule的设计与实现 176 7.1 eMule系统概述 176 7.1.1 P2P文件共享系统的背景 176 7.1.2 eMule的设计目标 177 7.2 eMule系统原理 178 7.2.1 eMule协议原理 178 7.2.2 Kad协议原理 185 7.3 eMule系统设计 186 7.3.1 eMule系统结构概述 187 7.3.2 文件基础设施 187 7.3.3 网络基础设施 189 7.3.4 eMule通信协议 190 7.3.5 任务处理机制 191 7.3.6 Kad系统结构概述 195 7.4 eMule程序代码分析 199 7.5 eMule系统部署 223 7.5.1 系统编译和运行 224 7.5.2 系统安装与配置 225 7.5.3 文件搜索和下载 226 7.5.4 文件上传 227 7.6 eMule系统分析 228 7.7 本章总结 228 7.8 练习题 228 第8章 P2P文件共享系统开发实例二——BT的设计与实现 230 8.1 BitTorrent系统概述 230 8.2 BitTorrent系统原理 230 8.2.1 BitTorrent协议原理 231 8.2.2 BitTorrent Tracker服务器原理 234 8.3 BitTorrent系统设计 236 8.3.1 Arctic客户端系统结构概述 236 8.3.2 LibTorrent库系统结构概述 237 8.4 BitTorrent程序代码分析 238 8.4.1 Arctic客户端代码分析 238 8.4.2 LibTorrent库代码分析 260 8.5 BitTorrent系统部署 270 8.5.1 BitTorrent服务器的部署 271 8.5.2 BitTorrent客户端的部署 271 8.6 BitTorrent系统分析 271 8.7 本章总结 272 8.8 练习题 272 第9章 P2P即时通信系统开发实例——Hermes的设计与实现 273 9.1 Hermes系统概述 273 9.1.1 P2P即时通信系统的背景 273 9.1.2 Hermes系统设计目标 274 9.2 Hermes系统原理 274 9.2.1 登录认证机制 275 9.2.2 语音提取与播放机制 277 9.3 Hermes系统设计 279 9.4 Hermes程序代码分析 280 9.4.1 语音处理模块代码分析 280 9.4.2 通信模块代码分析 295 9.5 Hermes系统分析 302 9.6 本章总结 302 9.7 练习题 302 第10章 P2P流媒体系统开发实例——PeerCast的设计与实现 303 10.1 P2P流媒体系统概念 303 10.1.1 流媒体内容发布网络技术 303 10.1.2 P2P流媒体系统概述 304 10.1.3 P2P流媒体系统架构 304 10.1.4 现有系统 305 10.2 流媒体技术 305 10.3 设计P2P音视频点播系统 306 10.3.1 多媒体数据压缩 306 10.3.2 应用层QoS 306 10.3.3 应用层多播技术 306 10.3.4 流媒体同步技术 307 10.3.5 PeerCast实现分析 307 10.3.6 改造BitTorrent成为流媒体系统 311 10.4 本章总结 311 10.5 练习题 311 第11章 P2P视频点播系统开发实例——Myseelite的设计与实现 313 11.1 Myseelite系统概述 313 11.1.1 P2P视频点播系统的背景 313 11.1.2 Myseelite的设计目标 314 11.2 Myseelite系统原理 315 11.2.1 基本概念 315 11.2.2 工作机制 316 11.2.3 ACE简介 317 11.2.4 wxWidgets简介 320 11.3 Myseelite系统设计 320 11.3.1 Capture子系统 320 11.3.2 Super Peer子系统 321 11.3.3 Tracker子系统 322 11.3.4 Client子系统 324 11.4 Myseelite程序代码分析 329 11.5 Myseelite系统部署 353 11.5.1 系统编译 353 11.5.2 系统运行 353 11.5.3 轮播流程 354 11.5.4 直播流程 357 11.6 Myseelite系统分析 359 11.7 本章总结 359 11.8 练习题 3

2010-09-29

C#网络应用案例导航 光盘文件 .socket编程的经典案例

C#是微软公司推出的新一代编程语言。它功能强大、编程简洁、明快,是微软公司推行的.NET计划中的重要组成部分。全书一共由11章组成,包括10个典型实例,深入浅出地全面介绍了如何使用C#语言在NET框架下开发各种网络程序。包括使用.NET框架中的.NET Remoting、Socket等组件开发邮件服务、分布式数据库等各种功能强大且实用的程序。   本书内容丰富、可操作性强、语言生动流畅、没有晦涩的专业术语,能够使读者在轻松愉快的环境下迅速掌握C#网络编程的方法和技巧。 目录: >第1章 .NET简介 1 1-1 微软的.NET计划 2 1-1-1 .NET开发背景 2 1-1-2 什么是.NET 2 1-1-3 .NET的核心组件 3 1-1-4 .NET的重大意义 3 1-1-5 服务概念崭露头角 4 1-2 .NET框架 5 1-2-1 什么是.NET框架 5 1-2-2 虚拟对象系统 6 1-2-3 元数据 6 1-2-4 公共语言规范 7 1-2-5 虚拟执行系统 7 1-2-6 公共语言运行时(Common Language Runtime) 8 1-2-7 统一的.NET框架类库 10 1-2-8 对比.NET框架与Java框架 11 1-3 C#语言 12 1-3-1 C#的开发背景 12 1-3-2 C#语言的特点 13 1-4 Visual Studio.NET的全新集成开发环境 15 1-4-1 启动界面 16 1-4-2 解决方案管理器 17 1-4-3 工具箱 17 1-4-4 代码编辑窗口 18 1-4-5 资源视图 20 1-4-6 类视图 21 1-4-7 属性窗口 21 1-4-8 服务器浏览器 22 1-4-9 提示窗口栏 23 1-5 Visual Studio.NET中的向导 23 1-5-1 程序框架向导 23 1-5-2 添加类向导 24 1-5-3 类成员变量、成员函数添加向导 25 1-6 小结 26 第2章 .NET网络编程方法概述 27 2-1 Internet基础 28 2-1-1 Internet的发展历史 28 2-1-2 网络结构 29 2-1-3 网络逻辑分层 32 2-1-4 TCP/IP网络协议 33 2-1-5 套接字(Socket) 36 2-2 .NET网络编程组件 38 2-2-1 .NET中的网络组件 38 2-2-2 System.Net.Sockets命名空间 39 2-2-3 网络通信中的流 40 2-2-4 网络编程中其他常用类 43 2-3 .NET中Socket编程 45 2-3-1 Socket简介 45 2-3-2 .NET中的Socket类 46 2-3-3 Socket的同步和异步编程 51 2-3-4 基于UDP协议的Socket 64 2-4 TCP编程 68 2-4-1 TcpClient 68 2-4-2 TcpListener 69 2-5 小结 71 第3章 浏览器程序 73 3-1 实例功能 74 3-2 编程思路 75 3-3 预备知识 76 3-3-1 网络协议 76 3-3-2 HTTP协议 77 3-3-3 浏览器与HTTP协议 82 3-4 浏览器程序实现步骤 85 3-4-1 步骤1-建立程序框架 85 3-4-2 步骤2-建立程序界面 85 3-4-3 步骤3-实现浏览器功能 87 3-5 浏览器扩展功能的实现 96 3-5-1 阻止用户浏览不良网站 96 3-5-2 记录用户浏览的网站地址 96 3-5-3 过滤IE的弹出式广告窗口 97 3-5-4 程序清单 98 3-6 网页源代码浏览程序 98 3-6-1 步骤1-建立程序框架 98 3-6-2 步骤2-建立程序界面 98 3-6-3 步骤3-实现浏览源代码功能 99 3-6-4 源代码浏览程序清单 105 3-7 实例小结 105 第4章 电子邮件发送接收程序 107 4-1 实例功能 108 4-2 编程思路 109 4-3 预备知识 110 4-3-1 电子邮件工作原理 110 4-3-2 RFC821--简单邮件传输协议(SMTP) 110 4-3-3 RFC1939-POP3协议 113 4-4 发送邮件程序实现步骤 116 4-4-1 步骤1-建立程序框架 116 4-4-2 步骤2-建立程序界面 116 4-4-3 步骤3-实现发信功能 117 4-4-4 发信程序代码清单 124 4-5 接收邮件程序实现步骤 124 4-5-1 步骤1-建立程序框架 124 4-5-2 步骤2-建立程序界面 125 4-5-3 步骤3-实现发信功能 126 4-5-4 收信程序代码清单 130 4-6 封装SMTP和POP3类 134 4-6-1 SMTP的封装类 134 4-6-2 POP3的封装类 138 4-7 实例小结 147 第5章 FTP服务器 149 5-1 实例功能 150 5-2 编程思路 151 5-3 预备知识 151 5-3-1 FTP协议概述 151 5-4 入门实例 152 5-4-1 基于TCP协议的网络通讯小实例 152 5-4-2 多线程入门实例 158 5-5 实现步骤 159 5-5-1 步骤1-建立程序框架 159 5-5-2 步骤2-实现MainApp 160 5-5-3 步骤3-FTPD类主框架 163 5-5-4 步骤4-初始化连接 169 5-5-5 步骤5-分析用户请求 172 5-5-6 步骤6-处理用户请求 176 5-5-7 FTP服务器程序清单 188 5-6 实例小结 188 第6章 网络发布和订阅 189 6-1 实例功能 190 6-2 编程思路 191 6-3 预备知识 192 6-3-1 事件(Event)编程模型 192 6-4 入门实例 194 6-4-1 .NET Remoting实例 194 6-4-2 事件编程模型实例 198 6-5 实现步骤 199 6-5-1 步骤1-建立程序框架 199 6-5-2 步骤2-生成发布内容 202 6-5-3 步骤3-建立服务器端的.NET Remoting 框架 204 6-5-4 步骤4-建立客户端.NET Remoting框架 206 6-5-5 步骤5-注册订阅者 208 6-5-6 步骤6-建立发布和订阅事件模型 209 6-5-7 步骤7-触发发布事件 214 6-5-8 步骤8-客户端显示 216 6-5-9 步骤9-编译程序 219 6-5-10 函数调用关系分析 219 6-5-11 程序清单 220 6-6 实例小结 220 第7章 基于TCP协议的聊天、文件传输程序 221 7-1 实例功能 222 7-2 编程思路 223 7-3 预备知识 224 7-3-1 网络协议 224 7-3-2 流(Stream) 225 7-3-3 Winsock与网络协议 226 7-3-4 System.Text命名空间 228 7-4 入门实例 229 7-5 实现步骤 231 7-5-1 步骤1-建立程序框架 231 7-5-2 步骤2-定义P2PSockEventArgs事件类和代表 232 7-5-3 步骤3-P2PSock类中的域定义 233 7-5-4 步骤4-P2PSock类构造函数 234 7-5-5 步骤5-P2PSock类与远端连接的建立 238 7-5-6 步骤6-P2PSock类发送字符串数据 240 7-5-7 步骤7-P2PSock类接收数据 241 7-5-8 步骤8-P2PSock类更改用户名 245 7-5-9 步骤9-P2PSock类文件定时器 246 7-5-10 步骤10-P2PSock类文件收发功能 249 7-5-11 步骤11-P2P MultiChat界面 286 7-5-12 步骤12-ChatForm类中手动增加的域 287 7-5-13 步骤13-ChatForm类构造函数 288 7-5-14 步骤14-ChatForm类服务器端侦听 289 7-5-15 步骤15-ChatForm类各种P2PSock事件响应 293 7-5-16 步骤16-ChatForm类本地用户名更改 298 7-5-17 步骤17-ChatForm类和指定的远端建立连接 300 7-5-18 步骤18-ChatForm类文件发送 301 7-6 实例小结 303 第8章 用C#实现简单的网络监视软件 305 8-1 实例功能 306 8-2 编程思路 306 8-3 预备知识 307 8-3-1 TCP/IP协议 307 8-3-2 Winsock编程 308 8-3-3 WMI技术 309 8-4 入门实例 310 8-4-1 使用WMI的小实例 310 8-5 实现步骤 311 8-5-1 步骤1-建立程序框架 311 8-5-2 步骤2-IP头格式定义 313 8-5-3 步骤3-PacketArrivedEventArgs事件类和代表 314 8-5-4 步骤4-SniffSocketException异常类的实现 317 8-5-5 步骤5-SniffSocket类构造函数 317 8-5-6 步骤6-创建和绑定连接 318 8-5-7 步骤7-接收和处理IP包 322 8-5-8 步骤8-MainForm主界面 331 8-5-9 步骤9-主窗体载入过程 332 8-5-10 步骤10-PacketDisplay类的实现 336 8-5-11 步骤11-主窗体sniff功能的实现 337 8-5-12 步骤12-独立的程序入口类 339 8-6 实例小结 340 第9章 远程分布式数据库查询系统 341 9-1 实例功能 342 9-2 编程思路 344 9-3 预备知识 345 9-3-1 分布式数据库技术 345 9-3-2 使用ADO.NET访问数据库 346 9-4 远程分布式数据库查询程序实现步骤 351 9-4-1 步骤1-建立数据库服务对象(DbServer)的dll工程 351 9-4-2 步骤2-创建数据库和系统表 352 9-4-3 步骤3-DbServer类的初始化过程 353 9-4-4 步骤4-DbServer的查询方法 356 9-4-5 步骤5-DbServer的非查询命令处理 361 9-4-6 步骤6-根据DataSet创建临时表 365 9-4-7 步骤7-远程创建临时表 368 9-4-8 步骤8-合并两个DataTable或两张表 369 9-4-9 步骤9-建立客户端程序框架 371 9-4-10 步骤10-建立客户端程序界面 371 9-4-11 步骤11-实现查询功能 373 9-4-12 远程分布式数据库查询系统程序代码清单 384 9-5 实例小结 384 第10章 ASP.NET网络应用程序 385 10-1 预备知识 386 10-1-1 ASP.NET历史 386 10-1-2 什么是ASP.NET 386 10-1-3 ASP.NET核心内容 387 10-1-4 ASP.NET应用程序 388 10-1-5 ASP.NET 网络服务 389 10-1-6 ASP.NET中的文件类型 390 10-1-7 ASP.NET中的状态 390 10-2 实例一 在网页上发送电子邮件 392 10-2-1 功能描述 392 10-2-2 编程思路 393 10-2-3 实现步骤 393 10-3 实例二 对用户进行身份验证 400 10-3-1 功能描述 400 10-3-2 编程思路 401 10-3-3 实现步骤 401 10-4 实例三 显示定制图形 405 10-4-1 功能描述 405 10-4-2 编程思路 406 10-4-3 预备知识 406 10-4-4 实现步骤 408 10-5 小结 411 第11章 带有身份验证的文件传输Web服务 413 11-1 实例功能 414 11-2 编程思路 414 11-3 预备知识 415 11-3-1 Web Service概念 415 11-3-2 Web Service的优缺点 420 11-3-3 XML技术 423 11-4 入门实例 426 11-4-1 用ASP.NET创建Web Service方法概述 426 11-4-2 Web Service入门实例 428 11-5 实现步骤 430 11-5-1 步骤1-建立程序框架 430 11-5-2 步骤2-Authentication类的实现 431 11-5-3 步骤3-FileService类的实现 434 11-5-4 步骤4-客户端Web Reference的添加 437 11-5-5 步骤5-客户端界面设计 438 11-5-6 步骤6-客户端Web服务调用 439 11-6 实例小结 441

2010-09-20

tinyxml+tinyxpath组合编程套件,很好的编程工具,都是源码

tinyxpath 解析简单 的小工具,输出是一个静态库。可 找到xml文档. TinyXml介绍 TinyXml是一个基于DOM模型的、非验证的轻量级C++解释器 一. XML解析模型: 目前XML的解析主要有两大模型:SAX和DOM。 SAX是基于事件的,其基本工作流程是分析XML文档,当发现了一个新的元素时,产生一个对应事件,并调用相应的用户处理函数。这种方式占用内存少,速度快,但用户程序相应得会比较复杂。 DOM(文档对象模型),则是在分析时,一次性的将整个XML文档进行分析,并在内存中形成对应的树结构,同时,向用户提供一系列的接口来访问和编辑该树结构。这种方式占用内存大,速度往往慢于SAX,但可以给用户提供一个面向对象的访问接口,对用户更为友好。 另据说,一些同时提供了SAX和DOM接口的库,是在底层先实现SAX,再在SAX的基础上实现DOM 对于一个特定的XML文档而言,其正确性分为两个层次。 首先是其格式应该符合XML的基本格式要求,比如第一行要有声明,标签的嵌套层次必须前后一致等等,符合这些要求的文件,就是一个合格的XML文件,称作well-formatted。 其次,一个XML文档因其内容的不同还必须在语义上符合相应的标准,这些标准由相应的DTD文件或者Schema文件来定义,符合了这些定义要求的XML文件,称作valid。 因此,解析器也分为两种,一种是验证的,即会跟据XML文件中的声明,用相应的DTD文件对XML文件进行校验,检查它是否满足DTD文件的要求。另一种是忽略DTD文件,只要基本格式正确,就可以进行解析。 就我所知,验证的解析器通常都是比较重量级的。TinyXml不支持验证,但是体积很小,用在解析格式较为简单的XML文件,比如配置文件时,特别的合适。

2010-09-05

C编程精粹.pdf 很好的微软写的书

目 录 序......................................................................................................................................................4 命名约定..........................................................................................................................................6 某些背景..........................................................................................................................................8 引言..................................................................................................................................................9 第1 章 假想的编译程序.............................................................................................................15 第2 章 自己设计并使用断言.....................................................................................................25 第3 章 为子系统设防.................................................................................................................59 第4 章 对程序进行逐条跟踪.....................................................................................................90 第5 章 糖果机界面.....................................................................................................................99 第6 章 风险事业.......................................................................................................................121 第7 章 编码中的假象...............................................................................................................154 第8 章 剩下来的就是态度问题...............................................................................................179 附录A 编码检查表.....................................................................................................................198 附录B 内存登录例程.................................................................................................................203 附录C 练习答案.........................................................................................................................216 后记 走向何方.........................................................................................................................249 序 ……………………………………………………………………………… Ⅰ 某些背景 ……………………………………………………………………… Ⅲ 命名约定 ……………………………………………………………………… Ⅳ 引 言 ………………………………………………………………………… Ⅵ 第1章 假想的编译程序 …………………………………………………… 1 3 第2章 自己设计并使用断言 ……………………………………………… 8 第3章 为子系统设防 ……………………………………………………… 31 第4章 对程序进行逐条跟踪 ……………………………………………… 53 第5章 糖果机界面 ………………………………………………………… 60 第6章 风险事业 …………………………………………………………… 75 第7章 编码中的假象 ……………………………………………………… 98 第8章 剩下的就是态度问题 ……………………………………………… 115 后 记 走向何方 …………………………………………………………… 129 附录A 编码检查表 …………………………………………………………… 130 附录B 内存登录例程 ………………………………………………………… 133 附录C 练习答案 ……………………………………………………………… 140 参考文献

2010-07-22

网络编程教程,很好的一本写linux网络编程书,这是我上传的源码

第一篇 基础知识篇  第一章 文件系统和进程系统  1.1 文件系统  1.1.1 文件系统的总体结构  1.1.2 文件结构和目录结构  1.2 文件系统的相关编程  1.3 进程系统  1.3.1 进程的概念  1.3.2 Linux中描述进程的核心数据结构。  1.3.3 和进程相关的系统调用  本章小结 第二章 进程间通信和同步  2.1 信号的处理  2.1.1 Linux中支持的信号  2.1.2 信号的捕获和处理  2.1.3 系统调用和信号的相互作用  2.1.4 pause和suspend函数  2.2 信号量  2.2.1 进程间的互斥  2.2.2 信号量的结构和信号量操作函数 . 2.2.3 应用示例  2.3 消息队列  2.3.1 消息队列的结构  2.3.2 消息队列的操作函数  2.3.3 应用示例  2.4 共享内存  2.4.1 共享内存的操作函数  2.4.2 应用示例  本章小结 第三章 TCP/IP协议  3.1 OSI参考模型、协议和服务  3.2 协议和服务  3. 2.1 TCB/IP  3.2.2 TCP和UDP的比较  3.2.3 Internet上两主机进程间通信数据的封装和解包  3.2.4 IP地址、网络地址和网络掩码  3.2.5 传输层端口  3. 3 域名系统  3.4 域名解析和名字服务器  3. 4. 1 TCP协议  3.4.2 TCP的确认和超时重发机制  3.4.3 TCP头部格式(HeaderFFormat)  3.4.4 TCP连接的状态转移过程  3.5 IP数据包格式  3.6 Internet消息控制协议  本章小结 第二篇 初级应用篇  第四章 基本套接字编程实践  4.1 基本套接字函数族  4.1.1 socket编程的基本流程  4.1.2 函数socket  4.1. 3 函数connect  4.1. 4 函数bind  4.1.5 函数listen  4.1.6 函数accept  4.1.7 函数read和write  4.1.8 函数close  4.2 应用示例  4.3 程序结果和异常说明  4.3.1 程序的运行结果  4.3. 2 程序的异常  本章小结  第五章 无阻塞套接字和单进程轮询服务器  5.1 无阻塞套接字  5.1.1 阻塞套接字的缺点  5.1. 2 阻塞和无阻塞的比较  5.1.3 无阻塞的实现  5.2 单进程轮询服务器工作方式  5. 3 应用示例  5.3.1 应用说明  5.3.2 应用源码  第六章 带外数据与多路复用、信号驱动的输入J输出模型  6.1 多路复用的输入/输出模型  6.1.1 多路复用模型的概念与select函数  6.1.2 应用示例  6.1.3 pselect函数对select的增强  6.2 信号驱动的输入/输出模型  6.3 系统I/O模型的总结  6.4 带外数据  6.4.1 带外数据的发送  6.4.2 带外数据的接收  6.4.3 带外数据接收方法的示例  本章小结  第七章 UDF数据报  7.1 UDP数据报的概述  7.2 UDP通信的过程  7.3 UDP的服务器和TCP服务器的比较  7.4 UDP的“连接”  7.5 应用示例  本章小结  第八章 域名系统和通用套接字选项  8.1 域名系统  8.1.1 域名系统的回顾  8.1.2 通过地址获取主机信息  8.1.3 通过主机名获取主机信息  8.1.4 获取本地主机的信息  8.1.5 通过服务名获取服务端口  8.1.6 通过端口号获取服务名  8.2 套接字选项  8.2.1 获取和设置套接字选项  8.2.2 通用套接字选项  本章小结 第三篇 应用提高篇  第九章 高级套接字函数编程实践  9.1 函数recv和send  9.1.1 函数send  9.1.2 函数recv  9.1.3 应用示例  9.1.4 应用源码和分析  9.2 函数readv和writev  9.2.1 函数说明  9.2.2 应用示例  9.3 函数比recvmsg和sendmsg  本章小结  第十章 守护进程和超级服务器inetd  10.1 守护进程的原理  10.2 编程实践  10.3 超级服务器inetd的工作原理  10.3.1 超级服务器的概念  10.3.2 超级服务器使用的配置文件  10.3.3 inetd处理并发服务的过程  本章小结  第十一章 数据结构的传输和xDR标准  11.1 数据结构的传送  11.1.1 数据结构传送的问题  11.1.2 简单的示例  11.2 XDR标准  11.2.1 XDR中包含的数据类型  11.2.2 XDR实现的原理  11.2.3 XDR的转换函数库  本章小结  第十二章 BPC远程过程调用原理和实践  12.1 RPC的原理  12.1.1 XDR的更进一步  12.1.2 本地函数调用的过程  12.1.3 用远程调用来虚拟本地调用  12.2 RPC的实现  12.2.1 远程过程的标识  12.2.2 端口的动态映射  12.2.3 RPC的报文  12.2.4 RPC开发工具  12.2.5 设计的原则  12.3 应用示例:网络记事本  12.3.1 编写本地应用  12.3.2 Rpcgen构建RPC应用  12.3.3 编写RPC说明文件  12.3.4 修改客户端程序  12.3.5 修改服务器端程序  12.3.6 调用的完整过程  12.3.7 程序的结果、分析和总结  本章小结 第四篇 高级编程篇  第十三章 UNIX域套接字和并发服务器的预创建技术  13.1 UNIX域套接字  13.1.1 UNIX域的地址结构  13.1.2 UNIX(套接字使用的示例  13.1.3 传递文件描述符  13.2 并发服务器的预创建技术  13.2.1 预创建固定服务器进程的数量  13.2.2 动态的管理子进程  13.2.3 重用服务器子进程  本章小结  第十四章 原始套接字编程实践  14.1 原始套接字  14.1.1 原始套接字的创建  14.1.2 原始套接字的使用  14.1.3 IP包头和ICMP报文的C语言描述  14.2 Ping应用程序  14.2.1 程序设计  14.2.2 程序源码  14.3 IP套接字选项  14.3.1 IP_TTL选项  14.3.2 IP_TOS选项  14.3.3 IP_OPTIONS选项  14.3.4 IP_HDRINCL选项  本章小结  第十五章 多线程编程  15.1 线程的概念  15.1.1 线程的概念  15.1.2 线程的分类  15.1.3 线程的创建和等待函数  15.1.4 线程的属性函数  15.2 线程间的同步  15.2.1 无名信号量  15.2.2 互斥锁、条件变量和条件信号  15.2.3 线程和信号  15.3 在网络程序中应用多线程  15.3.1 线程间参数的传递  15.3.2 线程安全函数的设计  15.3.3 多进程的并发服务器和多线程的并发服务器  15.3.4 客户端进程的多线程化  本章小结 第十六章 网络售票系统的简单模拟  16.1 系统的总体设计  16.1.1 应用的说明  16.1.2 数据格式的设计  16.1.3 服务器端的设计  16.1.4 客户端的设计  16.2 程序源码和解析  16.2.1 服务器端的源码  16.2.2 客户端的源码  本章小结

2010-07-10

Windows驱动开发技术详解

第1篇 入门篇 第1章 从两个最简单的驱动谈起 2 本章向读者呈现两个最简单的Windows驱动程序,一个是NT式的驱动程序,另一个是WDM式的驱动程序。这两个驱动程序没有操作具体的硬件设备,只是在系统里创建了虚拟设备。在随后的章节中,它们会作为基本驱动程序框架,被本书其他章节的驱动程序开发所复用。笔者将带领读者编写代码、编译、安装和调试程序。 1.1 DDK的安装 2 1.2 第一个驱动程序HelloDDK的代码分析 3 1.2.1 HelloDDK的头文件 4 1.2.2 HelloDDK的入口函数 5 1.2.3 创建设备例程 6 1.2.4 卸载驱动例程 8 1.2.5 默认派遣例程 9 1.3 HelloDDK的编译和安装 9 1.3.1 用DDK环境编译HelloDDK 9 1.3.2 用VC集成开发环境编译HelloDDK 11 1.3.3 HelloDDK的安装 14 1.4 第二个驱动程序HelloWDM的代码分析 16 1.4.1 HelloWDM的头文件 16 1.4.2 HelloWDM的入口函数 17 1.4.3 HelloWDM的AddDevice例程 18 1.4.4 HelloWDM处理PNP的回调函数 20 1.4.5 HelloWDM对PNP的默认处理 22 1.4.6 HelloWDM对IRP_MN_REMOVE_DEVICE的处理 23 1.4.7 HelloWDM对其他IRP的回调函数 23 1.4.8 HelloWDM的卸载例程 24 1.5 HelloWDM的编译和安装 24 1.5.1 用DDK编译环境编译HelloWDM 24 1.5.2 HelloWDM的编译过程 25 1.5.3 安装HelloWDM 25 1.6 小结 29 第2章 Windows操作驱动的基本概念 31 驱动程序被操作系统加载在内核模式下,它与Windows操作系统内核的其他组件进行密切交互。本章主要介绍Windows操作系统内核的基本概念,同时还介绍应用程序和驱动程序之间的通信方法。 2.1 Windows操作系统概述 31 2.1.1 Windows家族 31 2.1.2 Windows特性 32 2.1.3 用户模式和内核模式 34 2.1.4 操作系统与应用程序 36 2.2 操作系统分层 37 2.2.1 Windows操作系统总体架构 37 2.2.2 应用程序与Win32子系统 38 2.2.3 其他环境子系统 40 2.2.4 Native API 41 2.2.5 系统服务 41 2.2.6 执行程序组件 42 2.2.7 驱动程序 44 2.2.8 内核 44 2.2.9 硬件抽象层 45 2.2.10 Windows与微内核 45 2.3 从应用程序到驱动程序 46 2.4 小结 48 第3章 Windows驱动编译环境配置、安装及调试 49 本章将带领读者一步步对驱动程序进行编译、安装和简单的调试工作。这些步骤虽然简单,但往往困惑着初次接触驱动程序的开发者。 3.1 用C语言还是用C++语言 49 3.1.1 调用约定 50 3.1.2 函数的导出名 52 3.1.3 运行时函数的调用 53 3.2 用DDK编译环境编译驱动程序 54 3.2.1 编译版本 55 3.2.2 nmake工具 55 3.2.3 build工具 56 3.2.4 makefile文件 57 3.2.5 dirs文件 58 3.2.6 sources文件 58 3.2.7 makefile.inc文件 59 3.2.8 build工具的环境变量 60 3.2.9 build工具的命令行参数 61 3.3 用VC编译驱动程序 62 3.3.1 建立驱动程序工程 62 3.3.2 修改编译选项 62 3.3.3 修改链接选项 63 3.3.4 其他修改 64 3.3.5 VC编译小结 65 3.4 查看调试信息 66 3.4.1 打印调试语句 66 3.4.2 查看调试语句 67 3.5 手动加载NT式驱动 68 3.6 编写程序加载NT式驱动 68 3.6.1 SCM组件和Windows服务 69 3.6.2 加载NT驱动的代码 71 3.6.3 卸载NT驱动的代码 74 3.6.4 实验 76 3.7 WDM式驱动的加载 78 3.7.1 WDM的手动安装 78 3.7.2 简单的INF文件剖析 79 3.8 WDM设备安装在注册表中的变化 81 3.8.1 硬件子键 81 3.8.2 类子键 83 3.8.3 服务子键 85 3.9 小结 86 第4章 驱动程序的基本结构 87 本章首先对Windows驱动程序的两个重要数据结构进行介绍,分别是驱动对象和设备对象数据结构。另外还要介绍NT驱动程序和WDM驱动程序的入口函数、卸载例程、各种IRP派遣上函数等。 4.1 Windows驱动程序中重要的数据结构 87 4.1.1 驱动对象(DRIVER_OBJECT) 87 4.1.2 设备对象(DEVICE_OBJECT) 89 4.1.3 设备扩展 91 4.2 NT式驱动的基本结构 92 4.2.1 驱动加载过程与驱动入口函数(DriverEntry) 92 4.2.2 创建设备对象 95 4.2.3 DriverUnload例程 97 4.2.4 用WinObj观察驱动对象和设备对象 98 4.2.5 用DeviceTree观察驱动对象和设备对象 101 4.3 WDM式驱动的基本结构 102 4.3.1 物理设备对象与功能设备对象 102 4.3.2 WDM驱动的入口程序 104 4.3.3 WDM驱动的AddDevice例程 105 4.3.4 DriverUnload例程 107 4.3.5 对IRP_MN_REMOVE_DEVICE IRP的处理 108 4.3.6 用Device Tree查看WDM设备对象栈 109 4.4 设备的层次结构 110 4.4.1 驱动程序的垂直层次结构 111 4.4.2 驱动程序的水平层次结构 112 4.4.3 驱动程序的复杂层次结构 112 4.5 实验 114 4.5.1 改写HelloDDK查看驱动结构 114 4.5.2 改写HelloWDM查看驱动结构 116 4.6 小结 117 第5章 Windows内存管理 118 本章围绕着驱动程序中的内存操作进行了介绍。在驱动程序开发中,首先要注意分页内存和非分页内存的使用。同时,还需要区分物理内存地址和虚拟内存地址这两个概念。 5.1 内存管理概念 118 5.1.1 物理内存概念(Physical Memory Address) 118 5.1.2 虚拟内存地址概念(Virtual Memory Address) 119 5.1.3 用户模式地址和内核模式地址 120 5.1.4 Windows驱动程序和进程的关系 121 5.1.5 分页与非分页内存 122 5.1.6 分配内核内存 123 5.2 在驱动中使用链表 124 5.2.1 链表结构 124 5.2.2 链表初始化 125 5.2.3 从首部插入链表 126 5.2.4 从尾部插入链表 126 5.2.5 从链表删除 127 5.2.6 实验 129 5.3 Lookaside结构 130 5.3.1 频繁申请内存的弊端 130 5.3.2 使用Lookaside 130 5.3.3 实验 132 5.4 运行时函数 133 5.4.1 内存间复制(非重叠) 133 5.4.2 内存间复制(可重叠) 134 5.4.3 填充内存 134 5.4.4 内存比较 135 5.4.5 关于运行时函数使用的注意事项 135 5.4.6 实验 137 5.5 使用C++特性分配内存 137 5.6 其他 139 5.6.1 数据类型 139 5.6.2 返回状态值 140 5.6.3 检查内存可用性 142 5.6.4 结构化异常处理(try-except块) 142 5.6.5 结构化异常处理(try-finally块) 144 5.6.6 使用宏需要注意的地方 146 5.6.7 断言 147 5.7 小结 147 第6章 Windows内核函数 148 本章介绍了Windows内核模式下的一些常用内核函数,这些函数在驱动程序的开发中将会经常用到。 6.1 内核模式下的字符串操作 148 6.1.1 ASCII字符串和宽字符串 148 6.1.2 ANSI_STRING字符串与UNICODE_STRING字符串 149 6.1.3 字符初始化与销毁 151 6.1.4 字符串复制 152 6.1.5 字符串比较 153 6.1.6 字符串转化成大写 154 6.1.7 字符串与整型数字相互转换 155 6.1.8 ANSI_STRING字符串与UNICODE_STRING字符串相互转换 157 6.2 内核模式下的文件操作 158 6.2.1 文件的创建 158 6.2.2 文件的打开 161 6.2.3 获取或修改文件属性 163 6.2.4 文件的写操作 166 6.2.5 文件的读操作 167 6.3 内核模式下的注册表操作 169 6.3.1 创建关闭注册表 170 6.3.2 打开注册表 172 6.3.3 添加、修改注册表键值 173 6.3.4 查询注册表 175 6.3.5 枚举子项 178 6.3.6 枚举子键 180 6.3.7 删除子项 182 6.3.8 其他 183 6.4 小结 185 第7章 派遣函数 186 本章重点介绍了驱动程序中的处理IRP请求的派遣函数。所有对设备的操作最终将转化为IRP请求,这些IRP请求会被传送到派遣函数处理。 7.1 IRP与派遣函数 186 7.1.1 IRP 186 7.1.2 IRP类型 188 7.1.3 对派遣函数的简单处理 188 7.1.4 通过设备链接打开设备 190 7.1.5 编写一个更通用的派遣函数 191 7.1.6 跟踪IRP的利器IRPTrace 193 7.2 缓冲区方式读写操作 196 7.2.1 缓冲区设备 196 7.2.2 缓冲区设备读写 197 7.2.3 缓冲区设备模拟文件读写 200 7.3 直接方式读写操作 203 7.3.1 直接读取设备 204 7.3.2 直接读取设备的读写 205 7.4 其他方式读写操作 207 7.4.1 其他方式设备 207 7.4.2 其他方式读写 208 7.5 IO设备控制操作 209 7.5.1 DeviceIoControl与驱动交互 209 7.5.2 缓冲内存模式IOCTL 210 7.5.3 直接内存模式IOCTL 212 7.5.4 其他内存模式IOCTL 214 7.6 小结 216 第2篇 进阶篇 第8章 驱动程序的同步处理 218 本章介绍了驱动程序中常用的同步处理办法,并且将内核模式下的同步处理方法和用户模式下的同步处理方法做了比较。另外,本章还介绍了中断请求级、自旋锁等同步处理机制。 8.1 基本概念 218 8.1.1 问题的引出 218 8.1.2 同步与异步 219 8.2 中断请求级 219 8.2.1 中断请求(IRQ)与可编程中断控制器(PIC) 220 8.2.2 高级可编程控制器(APIC) 221 8.2.3 中断请求级(IRQL) 221 8.2.4 线程调度与线程优先级 222 8.2.5 IRQL的变化 223 8.2.6 IRQL与内存分页 223 8.2.7 控制IRQL提升与降低 224 8.3 自旋锁 224 8.3.1 原理 224 8.3.2 使用方法 225 8.4 用户模式下的同步对象 225 8.4.1 用户模式的等待 226 8.4.2 用户模式开启多线程 226 8.4.3 用户模式的事件 227 8.4.4 用户模式的信号灯 229 8.4.5 用户模式的互斥体 230 8.4.6 等待线程完成 232 8.5 内核模式下的同步对象 232 8.5.1 内核模式下的等待 232 8.5.2 内核模式下开启多线程 234 8.5.3 内核模式下的事件对象 236 8.5.4 驱动程序与应用程序交互事件对象 237 8.5.5 驱动程序与驱动程序交互事件对象 239 8.5.6 内核模式下的信号灯 240 8.5.7 内核模式下的互斥体 241 8.5.8 快速互斥体 243 8.6 其他同步方法 244 8.6.1 使用自旋锁进行同步 245 8.6.2 使用互锁操作进行同步 247 8.7 小结 249 第9章 IRP的同步 250 本章详细地介绍了IRP的同步处理方法和异步处理方法。另外,本章还介绍了StartIO例程、中断服务例程、DPC服务例程。 9.1 应用程序对设备的同步异步操作 250 9.1.1 同步操作与异步操作原理 250 9.1.2 同步操作设备 252 9.1.3 异步操作设备(方式一) 253 9.1.4 异步操作设备(方式二) 254 9.2 IRP的同步完成与异步完成 256 9.2.1 IRP的同步完成 256 9.2.2 IRP的异步完成 257 9.2.3 取消IRP 262 9.3 StartIO例程 264 9.3.1 并行执行与串行执行 264 9.3.2 StartIO例程 265 9.3.3 示例 267 9.4 自定义的StartIO 270 9.4.1 多个串行化队列 270 9.4.2 示例 271 9.5 中断服务例程 273 9.5.1 中断操作的必要性 273 9.5.2 中断优先级 274 9.5.3 中断服务例程(ISR) 274 9.6 DPC例程 275 9.6.1 延迟过程调用例程(DPC) 275 9.6.2 DpcForISR 275 9.7 小结 276 第10章 定时器 277 本章总结了在内核模式下的四种等待方法,读者可以利用这些方法灵活地用在自己的驱动程序中。最后本章还介绍了如何对IRP的超时情况进行处理。 10.1 定时器实现方式一 277 10.1.1 I/O定时器 277 10.1.2 示例代码 278 10.2 定时器实现方式二 280 10.2.1 DPC定时器 280 10.2.2 示例代码 282 10.3 等待 284 10.3.1 第一种方法:使用KeWaitForSingleObject 284 10.3.2 第二种方法:使用KeDelayExecutionThread 285 10.3.3 第三种方法:使用KeStallExecutionProcessor 285 10.3.4 第四种方法:使用定时器 286 10.4 时间相关的其他内核函数 286 10.4.1 时间相关函数 286 10.4.2 示例代码 288 10.5 IRP的超时处理 289 10.5.1 原理 289 10.5.2 示例代码 289 10.6 小结 291 第 11章 驱动程序调用驱动程序 292 本章主要介绍了如何在驱动程序中调用其他驱动程序。比较简单的方法是将被调用的驱动程序以文件的方式操作。比较高级的方法是构造各种IRP,并将这些IRP传送到被调用的驱动程序中。 11.1 以文件句柄形式调用其他驱动程序 292 11.1.1 准备一个标准驱动 292 11.1.2 获得设备句柄 294 11.1.3 同步调用 295 11.1.4 异步调用方法一 297 11.1.5 异步调用方法二 299 11.1.6 通过符号链接打开设备 301 11.2 通过设备指针调用其他驱动程序 303 11.2.1 用IoGetDeviceObjectPointer获得设备指针 304 11.2.2 创建IRP传递给驱动的派遣函数 305 11.2.3 用IoBuildSynchronousFsdRequest创建IRP 306 11.2.4 用IoBuildAsynchronousFsdRequest创建IRP 308 11.2.5 用IoAllocateIrp创建IRP 311 11.3 其他方法获得设备指针 314 11.3.1 用ObReferenceObjectByName获得设备指针 314 11.3.2 剖析IoGetDeviceObjectPointer 317 11.4 小结 318 第12章 分层驱动程序 319 本章主要介绍了分层驱动的概念。分层驱动可以将功能复杂的驱动程序分解为多个功能简单的驱动程序。多个分层的驱动程序形成一个设备堆栈,IRP请求首先发送到设备堆栈的顶层,然后依次穿越每层的设备堆栈,最终完成IRP请求。 12.1 分层驱动程序概念 319 12.1.1 分层驱动程序的概念 319 12.1.2 设备堆栈与挂载 321 12.1.3 I/O堆栈 322 12.1.4 向下转发IRP 323 12.1.5 挂载设备对象示例 324 12.1.6 转发IRP示例 325 12.1.7 分析 326 12.1.8 遍历设备栈 327 12.2 完成例程 330 12.2.1 完成例程概念 330 12.2.2 传播Pending位 332 12.2.3 完成例程返回STATUS_SUCCESS 333 12.2.4 完成例程返回STATUS_MORE_PROCESSING_REQUIRED 334 12.3 将IRP分解成多个IRP 336 12.3.1 原理 336 12.3.2 准备底层驱动 337 12.3.3 读派遣函数 338 12.3.4 完成例程 341 12.3.5 分析 342 12.4 WDM驱动程序架构 344 12.4.1 WDM与分层驱动程序 344 12.4.2 WDM的加载方式 345 12.4.3 功能设备对象 346 12.4.4 物理设备对象 346 12.4.5 物理设备对象与即插即用 348 12.5 小结 349 第13章 让设备实现即插即用 350 本章首先介绍即插即用的概念和驱动程序支持即插即用功能的必要性。另外,本章还介绍如何利用WDM驱动程序开发框架设计支持即插即用功能的驱动程序。 13.1 即插即用概念 350 13.1.1 历史原因 350 13.1.2 即插即用的目标 351 13.1.3 Windows中即插即用相关组件 351 13.1.4 遗留驱动程序 352 13.2 即插即用IRP 352 13.2.1 即插即用IRP的功能代码 353 13.2.2 处理即插即用IRP的派遣函数 353 13.3 通过设备接口寻找设备 356 13.3.1 设备接口 356 13.3.2 WDM驱动中设置接口 357 13.3.3 应用程序寻找接口 359 13.3.4 查看接口设备 360 13.4 启动和停止设备 361 13.4.1 为一个实际硬件安装HelloWDM 362 13.4.2 启动设备 364 13.4.3 转发并等待 366 13.4.4 获得设备相关资源 367 13.4.5 枚举设备资源 368 13.4.6 停止设备 372 13.5 即插即用的状态转换 373 13.5.1 状态转换图 373 13.5.2 IRP_MN_QUERY_STOP_DEVICE 374 13.5.3 IRP_MN_QUERY_REMOVE_DEVICE 374 13.6 其他即插即用IRP 375 13.6.1 IRP_MN_FILTER_RESOURCE_REQUIREMENTS 375 13.6.2 IRP_MN_QUERY_CAPABILITIES 376 13.7 小结 377 第14章 电源管理 378 本章主要介绍了如何在WDM驱动程序中进行电源处理。电源处理主要是处理好电源状态和设备状态。 14.1 WDM电源管理模型 378 14.1.1 概述 378 14.1.2 热插拔 378 14.1.3 电源状态 379 14.1.4 设备状态 379 14.1.5 状态转换 380 14.2 处理IRP_MJ_POWER 381 14.3 处理IRP_MN_QUERY_CAPABILITIES 381 14.3.1 DEVICE_CAPABILITIES 381 14.3.2 一个试验 382 14.4 小结 384 第3篇 实用篇 第15章 I/O端口操作 386 本章总结了多种I/O 端口操作的方法。这些方法本质上是一样的,都是将端口输入输出的汇编指令运行在内核模式中。 15.1 概述 386 15.1.1 从DOS说起 386 15.1.2 汇编实现 387 15.1.3 DDK实现 389 15.2 工具软件WinIO 390 15.2.1 WinIO简介 390 15.2.2 使用方法 390 15.3 端口操作实现方法一 391 15.3.1 驱动端程序 391 15.3.2 应用程序端程序 393 15.4 端口操作实现方法二 394 15.4.1 驱动端程序 394 15.4.2 应用程序端程序 396 15.5 端口操作实现方法三 397 15.5.1 驱动端程序 397 15.5.2 应用程序端程序 398 15.6 端口操作实现方法四 399 15.6.1 原理 399 15.6.2 驱动端程序 400 15.6.3 应用程序端程序 401 15.7 驱动PC喇叭 402 15.7.1 可编程定时器 402 15.7.2 PC喇叭 403 15.7.3 操作代码 404 15.8 操作并口设备 405 15.8.1 并口设备简介 405 15.8.2 并口寄存器 406 15.8.3 并口设备操作 408 15.9 小结 410 第16章 PCI设备驱动 411 本章主要介绍PCI设备的驱动开发。首先介绍了PCI总线协议。作为驱动程序员,开发PCI驱动程序首先要了解PCI配置空间。根据读取PCI配置空间,可以得到PCI设备的所有资源。另外,本章还总结了四种获取PCI配置空间的方法。 16.1 PCI总线协议 411 16.1.1 PCI总线简介 411 16.1.2 PCI配置空间简介 412 16.2 访问PCI配置空间方法一 414 16.2.1 两个重要寄存器 414 16.2.2 示例 415 16.3 访问PCI配置空间方法二 417 16.3.1 DDK函数读取配置空间 417 16.3.2 示例 418 16.4 访问PCI配置空间方法三 419 16.4.1 通过即插即用IRP获得PCI配置空间 420 16.4.2 示例 420 16.5 访问PCI配置空间方法四 421 16.5.1 创建IRP_MN_READ_CONFIG 422 16.5.2 示例 422 16.6 PCI设备驱动开发示例 423 16.6.1 开发步骤 424 16.6.2 中断操作 424 16.6.3 操作设备物理内存 425 16.6.4 示例 426 16.7 小结 429 第17章 USB设备驱动 430 本章首先介绍了USB总线协议的基本框架,其中包括USB总线的拓扑结构,USB通信的流程,还有USB的四种传输模式。另外,本章介绍了如何编写USB总线设备的驱动程序。 17.1 USB总线协议 430 17.1.1 USB设备简介 430 17.1.2 USB连接拓扑结构 431 17.1.3 USB通信的流程 433 17.1.4 USB四种传输模式 435 17.2 Windows下的USB驱动 438 17.2.1 观察USB设备的工具 438 17.2.2 USB设备请求 440 17.2.3 设备描述符 440 17.2.4 配置描述符 442 17.2.5 接口描述符 443 17.2.6 端点描述符 443 17.3 USB驱动开发实例 444 17.3.1 功能驱动与物理总线驱动 444 17.3.2 构造USB请求包 445 17.3.3 发送USB请求包 446 17.3.4 USB设备初始化 447 17.3.5 USB设备的插拔 447 17.3.6 USB设备的读写 448 17.4 小结 450 第18章 SDIO设备驱动 451 本章首先介绍了SDIO协议,讲述了SD内存卡和SDIO卡的兼容问题。然后介绍了 SDIO协议中的发送命令、回应命令、传送数据等相关协议。随后,本章又介绍了Windows中,DDK提供的对SDIO卡设备的支持。然后介绍了如何利用总线驱动,使SDIO设备初始化,接收中断,发送和接收数据等操作。 18.1 SDIO协议 451 18.1.1 SD内存卡概念 451 18.1.2 SDIO卡概念 452 18.1.3 SDIO总线 452 18.1.4 SDIO令牌 453 18.1.5 SDIO令牌格式 455 18.1.6 SDIO的寄存器 456 18.1.7 CMD52命令 458 18.1.8 CMD53命令 459 18.2 SDIO卡驱动开发框架 459 18.2.1 SDIO Host Controller驱动 459 18.2.2 SDIO卡的初始化 460 18.2.3 中断回调函数 461 18.2.4 获得和设置属性 462 18.2.5 CMD52 464 18.2.6 CMD53 465 18.3 SDIO开发实例 467 18.4 小结 467 第19章 虚拟串口设备驱动 469 本章介绍了串口开发的框架模型,在串口的AddDevice例程中需要暴露出一个串口的符号连接,另外在相应的注册表中需要进行设置。在串口与应用程序的通信中,主要是一组DDK定义的IO控制码,这些IO控制码负责由应用程序向驱动发出请求。 19.1 串口简介 469 19.2 DDK串口开发框架 470 19.2.1 串口驱动的入口函数 470 19.2.2 应用程序与串口驱动的通信 473 19.2.3 写的实现 475 19.2.4 读的实现 477 19.3 小结 478 第20章 摄像头设备驱动程序 479 本章主要介绍了微软提供的摄像头驱动框架。在该框架中,微软提供了类驱动和小驱动的概念。对于驱动程序员的任务就是编写小驱动程序。 20.1 WDM摄像头驱动框架 479 20.1.1 类驱动与小驱动 479 20.1.2 摄像头的类驱动与小驱动 480 20.1.3 编写小驱动程序 480 20.1.4 小驱动的流控制 481 20.2 虚拟摄像头开发实例 482 20.2.1 编译和安装 482 20.2.2 虚拟摄像头入口函数 484 20.2.3 对STREAM_REQUEST_BLOCK的处理函数 485 20.2.4 打开视频流 487 20.2.5 对视频流的读取 488 20.3 小结 489 第4篇 提高篇 第21章 再论IRP 492 本章将相关IRP的操作做了进一步的总结。首先是转发IRP,归纳了几种不同的方式。其次总结了创建IRP的几种不同方法。创建IRP总的来说分为创建同步IRP和创建异步 IRP。对于创建同步IRP,操作比较简单,I/O管理器会负责回收IRP的相关内存,但是使用不够灵活。对于创建异步IRP,操作比较复杂,程序员需要自己负责对IRP及相关内存回收,但使用十分灵活。 21.1 转发IRP 492 21.1.1 直接转发 492 21.1.2 转发并且等待 492 21.1.3 转发并且设置完成例程 494 21.1.4 暂时挂起当前IRP 495 21.1.5 不转发IRP 496 21.2 创建IRP 496 21.2.1 IoBuildDeviceIoControlRequest 497 21.2.2 创建有超时的IOCTL IRP 498 21.2.3 用IoBuildSynchronousFsdRequest创建IRP 499 21.2.4 关于IoBuildAsynchronousFsdRequest 501 21.2.5 关于IoAllocateIrp 502 21.3 小结 505 第22章 过滤驱动程序 506 本章主要介绍WDM和NT式过滤驱动程序开发。过滤驱动程序开发十分灵活,可以修改已有驱动程序的功能,也可以对数据进行过滤加密。另外,利用过滤驱动程序还能编写出很多具有相当功能强大的程序来。 22.1 文件过滤驱动程序 506 22.1.1 过滤驱动程序概念 506 22.1.2 过滤驱动程序的入口函数 506 22.1.3 U盘过滤驱动程序 509 22.1.4 过滤驱动程序加载方法一 510 22.1.5 过滤驱动程序加载方法二 511 22.1.6 过滤驱动程序的AddDevice例程 512 22.1.7 磁盘命令过滤 513 22.2 NT式过滤驱动程序 516 22.2.1 NT式过滤驱动程序 516 22.2.2 NT过滤驱动的入口函数 517 22.2.3 挂载过滤驱动 517 22.2.4 过滤键盘读操作 518 22.3 小结 520 第23章 高级调试技巧 521 本章将介绍一些Windows开发驱动的高级调试技巧。有一些高级驱动程序调试技巧,可以帮助程序员找出驱动程序中的Bug。另外,利用一些第三方工具软件,也可以帮助程序员找到驱动程序中的漏洞,从而提高开发效率。 23.1 一般性调试技巧 521 23.1.1 打印调试信息 521 23.1.2 存储dump信息 521 23.1.3 使用WinDbg调试工具 522 23.2 高级内核调试技巧 524 23.2.1 安装VMWare 525 23.2.2 在虚拟机上加载驱动程序 526 23.2.3 VMWare和WinDbg联合调试驱动程序 527 23.3 用IRPTrace调试驱动程序 528 23.4 小结 530

2010-06-12

vc++数字图像识别技术经典案例 光盘源码

第1章 数字图像与图像处理 1 1.1 数字图像相关概念 1 1.1.1 数字图像 1 1.1.2 图像处理 2 1.1.3  图像识别 2 1.1.4 图像理解 3 1.2 图像的获取、显示与表示 3 1.2.1 图像的获取 3 1.2.2 图像显示 4 1.2.3 图像表示 4 1.3 数字图像处理系统的基本组成结构 9 第2章 相关的图像处理技术 10 2.1  图像分割技术 10 2.1.1 阈值与图像分割 10 2.1.2 梯度与图像分割 11 2.1.3 边界提取与轮廓跟踪 11 2.1.4  Hough变换 12 2.1.5 区域增长 12 2.2 图像复原 12 2.2.1 数学模型 12 2.2.2 维纳滤波(Wiener Filtering) 13 2.3 图像的纹理分析技术 13 2.3.1 空间灰度层共现矩阵 14 2.3.2  纹理能量测量 16 2.3.3 纹理的结构分析方法和纹理梯度 18 2.3.4 纹理识别示例——云类自动识别 19 2.4 图像的形态学处理技术 20 2.4.1 基本概念 21 2.4.2 开运算和闭运算 22 2.4.3 击中、击不中、变换 (HMT-Hit Miss Transform) 23 2.4.4 边界和骨架(Boundary and Skeleton) 23 第 3章 指纹识别系统(上) 24 3.1 指纹识别的历史 24 3.2 指纹识别研究的现状 24 3.3 指纹识别系统的构成  25 3.3.1 指纹的录入 26 3.3.2 指纹图像增强 28 3.3.3 指纹识别的基本原理 29 3.3.4  系统问题 30 3.3.5 系统性能评估 31 3.3.6 一套指纹识别算法库的构成 32 3.4 指纹的粗分类与匹配 89 3.5  基于Matlab的指纹识别系统 92 3.5.1 主界面程序 93 3.5.2 指纹中心计算程序 115 3.5.3 计算有效区域 117 3.5.4 二维Gabor变换 118 3.5.5 归一化扇区 119 3.5.6 读取图像 120 3.5.7  旋转角度计算 121 第4章 指纹识别系统(下) 123 4.1 指纹图像的预处理 123 4.1.1 预处理概述  123 4.1.2 指纹质量评估 124 4.1.3 指纹图像分割 129 4.1.4 指纹图像增强 134 4.1.5  指纹图像二值化 135 4.1.6 指纹图像细化 136 4.1.7 相关预处理算法代码 139 4.2 指纹特征提取  177 4.2.1 指纹特征的表述 177 4.2.2 局部细节特征提取 180 4.2.3 特征提取算法代码 186 4.3  基于点模式的细节匹配 194 4.4 指纹识别的实际应用案例 204 4.4.1 指纹门禁系统 204 4.4.2 指纹考勤系统 205 4.5 指纹处理算法库测试程序 206 4.6 本章小结 218 第5章 数字水印技术 219 5.1  基本概念 219 5.1.1 水印技术的基本要求 219 5.1.2 数字水印算法基本思路 219 5.1.3 一些关键问题 220 5.2 水印应用现状分析 220 5.2.1 现有水印算法不适应版权保护 220 5.2.2 盲检测算法 222 5.2.3  盲检测算法的公证 222 5.2.4 数字水印系统的一般组成 223 5.3 基于DCT域的数字水印方案 223 5.3.1  离散余弦变换 223 5.3.2 Torus自同构映射 224 5.3.3 人眼视觉频率响应及DCT变换系数的选取 224 5.3.4  水印算法 226 5.4 基于扩频通信的水印算法 228 5.4.1 扩频通信原理 228 5.4.2 扩频通信在数字水印中的利用 229 5.4.3 加载强度的讨论 233 5.4.4 水印加载算法的实现 237 5.5 一个基于DCT域的实例  240 5.5.1 一些算法代码 240 5.5.2 加载水印 271 5.5.3 提取水印 275 5.5.4 水印算法评价 281 5.6 本章小结 294 第6章 条形码技术 295 6.1 常用的条码编码规则 295 6.1.1  条码的一般组成 295 6.1.2 条码的种类 296 6.1.3 EAN-13码的构造 296 6.2 一个简单的条形码打印系统 298 6.3 一维条形码的识别 312 6.3.1 硬件识别系统 312 6.3.2 预处理过程 312 6.3.3  译码过程 314 6.4 一维条形码识别系统实例 315 6.4.1 DIB.H位图存取头文件 316 6.4.2  DIB.CPP位图存取源程序 317 6.4.3 BARRECOG.H条码识别头文件 322 6.4.4 BARRECOG.CPP条码识别源程序 323 6.5 二维条形码介绍 337 6.5.1 PDF417符号的结构 338 6.5.2 簇及符号字符定义 338 6.5.3 层编码 339 6.5.4 模式结构 339 6.5.5 起始符和终止符 340 6.5.6  空白区 340 6.5.7 错误监测与纠正 340 6.6 二维条形码打印程序 340 6.6.1 PDF417LIB.H二维条形码库头文件 340 6.6.2 PDF417LIBIMP.H数据定义 342 6.6.3 PDF417LIB.C函数实现文件  353 6.6.4 PDF417.C主程序 377 6.7 本章小结 378 第7章 手势识别系统 379 7.1  立体测量 379 7.1.1 立体匹配法 379 7.1.2 立体视觉的原理 379 7.1.3 用立体视觉进行距离测量  381 7.2 用一台摄像头进行距离测量 382 7.2.1 摄像头正对前方 382 7.2.2 摄像头倾斜 383 7.2.3  一台摄像头测量距离 385 7.3 假想演奏系统的构成 387 7.3.1 系统概述 387 7.3.2 肤色提取 388 7.3.3  右手位置检测 390 7.3.4 摄像机的距离测量 391 7.3.5 音阶范围与音量范围 391 7.3.6 声音的表现方法 392 7.3.7 系统整体构成 393 7.4 程序代码 393 7.5 本章小结 432 第8章 印鉴鉴定系统 433 8.1 伪印鉴的制作及人工防伪技术 433 8.1.1 常用伪造印鉴的方法及其特征 433 8.1.2 真假印鉴印文的检验 435 8.2 印鉴图像的分离 435 8.2.1 封闭凸多边形图像提取的算法提出 436 8.2.2 封闭凸多边形图像的提取方法——种子扩散浮置实体算法 436 8.3 基于矩不变量的印鉴识别 439 8.4 基于Fourier描述符的印鉴识别方法 441 8.4.1 提取字符包络线 441 8.4.2 字符包络线的Fourier描述 442 8.5 基于边缘和模板匹配的印鉴识别 443 8.6 部分算法代码 446 8.6.1 背景去除(利用颜色) 446 8.6.2 基于矩不变量的代码 450 8.7 本章小结 455 第9章 光学字符识别技术(上) 456 9.1 概述 456 9.1.1 文字识别系统的构成 456 9.1.2 文字识别技术 457 9.1.3 印刷体汉字识别 459 9.1.4 存在的问题 461 9.2  预处理技术 461 9.2.1 二值化 462 9.2.2 版面分析 463 9.2.3 倾斜度校正 464 9.2.4  版面切分 467 9.2.5 行、字分割 467 9.2.6 细化和规范化 469 9.2.7 预处理算法源代码示例 470 9.3  特征提取 537 9.3.1 概述 538 9.3.2 边缘跟踪 538 9.3.3 笔画的分类 540 9.3.4 笔画识别前的噪声处理 541 9.3.5 笔画方向码合并处理及笔画识别 542 9.3.6 笔画间特征量的定义及识别 543 9.3.7  整字匹配的距离准则 544 9.3.8 一些统计特征 545 第10章 光学字符识别技术(下) 549 10.1 分类与识别 549 10.1.1 判别器的选择 549 10.1.2 决策树的基本概念 550 10.1.3 决策树设计 552 10.1.4  节点分类器设计 555 10.1.5 多方案组合识别器 558 10.1.6 代码示例 560 10.2 后处理 623 10.3  OCR程序示例 639 10.4 本章小结 640

2010-06-12

骑车牌照的自动识别系统

这是我在公司开发的骑车牌照的自动识别的源码,大家放心下吧,我自己修改过了,和公司没有关系,不会有涉密问题的

2010-05-20

winfrom的换肤资料源码,很全面啊

这个是我公司的winform的换肤源码,想到的全面,大家放心的使用吧,希望能够对各位需要换肤的人有帮助

2010-05-20

局(广)域网多人聊天程序,支持文件传输-MiniChat

MiniChat是本人编写的一款多人聊天程序,主要用于局域网或广域网内用户间的实时通讯。用户界面美观友好,支持公共聊天、私人聊天、聊天记录、文件传输、任务栏实时通知等功能。该程序采用C/S三层架构,多线程Socket通信方式。Cient端采用TcpClient类连接服务器,使用NetworkStream传送数据。Server端采用TcpListener监听本地端口,并使用多线程为每个用户建立独立 Socket连接并与client通信。 主要功能: 1、 公共聊天。用户的聊天内容可被聊天室内所有用户看见。 2、 私人聊天。用户的聊天内容只对聊天双方可见。 3、 聊天记录。服务器端采用SQL Server2005保留所有用户的聊天记录。客户端采用access保存用户本人的公共、私人聊天记录。 4、 任务栏实时通知。服务器端采用最小化到系统托盘等技术,在有用户上下线,用户收发信息时均有类似于MSN的消息提示。客户端最小化时有相关信息时也有类似于MSN的消息提示。 5、 其他辅助功能例如字体颜色等。 6、 文件传输。用户可以采用P2P模式进行文件传输。

2010-05-13

标准c语言socket编程详细资料

详细介绍用c语言开发网络程序,很好的socket编程资料

2010-05-13

ipmsg,局域网传输文件,飞鸽

ipmsg,局域网传输文件,飞鸽传书,适合初学者学习啊,源码是c啊

2010-04-23

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除