Ⅰ 简述Windows编程的特点
一个Windows应用程序具有以下的特性: 事件驱动程序设计、消息循环与输入、图形输出、用户界面对象、资源共享、动态链接库等等。
1、事件驱动的程序设计
传统的MS-DOS程序主要采用顺序的、关联的、过程驱动的程序设计方法。一个程序是一系列预先定义好的操作序列的组合,它具有一定的开头、中间过程和结束。程序直接控制程序事件和过程的顺序。这样的程序设计方法是面向程序而不是面向用户的,交互性差,用户界面不够友好,因为它强迫用户按照某种不可更改的模式进行工作。
控制台应用程序与Windows应用程序的根本区别在于前者是通过调用系统函数来获得用户输入的,而Windows程序则是通过系统发送消息来处理用户输入的。
2、消息循环与输入
事件驱动围绕着消息的产生与处理展开,一条消息是关于发生的事件的消息。事件驱动是靠消息循环机制来实现的。输入消息:包括键盘和鼠标的输入。这一类消息首先放在系统消息队列中,然后由Windows将它们送入应用程序消息队列中,由应用程序来处理消息。
3、图形输出
Windows程序不仅在输入上与DOS程序不同,而且在程序输出上也与DOS有着很大不同,主要表现为:DOS程序独占整个显示屏幕,其他程序在后台等待。而Windows的每一个应用程序对屏幕的一部分进行处理。
DOS程序可以直接往屏幕上输出,而Windows是一个多窗口的操作系统,由操作系统来统一管理屏幕输出;每个窗口要输出内容时,必须首先向操作系统发出请求(GDI请求),由操作系统完成实际的屏幕输出工作。
(1)windows安全性编程扩展阅读
Windows多任务的操作系统,各个应用程序共享系统提供的资源,常见的资源包括:设备上下文,画刷,画笔,字体,对话框控制,对话框,图标,定时器,插入符号,通信端口,电话线等。
Windows要求应用程序必须以一种能允许它共享Windows资源的方式进行设计,它的基本模式是这样的:向Windows系统请求资源;使用该资源;释放该资源给Windows以供别的程序使用。
在Windows应用程序设计中,CPU也是一种非常重要的资源,因此应用程序应当避免长时间的占用CPU资源(如一个特别长的循环);如果确实需要这样做,也应当采取一些措施,以让程序能够响应用户的输入。主存也是一个共享资源,要防止同时运行的多个应用程序因协调不好而耗尽内存资源。
Ⅱ 学习PLC编程 用什么参考书好
看看这里有么 下下来看看 如果需要再买
F:\学习考研\电子图书\电子宝库
├—215例题解析自动控制原理_0
├—21世纪信息与通信技术教程 多媒体通信_0
├—21世纪信息与通信技术教程 数字电路与FPGA_0
├—21世纪信息与通信技术教程 数字语音:语音编码实用教程_0
├—21世纪信息与通信技术教程 现代通信基础与技术_0
├—21世纪大学计算机应用系列教材 JAVA与面向对象程序设计导论_0
├—21世纪大学计算机系列教材 C语言大学实用教程_0
├—21世纪网络平台大学计算机系列教材 离散数学_0
├—21世纪网络平台大学计算机系列教材 网络平台大学计算机信息技术├—21世纪高等学校电子信息类专业规划教材 多媒体课件制作实训教程_0
├—21世纪高等学校电子信息类专业规划教材 网络安全技术基础_0
├—21世纪高等学校电子信息类专业规划教材 网络安全概论_0
├—21世纪高等学校电子信息类专业规划教材 网络系统集成技术_0
├—21世纪高等学校电子信息类专业规划教材 计算机信息管理基础_0
├—21世纪高等学校电子信息类专业规划教材 计算机硬件技术基础_0
├—21世纪高等学校电子信息类教材 数字微波通信系统_0
├—21世纪高等学校规划教材 高等数学_0
├—21世纪高等学校计算机基础教育系列教材 数据库应用与程序设计实验指导_0
├—21世纪高等学校计算机基础教育系列教材 数据库应用与程序设计教程_0
├—21世纪高等学校计算机科学与技术教材 面向对象C++程序设计_0
├—21世纪高等院校教材 电磁场与电磁波_0
├—21世纪高等院校教材 遥感数字图像处理_0
├—21世纪高等院校数字艺术设计系列教材 数字动画设计艺术_0
├—21世纪高等院校电气信息类系列教材 单片机原理与应用_0
├—21世纪高等院校规划教材 DSP原理及应用_0
├—21世纪高等院校规划教材 数据通信与计算机网络_0
├—21世纪高等院校计算机教材系列 C语言程序设计教程_0
├—21世纪高等院校计算机科学与工程系列教材 微型计算机原理与接口技术_0
├—21世纪高等院校计算机科学与技术规划教材 Java程序设计简明教程_0
├—21世纪高等院校计算机科学与技术规划教材 微机原理与接口技术 (80386-Pe_0
├—21世纪高等院校计算机系列教材 Java程序设计基础_0
├—21世纪高等院校计算机系列教材 Java程序设计实验与实训_0
├—21世纪高等院校计算机系列教材 管理信息系统_0
├—21世纪高等院校计算机系列教材 编程逻辑与结构化程序设计 (第三版)_0
├—21世纪高职高专信息技术教材 数据库原理及应用教程_0
├—21高等学校电子信息类专业规划教材 计算机引论_0
├—301例题解析电工电路 (中册)_0
├—372例题解析电工电路 (上册)_0
├—488例题解析电工电路 (下册)_0
├—8051单片机彻底研究 基础篇_0
├—8051单片机彻底研究 实习篇_0
├—8051单片机数据传输接口扩展技术与应用实例_0
├—Adobe 数字艺术中心 InDesign CS标准教材_0
├—Advanced C++ (中文版)_0
├—APSL参数化有限元分析技术及其应用实例_0
├—ASP+SQL Server网络应用系统开发与实例_0
├—ASP信息系统设计与开发实列_0
├—Authorware 6_5多媒体制作基础教程_0
├—BHDL实例剖析_0
├—BIOS、注册表与硬盘终极解析_0
├—Blackfin系列DSP原理与系统设计_0
├—C#Builder编程起跑_0
├—C#大学教程_0
├—C#应用程序开发标准教程_0
├—C#程序设计培训教程_0
├—C#面向对象程序设计:台版_0
├—C++ Templates中文版_0
├—C++Builder 6实用编程100例_0
├—C++同构化对象程序设计原理_0
├—C++多范型设计_0
├—C++大学自学教程(第7版)_0
├—C++捷径教程 第3版_0
├—C++程序设计_0
├—C++程序设计实验指导与实训_0
├—C++编程惯用法——高级程序员常用方法和技巧_0
├—C++网络编程 卷2 基于ACE和框架的系统化复用_0
├—C++面向对象程序设计 (第四版)_0
├—CAXA电子图板XP实用教程_0
├—CCNA学习指南 (中文版) (640-801)_0
├—CDMA 无线通信原理_0
├—CPLD_FPGA可编程逻辑器件应用与开发_0
├—C_0
├—C语言与MATLAB接口:编程与实例_0
├—C语言程序设计2_0
├—C语言程序设计3_0
├—C语言程序设计_0
├—C语言程序设计导学_0
├—C语言精彩编程百例_0
├—Delphi 7_0程序设计教程_0
├—Delphi 7应用教程_0
├—Delphi 7数据库开发教程_0
├—Delphi 7数据库高级教程_0
├—Delphi 7程序设计_0
├—Delphi 7课程设计案例精编_0
├—Delphi 程序设计技能百练_0
├—DELPHI 经典游戏程序设计40例_0
├—Delphi串口通信技术与工程实践_0
├—Delphi数据库开发实例解析_0
├—Delphi数据库编程_0
├—Delphi数据库高级实例导航_0
├—Delphi源代码分析_0
├—Delphi程序设计_0
├—Delphi程序设计实训_0
├—Delphi程序设计教程_0
├—Delphi精要2_0
├—Delphi精要_0
├—DSP 通信工程技术应用_0
├—DSP信号处理技术应用_0
├—DSP技术及应用_0
├—DSP控制系统的设计与实现_0
├—DSP算法设计与系统方案_0
├—DSP系统设计与实践_0
├—DSP芯片的原理与开发应用 (第3版)_0
├—DSP集成开发环境:CCS及DSP_BIOS的原理与应用_0
├—DWDM技术原理与应用_0
├—EDA与数字系统设计_0
├—EDA工程实践_0
├—Enterprise Java Bean程序设计实例详解_0
├—Excel 2003中文版入门与提高_0
├—IBM PC 80X86汇编语言程序设计_0
├—IBM信息集成技术原理及应用_0
├—ICSA密码学指南_0
├—IEEE 802_11无线局域网_0
├—IEEE1394接口技术_0
├—Intel微处理器结构、编程与接口 (第六版)_0
├—Intel汇编语言程序设计 第四版_0
├—IP宽带通信网络技术_0
├—J2EE 应用与实践技巧:JAVA设计模式、自动化与性能_0
├—J2EE网络编程标准教程_0
├—J2METM技术手册_0
├—J2ME开发大全_0
├—Java 2学习指南——Sun Certified Programmer_0
├—Java 2实用教程_0
├—Java 2程序设计技能百练_0
├—Java 2简明教程_0
├—Java Web服务开发_0
├—Java 国际认证(SCJP)典型试题1000例_0
├—Java 模式_0
├—Java 游戏编程_0
├—Java 课程设计案例精编_0
├—Java与CORBA客户 服务器编程 第二版_0
├—Java信息系统设计与开发实例_0
├—Java基础教程_0
├—Java实用系统开发指南_0
├—Java实用编程100例_0
├—Java并发编程:设计原则与模式_0
├—Java手机_PDA程序设计入门_0
├—Java数值方法_0
├—Java数据对象_0
├—Java数据库高级教程_0
├—Java数据结构和算法 (第二版)_0
├—Java极限编程_0
├—JAVA程序设计2_0
├—Java程序设计3_0
├—Java程序设计_0
├—Java程序设计基础 (第3版)_0
├—Java程序设计实战训练_0
├—Java程序设计技巧与开发实例_0
├—Java程序设计教程_0
├—Java程序设计高级主题_0
├—Java算法 (第3版,第1卷)_0
├—Java编程原理:面向工程和科学人员_0
├—JAVA缺陷_0
├—Java网络编程基础_0
├—Java语言程序设计_0
├—Java语言程序设计教程_0
├—Java课程设计_0
├—Java软件开发2_0
├—Java软件开发_0
├—Java项目开发实践_0
├—Java高级实用编程_0
├—Jave 2认证考试学习指南 (第四版) (英文版)_0
├—JBuilder 9_0入门与提高_0
├—JBuilder 9_0程序设计——Java程序员成功之路_0
├—JBuilder精髓_0
├—JSP信息系统设计与开发实例_0
├—MATLAB 6_5及其在信号处理中的应用_0
├—MATLAB 6_5图形图像处理_0
├—MATLAB 7_0实用指南 (上册)_0
├—MATLAB 7_0实用指南 (下册)_0
├—MATLAB M语言高级编程_0
├—Matlab 小波分析工具箱原理与应用_0
├—MATLAB与外部程序接口_0
├—MATLAB仿真技术与应用教程_0
├—MATLAB仿真技术主导实例应用教程_0
├—MATLAB信息工程工具箱技术手册_0
├—MATLAB及其在电路与控制理论中的应用_0
├—Matlab图像处理与应用_0
├—MATLAB图形图像处理应用教程_0
├—MATLAB工具箱应用_0
├—MATLAB应用数学工具箱技术手册_0
├—Matlab接口技术与应用_0
├—MATLAB控制工程工具箱技术手册_0
├—MATLAB数学计算范例教程_0
├—MATLAB有限元分析与应用_0
├—MATLAB电力系统设计与分析_0
├—MATLAB程序设计_0
├—MATLAB符号运算及其应用_0
├—MATLAB自动控制原理习题精解_0
├—MCS-51单片机原理及应用实例_0
├—MCS-51系列单片机原理与接口技术_0
├—MCS-51系列单片机系统及其应用 (第二版)_0
├—Microsoft SQL Server 2000宝典_0
├—OP放大电路设计_0
├—Oracle9i数据库原理与应用教程_0
├—OrCAD电路设计_0
├—PCB电磁兼容技术——设计实践_0
├—PC控制及接口程序设计实例_0
├—PIC 单片机原理与接口技术_0
├—PowerBuilder9_0数据窗口技术_0
├—PowerPCB高速电子电路设计与应用_0
├—Protel 2004电路原理图及PCB设计_0
├—Protel 99 SE印制电路板设计教程_0
├—Protel 99 SE原理图与PCB及仿真_0
├—Protel DXP 电路原理图设计指南_0
├—Protel DXP印制电路板设计指南_0
├—Protel DXP电路原理图与PCB设计_0
├—Protel DXP电路原理图与电路板设计教程_0
├—Protel DXP电路图及电路板设计实用教程_0
├—Protel DXP电路设计与仿真_0
├—Protel DXP电路设计与制版实用教程_0
├—Protel DXP电路设计与应用2_0
├—Protel DXP电路设计入门与应用_0
├—Protel DXP电路设计入门与进阶_0
├—Protel DXP电路设计制版入门与提高_0
├—Protel DXP电路设计标准教程_0
├—PSpice 电路优化程序设计_0
├—PSpice 电路设计实用教程_0
├—PSpice电路原理与实现_0
├—PSpice电路编辑程序设计_0
├—PWM控制与驱动器使用指南及应用电路:单端控制与驱动器部分_0
├—Red Hat Linux安全与优化_0
├—Tanner Pro集成电路设计与布局实战指导_0
├—TMS320C500系列DSP系统设计与开发实例_0
├—TMS320C54x DSP应用程序设计教程_0
├—TMS320LF_LC24系列DSP的CPU与外设_0
├—UML及其建模工具的使用_0
├—UML宝典_0
├—UML工具箱_0
├—USB 接口技术_0
├—Verilog HDL数字设计与综合 (第二版)_0
├—Verilog HDL程序设计教程_0
├—Verlog HDL 综合实用教程_0
├—VHDL与微机接口设计_0
├—VHDL数字系统设计 (第二版)_0
├—VHDL电路设计实用教程_0
├—VHDL电路设计技术_0
├—Visual Basic 6_0实践指导_0
├—Visual Basic 6_0应用编程150例_0
├—Visual Basic 程序设计教程_0
├—Visual Basic6_0数据库开发技术与工程实践_0
├—Visual Basic_NET程序设计实训教程_0
├—Visual Basic程序设计2_0
├—Visual Basic程序设计_0
├—Visual C#_NET程序设计经典_0
├—Visual C++ 6_0应用编程150例_0
├—Visual C++ 6_0数据库开发技术与工程实践_0
├—Visual C++6_0数字图像编码_0
├—Visual C++_MATLAB图像处理与识别实用案例精选_0
├—Visual C++_NET数字图像处理技术与应用_0
├—Visual C++_NET程序设计入门_0
├—Visual C++_NET编程实例_0
├—Visual C++_Turbo C串口通信编程实践_0
├—Visual C++数字图像实用工程案例精选_0
├—Visual C++网络通信程序开发指南_0
├—Visual C++网络通信编程实用案例精选_0
├—Visual FoxPro上机实践指导教程_0
├—Visual FoxPro程序设计教程_0
├—Visual Prolog编程、环境及接口_0
├—VisualC++_NET MFC类库应用详解_0
├—WCDMA技术与系统设计:第三代移动通信系统的无线接入_0
├—WCDMA无线通信技术及演化_0
├—WCDMA移动通信技术_0
├—Win32汇编语言实用教程_0
├—Windows安全性编程_0
├—XML编程实例教程_0
├—·工程数学·复变函数_0
├—《Visual Basic程序设计教程》实验与习题_0
├—《中华人民共和国电子签名法》释义及实用指南_0
├—《汇编语言与微机原理》学习指导与训练_0
├—《集成电子技术基础教程》教学指导书_0
├—三星电子绝处逢生的强悍之道_0
├—三级信息管理技术_0
├—三级信息管理技术:新大纲_0
├—专用集成电路_0
├—世界着名大学核心教材 计算机类 C语言程序设计_0
├—中国半导体行业协会集成电路设计分会推荐教材 集成电路设计与九天EDA工具应用_0
├—中国电子信息产品出口研究报告_2003_0
├—中文 Visual Basic 6_0实例教程_0
├—中文CorelDRAW 11_12时尚创作200例_0
├—中文Visual Basic实例全解教程_0
├—企业商务电子化导论_0
├—企业电子商务_0
├—使用UML进行面向对象的项目管理_0
├—例题解析电子电路:数字篇_0
├—例题解析电子电路:模拟篇_0
├—信号、系统与数字信号处理_0
├—信号、系统与数字信号处理学习指导与实践_0
├—信号与系统典型题解2_0
├—信号与系统典型题解_0
├—信号与系统分析2_0
├—信号与系统分析_0
├—信号与系统学习与考研指导2_0
├—信号与系统学习与考研指导_0
├—信号与系统学习指导2_0
├—信号与系统学习指导3_0
├—信号与系统学习指导4_0
├—信号与系统学习指导_0
├—信号与系统教程2_0
├—信号与系统教程_0
├—信号与系统课程辅导_0
├—信号与线性系统分析 (第二版)_0
├—信号分析与处理_0
├—信号处理中的数学变换和估计方法_0
├—信号处理原理与应用_0
├—信号处理滤波器设计_0
├—信息与传播_0
├—信息与计算科学专业系列教材 数字信号处理_0
├—信息与通信工程研究生系列教材 信息论与编码_0
├—信息与通信工程研究生系列教材 图论及其应用_0
├—信息光学理论与应用_0
├—信息化与中国经济跨越式发展_0
├—信息化工程原理与应用_0
├—信息安全原理与应用 (第三版)_0
├—信息安全教学基础_0
├—信息安全策略与机制_0
├—信息技术与电子政务 (通用版)——信息时代的电子政府_0
├—信息技术与课程整合的理论与方法_0
├—信息技术及其应用_0
├—信息技术基础_0
├—信息技术基础教程_0
├—信息技术基础教程实验及上机指导_0
├—信息技术法 (第二版)_0
├—信息技术的商业价值_0
├—信息方法概论_0
├—信息时代的企业人力资源管理_0
├—信息时代的管理信息系统 (原书第四版)_0
├—信息检索与利用_0
├—信息理论与编码2_0
├—信息理论与编码_0
├—信息竞争论_0
├—信息管理与信息系统专业规划教材 管理信息系统_0
├—信息管理论_0
├—信息系统分析与设计教程_0
├—信息系统升级与整合:策略·方法·技巧_0
├—信息系统安全管理_0
├—信息系统集成技术 (第二版)_0
├—信息系统项目管理导论_0
├—信息经济学_0
├—信息经济学与信息管理_0
├—信息经济学引论:激励与合约 (第二版)_0
├—信息经济论_0
├—信息网络传播权研究_0
├—信息网络经济的管理与调控:美国“新经济周期”研究_0
├—信息论与编码理论 第二版_0
├—信息资源管理_0
├—信息隐藏与数字水印_0
├—信息隐藏技术实验教程_0
├—先进PID控制MATLAB仿真 (第二版)_0
├—光信息网络_0
├—光信息通信技术实用手册_0
├—光纤通信_0
├—光纤通信原理与技术_0
├—光纤通信技术_0
├—光纤通信系统原理与实验教程_0
├—光纤通信系统及其应用_0
├—光纤通信:通信用光纤、器件和系统_0
├—全光光纤通信网_0
├—全国信息技术人才培养工程指定培训教材 平面设计基础_0
├—全国大学生电子设计竞赛获奖作品汇编:第一届-第五届_0
├—全国计算机技术与软件专业技术资格(水平)考试·程序员分册_0
├—全国计算机技术与软件专业技术资格(水平)考试·网络工程师分册_0
├—全国计算机技术与软件专业技术资格(水平)考试·网络管理员分册_0
├—全国计算机技术与软件专业技术资格(水平)考试·软件设计师分册_0
├—全国计算机等级考试三级教程 信息管理技术_0
├—全国计算机等级考试三级模拟题精选与详解 信息管理技术_0
├—全国计算机等级考试三级模拟题解 信息管理技术_0
├—全国计算机等级考试三级辅导 信息管理技术_0
├—全国计算机等级考试二级教程:基础知识和Java语言程序设计_0
├—全国计算机等级考试二级模拟题解:基础知识和Java语言程序设计_0
├—全国计算机等级考试应试辅导 QBASIC语言(二级)难点、错点解析_0
├—全国计算机等级考试教程 信息管理技术 (三级) (2004修订版)_0
├—全国计算机等级考试考点分析、题解与模拟 (三级信息管理技术)_0
├—全国计算机等级考试(三级信息管理技术)一册通_0
├—公司信息战略与管理:教程与案例 (原书第6版)_0
├—内容产业论:数字新媒体的核心_0
├—制造业信息化与信息编码_0
├—动态网页设计与电子商务_0
├—北京市高等教育精品教材立项项目 实用电子电路基础_0
├—半导体分立元器件集成电路装调_0
├—单片开关电源:应用电路·电磁兼容·PCB布线_0
├—单片微型计算机原理、应用及接口技术 (第2版)_0
├—单片机典型模块设计实例导航_0
├—单片机原理与实用技术_0
├—单片机原理与应用2_0
├—单片机原理与应用_0
├—单片机原理及其接口技术 (第二版)_0
├—单片机原理及其接口技术 (第二版)_0
├—单片机原理及其接口技术学习辅导与实践教程_0
├—单片机原理及应用_0
├—单片机原理及接口技术2_0
├—单片机原理及接口技术3_0
├—单片机原理及接口技术_0
├—单片机实用技术_0
├—单片机嵌入式应用的线开发方法_0
├—单片机应用技术_0
├—单片机应用系统设计与产品开发_0
├—单片机控制工程实践技术_0
├—卫星通信系统_0
├—四维时空逻辑_0
├—国外电子与通信教材系列 信号与系统 (第二版)_0
├—国外经典教材 C++数据结构与程序设计_0
├—国外经典计算机科学教材 逻辑与计算机设计基础 (第三版)_0
├—国外着名高等院校信息科学与技术优秀教材 C算法 第一卷,基础、数据结构、排序和搜_0
├—国外着名高等院校信息科学与技术优秀教材 密码学概论 (中文版)_0
├—国外着名高等院校信息科学与技术优秀教材 面向对象编程 C++和Java 比较教程_0
├—国外计算机科学教材系列 现代编译器的Java实现 (第二版)_0
├—国外计算机科学经典教材 JAVA 基础教程:从问题分析到程序设计_0
├—国外计算机科学经典教材 数据结构 Java 语言描述 (第二版)_0
├—国外高校电子信息类优秀教材 (翻译版) 压缩视频通信_0
├—国家信息化技术培训指定教材 硬件维护工程师标准培训教程_0
├—国防科工委十五规划教材 网络与信息安全_0
├—国际电子商务培训认证专用教材 国际电子商务程序设计教程_0
├—国际电子商务概论_0
├—图像信息压缩_0
├—图像数字记录_0
├—图像编码基础和小波压缩技术——原理、算法和标准_0
├—图表细说电子元器件_0
├—图解晶体管实用电路_0
├—图解电工电子基础_0
├—基于Java的计算机图形学_0
├—基于MCS-51单片机的嵌入式系统设计_0
├—声光信号处理及应用_0
├—复变函数与拉普拉斯变换习题指导_0
├—复变函数与积分变换学习指导_0
├—复变函数论与运算微积_0
├—大型软件体系结构:使用UML实践指南_0
├—大学信息技术基础教程_0
├—大学生素质教育系列教材 复变函数学习指导_0
├—大学英语六级词汇背诵词典
├—大学计算机信息技术学习指导_0
├—大学计算机基础教育规划教材 Visual Basic NET程序设计_0
├—大容量数据存储系统编码_0
├—天津市高等学校计算机基础课程规划教材 C程序设计教程 (第二版)_0
├—奇思异想编程序 Delphi篇_0
├—学习指导与题典:离散数学_0
├—学习指导与题典:计算机网络与通信_0
├—完整的数字设计_0
├—实用化工计算机模拟:MATLAB在化学工程中的应用_0
├—实用射频技术_0
├—实用电动机控制电路200例_0
├—实用电工与电子技术问答_0
├—实用电工电路图集_0
├—实用电路基础_0
├—实用软件测试过程_0
├—实验电子技术_0
├—宽带移动通信中的先进信道编码技术_0
├—宽带通信_0
├—宽带通信网与组网技术_0
├—小波分析信息传输基础_0
├—小灵通(PAS)个人通信接入系统 (修订版)_0
├—嵌入式微处理器模拟接口设计 (第二版)_0
├—嵌入式软件测试_0
├—工程电磁场数值计算_0
├—差错控制编码_0
├—常用充电器电路与应用_0
├—应用程序设计编制(Delphi 平台)Delphi 6_0_7_0职业技能培训教程_0
├—建筑物电子信息系统防雷技术设计手册_0
├—建筑电气常用设备模块化控制电路图集_0
├—建筑通信与网络技术_0
├—开发专家之Sun ONE J2EE技术参考手册_0
├—彩色图像工程_0
├—彩色电视机单元电路应用与维修手册_0
├—微型计算机原理与接口技术3_0
├—微型计算机原理与接口技术_0
├—微型计算机硬件技术教程-原理·汇编·接口及体系结构_0
├—微处理机原理与接口技术_0
├—微控制器原理及接口技术实验教程_0
├—微机原理与接口技术2_0
├—微机原理与接口技术4_0
├—微机原理与接口技术_0
├—微机原理与接口技术综合实验教程_0
├—微机原理及接口技术实验教程_0
├—微机原理及软硬件接口技术_0
├—微机接口技术500问_0
├—微波固态电路_0
├—微波工程基础_0
├—微波技术2_0
├—微波技术_0
├—微观信息管理_0
├—快速开发信息管理系统:新平台、新方法_0
├—怎样用电脑设计电子线路_0
├—怎样看楼宇常用设备电气控制电路图_0
├—振荡电路的设计与应用_0
├—捉虫历险记——常见C++Bug大围剿_0
├—控制工程与信号处理_0
├—控制系统MATLAB计算机及仿真 (第二版)_0
├—操作系统原理Linux篇_0
├—数字万用表检测方法与应用 (世纪新版)_0
├—数字与逻辑电路
├—数字专用集成电路的设计与验证_0
├—数字信号处理2_0
├—数字信号处理3_0
├—数字信号处理_0
├—数字信号处理典型题解及自测试题_0
├—数字信号处理原理及实现_0
├—数字信号处理实践方法 (第2版)_0
├—数字信号处理教程:MATLAB释义与实现_0
├—数字信号处理:系统分析与设计_0
├—数字信号微处理器的原理与开发 (第二版)_0
├—数字制造_0
├—数字化战场_0
├—数字化测量技术与应用_0
├—数字化网络化制造技术_0
├—数字图像处理及应用_0
├—数字城堡_0
├—数字城市建设的理论与策略_0
├—数字媒体:作品观摩与点评_0
├—数字广播电视技术文选_0
├—数字微波通信_0
├—数字技术与着作权:观念、规范与实例_0
├—数字时代的影像制作_0
├—数字时代的电视图像_0
├—数字显示测量仪表_0
├—数字电子技术_0
├—数字电子技术基础 (第四版) 全程辅导_0
├—数字电子技术基础 (第四版) 导教·导学·导考_0
├—数字电子技术基础_0
├—数字电视原理_0
├—数字电视广告_0
├—数字电路与逻辑设计教程2_0
├—数字电路与逻辑设计教程_0
├—数字电路设计完全手册_0
├—数字的美术——CorelDRAW Illustrator艺术插画设计经典案例剖析_0
├—数字签名原理及技术_0
├—数字系统设计:从数字技术基础到ASIC设计的解析_0
├—数字系统逻辑设计
├—数字系统逻辑设计3_0
├—数字系统逻辑设计_0
├—数字视频解决方案:创建、编辑与共享数字视频_0
├—数字设计 (第三版)_0
├—数字通信技术_0
├—数字逻辑
├—数字逻辑2_0
├—数字逻辑_0
├—数字逻辑与VHDL设计_0
├—数字逻辑基础
├—数字逻辑基础_0
├—数字逻辑技术基础_0
├—数字逻辑电路_0
├—数字逻辑电路的ASIC设计2_0
├—数字逻辑电路的ASIC设计_0
├—数字逻辑电路设计
├—数字逻辑电路设计2_0
├—数字逻辑电路设计_0
├—数字逻辑电路设计与实现_0
├—数字逻辑的图形方法2_0
├—数字逻辑的图形方法_0
├—数字集成电路与嵌入式内核系统可测试性设计_0
├—数字集成电路:电路、系统与设计 (第二版)_0
├—数字集群 移动通信系统 (第二版)_0
├—数学物理方法_0
├—数学物理方程及其近似方法_0
├—数据库系统工程师教程_0
├—数据库系统工程师考试大纲_0
├—数据结构(C语言版)导教·导学·导?br>
Ⅲ 如何编写Windows安全检查脚本
可以用windows批处理写一个安全检查脚本,代码如下,仅供参考:
@echooff
echo"Windows系统安全检查脚本"
ifexistd:检查结果(
echo
)else(
mdd:检查结果
)
ifnotexistd:检查结果mdd:检查结果
echo"系统信息检查"
systeminfo歼氏虚>d:检查结果系统信息.log
echo"端口信息检查"
netstat-anb>d:检查结果端口信息.log
echo"进程检查"
tasklist&netstart>d:检查结果进程检查.log
echo"进程路径检查"
wmicprocessgetname,executablepath,processid>d:检查结果进程路径检查.log
echo"默认共享检查"
netshare>d:检查结果默认共享检查.log
echo"用户信息检查"
netuser&netlocalgroupadministrators>d:检查结果用户信息检查.log
echo"隐藏用户检查"
echoHKEY_LOCAL_[12
19]>d: egg.ini&echoHKEY_LOCAL_MACHINESAMSAM[1219]
>>d: egg.ini®inid: egg.ini®query
HKEY_LOCAL_
>d:检查结果隐藏用户检查.log&deld: egg.ini
echo"核纳注册表启动项检查"
regquery
HKEY_LOCAL_&
regquery
HKEY_CURRENT_
>d:检查结果注册表启动项检查氏燃.log
echo"安全策略检查"
secedit/export/cfgLocalGroupPolicy&typeLocalGroupPolicy>d:检查结果安全策略检查.log
echo"IE浏览器记录检查"
regqueryHKEY_CURRENT_USERSoftwareMicrosoftInternet""ExplorerTypedURLs>d:检查结果IE浏览器记录检查.log
echo"添加和卸载记录"
regqueryHKEY_LOCAL_/s/vDisPlayname>d:检查结果添加和卸载记录.log
echo"异常状态检查"
regqueryHKEY_LOCAL_""NTCurrentVersionSvcHost
/s/vnetsvcs®queryHKEY_LOCAL_"
"NTCurrentVersionSvcHost/s/vLocalService>d:检查结果异常状态检查.log
echo"通信检查"
netstat-a>d:检查结果通信检查.log
echo"CMD记录"
regqueryHKEY_CURRENT_>d:检查结果CMD记录.log
echo"文件记录检查"
regqueryHKEY_CURRENT_>d:检查结果文件记录检查.log
echo"文件记录检查2"
regquery
HKEY_CURRENT_*
/v*>d:检查结果文件记录检查2.log
echo"程序记录"
regqueryHKEY_CURRENT_RU>d:检查结果程序记录.log
echo"程序记录"
regqueryHKEY_CURRENT_RU>d:检查结果程序记录.log
echo"C盘捆绑文件检查"
echo"正常可执行文件返回结果为1,不可执行文件结果为0,返回结果为2的,为存在捆绑内容文件。"
echo"请点击回车继续!"
set/pvar=find/c/i"thisprogram"c:*c:Inetpub*C:UsersAdministratorDesktop*c: emp*>d:检查结果捆绑文件检查.log
%var%
if%ERRORLEVEL%==0gotoyes
gotono
:yes
exit
:no
find/c/i"thisprogram"c:*c:wmpub*c:Inetpub*C:桌面*>d:检查结果捆绑文件检查.log
Ⅳ 看过Windows内核安全编程的朋友请进
这样应该不行吧 你得把IRP完成搭如了才能返回啊 直接返回成功银枝基却没有设置IRP的诸多参数啊 比如状态 操作字锋谨节数等
我也是初学者 看的也是这本书 可以讨论讨论
Ⅳ Windows内核安全编程从入门到实践的目 录
目录
第一部分基础篇
第1章前置要求与环境搭建2
1.1驱动编程的语言2
1.2开发环境搭建2
1.2.1VisualStudio2005/2008的安装
与配置2
1.2.2WDK的安装与配置4
1.2.3VisualDDK的安装与配置5
1.3常用工具介绍6
第2章内核编程基础知识7
2.1Windows主要系统组件7
2.1.1对象管理器7
2.1.2内存管理器7
2.1.3进程和线程管理器7
2.1.4I/O管理器8
2.1.5PnP管理器8
2.1.6电源管理器8
2.1.7配置管理器9
2.1.8安全引用监视器9
2.2常见名词解释9
2.2.1内核名词9
2.2.2文件名词13
2.2.3网络名词13
2.3常见内核数据结构15
2.3.1驱动框架常见数据结构15
2.3.2进程与线程数据结构17
2.3.3存储系统数据结构23
2.3.4网络数据结构25
2.3.5其他一些常见的数据结构29
第3章基本编程方法37
3.1简单的NT式驱动模型37
3.1.1驱动模型的选择37
3.1.2NT式驱动程序基本结构37
3.1.3编译驱动程序40
3.1.4加载驱动及查看输出信息40
3.2应用层与内核的通信方法43
3.2.1访问数据的I/O方式43
3.2.2读写驱动程序45
3.2.3发送I/O控制码49
3.2.4内存共享54
3.3同步技术56
3.3.1事件对象56
3.3.2信号灯对象57
3.3.3互斥体对象游铅58
3.3.4定时器对象61
3.3.5自旋锁64
3.3.6回调对象64
3.3.7原子操作70
3.4IRP处理70
3.4.1简单的IRP流动图71
3.4.2IRP的创建72
3.4.3IRP的发送75
3.4.4为IRP设置完成函数76
3.4.5IRP的完成78
3.4.6多种典型的IRP处理示例85
3.5字符串操作89
3.5.1STRING、ANSI_STRING和
UNICODE_STRING89
3.5.2初始庆磨液化和销毁90
3.5.3复制和添加91
3.5.4比较92
3.5.5转换93
3.6内存管理94
3.6.1分配系统空间誉物内存94
3.6.2运行时库管理函数95
3.6.3使用内核栈96
3.6.4使用Lookaside快速链表97
3.6.5访问用户空间内存101
3.6.6内存区对象和视图101
3.6.7MDL的使用103
3.7注册表编程105
3.7.1注册表对象管理函数105
3.7.2注册表运行时库函数112
3.7.3注册表调用过滤116
3.8文件编程120
3.8.1打开文件句柄120
3.8.2执行相关文件操作121
3.9其他127
3.9.1本地系统服务函数的Nt
和Zw版本127
3.9.2NTSTATUS返回值128
3.9.3双向链表的使用128
3.9.4异常处理129
第二部分提升篇
第4章进程132
4.1进程监控实现原理132
4.2Windows7系统下的进程
监控软件实例132
4.2.1内核模块程序实现132
4.2.2用户模式程序实现149
4.3安装与使用164
第5章磁盘165
5.1存储驱动体系结构165
5.2设备树示例166
5.3diskperf磁盘过滤驱动167
5.3.1diskperf介绍167
5.3.2diskperf的过滤框架168
5.3.3diskperf的PnP支持172
5.3.4diskperf的硬盘访问监控
和性能数据捕获187
5.3.5diskperf的电源支持194
5.3.6diskperf的安装与测试194
第6章键盘197
6.1原理跟踪197
6.1.1自下而上的过程197
6.1.2自上而下的过程205
6.2几种常见的键盘记录行为208
6.2.1应用层的消息钩子208
6.2.2键盘过滤驱动208
6.2.3键盘类驱动的分发
函数Hook214
6.2.4DKOM技术214
6.2.5其他方法215
6.3反键盘记录216
6.3.1实现原理216
6.3.2反键盘记录示例216
第7章文件242
7.1原理跟踪242
7.1.1Windows存储栈242
7.1.2不涉及缓存的数据存储243
7.1.3涉及缓存的数据存储253
7.2简单的文件隐藏254
7.2.1文件隐藏的原理254
7.2.2文件隐藏的实现255
7.3scanner扫描程序264
7.3.1过滤管理器与微过滤
驱动概念265
7.3.2使用过滤管理模型的优势266
7.3.3微过滤驱动的加载和卸载267
7.3.4用户模式和内核模式的交互269
7.3.5scanner介绍287
7.3.6scanner驱动程序288
7.3.7scanner应用层程序303
7.3.8scanner的安装与使用309
第8章网络310
8.1原理跟踪310
8.2NDIS协议驱动317
8.2.1DriverEntry317
8.2.2绑定320
8.2.3数据发送327
8.2.4数据接收334
8.2.5数据流动总结348
8.3OPEN_BLOCK的展示349
Ⅵ 寒江独钓:Windows内核安全编程的图书目录
第1章 内核上机指导 1
Windows内核编程的动手有点麻烦,并不是仅仅安装一个独立的软件(比如VC)之后就可以安然地开始编写代码,然后运行了。需要下载开发包、配置开发环境、准备调试工具,可能还需要一些小工具协同工作。这一步拦住了不少的初学者。本章以详细图文攻略,来引导读者完成这一麻烦的步骤。
1.1 下载和使用WDK 2
1.1.1 下载安装WDK 2
1.1.2 编写第一个C文件 3
1.1.3 编译一个工程 5
1.2 安装与运行 6
1.2.1 下载一个安装工具 6
1.2.2 运行与查看输出信息 7
1.2.3 在虚拟机中运行 9
1.3 调试内核模块 9
1.3.1 下载和安装WinDbg 9
1.3.2 设置Windows XP调试执行 10
1.3.3 设置Vista调试执行 11
1.3.4 设置VMWare的管道虚拟串口 11
1.3.5 设置Windows内核符号表 13
1.3.6 实战调试first 14
练习题 16
第2章 内核编程环境及其特殊性 17
编写过驱动程序的读者可能会很熟悉这一切,但是对只从事过应用程序的读者而言,要理解内核编程环境的特殊性,就很需要一些功夫和悟性了。在应用程序中,多线程的情况已经带来了一定理解的困难;而内核代码呢?几乎无时无刻不运行在多线程之下。它从哪里开始?从哪里结束?它在什么进程内运行?这些问题一言难尽。
2.1 内核编程的环境 18
2.1.1 隔离的应用程序 18
2.1.2 共享的内核空间 19
2.1.3 无处不在的内核模块 20
2.2 数据类型 21
2.2.1 基本数据类型 21
2.2.2 返回状态 22
2.2.3 字符串 23
2.3 重要的数据结构 23
2.3.1 驱动对象 23
2.3.2 设备对象 25
2.3.3 请求 26
2.4 函数调用 28
2.4.1 查阅帮助 28
2.4.2 帮助中有的几类函数 30
2.4.3 帮助中没有的函数 32
2.5 Windows的驱动开发模型 32
2.6 WDK编程中的特殊点 33
2.6.1 内核编程的主要调用源 33
2.6.2 函数的多线程安全性 34
2.6.3 代码的中断级 36
2.6.4 WDK中出现的特殊代码 37
练习题 38
第3章 串口的过滤 40
在安全软件的开发中,串口驱动的应用并不常见。但是本书以串口驱动作为第一个介绍的实例。为何?仅仅是因为串口简单。从简单的例子入手,可以为读者带来稍许轻松的感受。
3.1 过滤的概念 41
3.1.1 设备绑定的内核API之一 41
3.1.2 设备绑定的内核API之二 43
3.1.3 生成过滤设备并绑定 43
3.1.4 从名字获得设备对象 45
3.1.5 绑定所有串口 46
3.2 获得实际数据 47
3.2.1 请求的区分 47
3.2.2 请求的结局 48
3.2.3 写请求的数据 49
3.3 完整的代码 50
3.3.1 完整的分发函数 50
3.3.2 如何动态卸载 52
3.3.3 完整的代码 53
本章的示例代码 53
练习题 54
第4章 键盘的过滤 56
键盘是很重要的输入设备!这是因为我们用键盘录入信息、用键盘输入密码,甚至用键盘编程,也用键盘着书立说。对于黑客来说,使用庞大的计算机资源去破解那些坚不可摧的加密算法,哪如偷偷地记下用户用键盘输入的密钥更加简单呢?本章专注于键盘的保护。
4.1 技术原理 57
4.1.1 预备知识 57
4.1.2 Windows中从击键到内核 58
4.1.3 键盘硬件原理 60
4.2 键盘过滤的框架 61
4.2.1 找到所有的键盘设备 61
4.2.2 应用设备扩展 64
4.2.3 键盘过滤模块的DriverEntry 65
4.2.4 键盘过滤模块的动态卸载 66
4.3 键盘过滤的请求处理 68
4.3.1 通常的处理 68
4.3.2 PNP的处理 69
4.3.3 读的处理 70
4.3.4 读完成的处理 71
4.4 从请求中打印出按键信息 72
4.4.1 从缓冲区中获得KEYBOARD_INPUT_DATA 72
4.4.2 从KEYBOARD_INPUT_DATA中得到键 73
4.4.3 从MakeCode到实际字符 74
4.5 Hook分发函数 75
4.5.1 获得类驱动对象 76
4.5.2 修改类驱动的分发函数指针 77
4.5.3 类驱动之下的端口驱动 78
4.5.4 端口驱动和类驱动之间的协作机制 79
4.5.5 找到关键的回调函数的条件 80
4.5.6 定义常数和数据结构 80
4.5.7 打开两种键盘端口驱动寻找设备 81
4.5.8 搜索在KbdClass类驱动中的地址 83
4.6 Hook键盘中断反过滤 86
4.6.1 中断:IRQ和INT 86
4.6.2 如何修改IDT 87
4.6.3 替换IDT中的跳转地址 88
4.6.4 QQ的PS/2反过滤措施 90
4.7 利用IOAPIC重定位中断处理函数 90
4.7.1 什么是IOAPIC 90
4.7.2 如何访问IOAPIC 91
4.7.3 编程修改IOAPIC重定位表 92
4.7.4 插入新的中断处理 93
4.7.5 驱动入口和卸载的实现 95
4.8 直接用端口操作键盘 96
4.8.1 读取键盘数据和命令端口 96
4.8.2 p2cUserFilter的最终实现 97
本章的示例代码 98
练习题 99
第5章 磁盘的虚拟 100
CPU是计算机的核心,但是它不保存信息。如果它被窃,我们可以简单地购买一个新的。但是如果装满了机密信息的硬盘被窃了,那可就不是买一个新的就能弥补得了的。本章介绍硬盘内核魔术:虚拟硬盘。虚拟硬盘可以不被盗窃者利用吗?良好的设计可以做到这一点。
5.1 虚拟的磁盘 101
5.2 一个具体的例子 101
5.3 入口函数 102
5.3.1 入口函数的定义 102
5.3.2 Ramdisk驱动的入口函数 103
5.4 EvtDriverDeviceAdd函数 104
5.4.1 EvtDriverDeviceAdd的定义 104
5.4.2 局部变量的声明 105
5.4.3 磁盘设备的创建 105
5.4.4 如何处理发往设备的请求 107
5.4.5 用户配置的初始化 108
5.4.6 链接给应用程序 110
5.4.7 小结 111
5.5 FAT12/16磁盘卷初始化 111
5.5.1 磁盘卷结构简介 111
5.5.2 Ramdisk对磁盘的初始化 113
5.6 驱动中的请求处理 119
5.6.1 请求的处理 119
5.6.2 读/写请求 120
5.6.3 DeviceIoControl请求 122
5.7 Ramdisk的编译和安装 124
5.7.1 编译 124
5.7.2 安装 125
5.7.3 对安装的深入探究 125
练习题 126
第6章 磁盘过滤 127
很多网吧的老板、公司的IT管理部门以及读者自己都很厌恶硬盘总是被病毒和木马搞得一团糟。一些简单的还原软件可以搞定这个问题:重启之后,对硬盘的修改都奇迹般地消失了。这是怎么实现的呢?本章告诉您答案。
6.1 磁盘过滤驱动的概念 128
6.1.1 设备过滤和类过滤 128
6.1.2 磁盘设备和磁盘卷设备过滤驱动 128
6.1.3 注册表和磁盘卷设备过滤驱动 129
6.2 具有还原功能的磁盘卷过滤驱动 129
6.2.1 简介 129
6.2.2 基本思想 130
6.3 驱动分析 130
6.3.1 DriverEntry函数 130
6.3.2 AddDevice函数 132
6.3.3 PnP请求的处理 136
6.3.4 Power请求的处理 140
6.3.5 DeviceIoControl请求的处理 140
6.3.6 bitmap的作用和分析 144
6.3.7 boot驱动完成回调函数和稀疏文件 150
6.3.8 读/写请求的处理 152
6.3.9 示例代码 160
6.3.10 练习题 161
第7章 文件系统的过滤与监控 162
硬盘是硬盘,而文件系统是文件系统,可是有的人总是把它们当做一回事。其实硬盘很简单,硬盘就是一个很简单的保存信息的盒子;而复杂的是文件系统,它很精妙地把简单的数据组织成复杂的文件。作为信息安全的专家,我们当然不能让文件系统脱离我们的控制之外。
7.1 文件系统的设备对象 163
7.1.1 控制设备与卷设备 163
7.1.2 生成自己的一个控制设备 165
7.2 文件系统的分发函数 166
7.2.1 普通的分发函数 166
7.2.2 文件过滤的快速IO分发函数 167
7.2.3 快速IO分发函数的一个实现 169
7.2.4 快速IO分发函数逐个简介 170
7.3 设备的绑定前期工作 172
7.3.1 动态地选择绑定函数 172
7.3.2 注册文件系统变动回调 173
7.3.3 文件系统变动回调的一个实现 175
7.3.4 文件系统识别器 176
7.4 文件系统控制设备的绑定 177
7.4.1 生成文件系统控制设备的过滤设备 177
7.4.2 绑定文件系统控制设备 178
7.4.3 利用文件系统控制请求 180
7.5 文件系统卷设备的绑定 183
7.5.1 从IRP中获得VPB指针 183
7.5.2 设置完成函数并等待IRP完成 184
7.5.3 卷挂载IRP完成后的工作 187
7.5.4 完成函数的相应实现 190
7.5.5 绑定卷的实现 191
7.6 读/写操作的过滤 193
7.6.1 设置一个读处理函数 193
7.6.2 设备对象的区分处理 194
7.6.3 解析读请求中的文件信息 195
7.6.4 读请求的完成 198
7.7 其他操作的过滤 202
7.7.1 文件对象的生存周期 202
7.7.2 文件的打开与关闭 203
7.7.3 文件的删除 205
7.8 路径过滤的实现 206
7.8.1 取得文件路径的3种情况 206
7.8.2 打开成功后获取路径 207
7.8.3 在其他时刻获得文件路径 209
7.8.4 在打开请求完成之前获得路径名 209
7.8.5 把短名转换为长名 211
7.9 把sfilter编译成静态库 212
7.9.1 如何方便地使用sfilter 212
7.9.2 初始化回调、卸载回调和绑定回调 213
7.9.3 绑定与回调 215
7.9.4 插入请求回调 216
7.9.5 如何利用sfilter.lib 218
本章的示例代码 221
练习题 221
第8章 文件系统透明加密 223
如何阻止企业的机密文件被主动泄密,但是又不用关闭网络、禁止U盘等手段重重束缚大家?很多迹象表明,文件系统透明加密是最优的选择。既然从前一章读者已经学会了控制文件系统,那么现在,该是我们摩拳擦掌,用它来保护我们的机密信息的时候了。
8.1 文件透明加密的应用 224
8.1.1 防止企业信息泄密 224
8.1.2 文件透明加密防止企业信息泄密 224
8.1.3 文件透明加密软件的例子 225
8.2 区分进程 226
8.2.1 机密进程与普通进程 226
8.2.2 找到进程名字的位置 227
8.2.3 得到当前进程的名字 228
8.3 内存映射与文件缓冲 229
8.3.1 记事本的内存映射文件 229
8.3.2 Windows的文件缓冲 230
8.3.3 文件缓冲:明文还是密文的选择 232
8.3.4 清除文件缓冲 233
8.4 加密标识 236
8.4.1 保存在文件外、文件头还是文件尾 236
8.4.2 隐藏文件头的大小 237
8.4.3 隐藏文件头的设置偏移 239
8.4.4 隐藏文件头的读/写偏移 240
8.5 文件加密表 241
8.5.1 何时进行加密操作 241
8.5.2 文件控制块与文件对象 242
8.5.3 文件加密表的数据结构与初始化 243
8.5.4 文件加密表的操作:查询 244
8.5.5 文件加密表的操作:添加 245
8.5.6 文件加密表的操作:删除 246
8.6 文件打开处理 248
8.6.1 直接发送IRP进行查询与设置操作 248
8.6.2 直接发送IRP进行读/写操作 250
8.6.3 文件的非重入打开 252
8.6.4 文件的打开预处理 255
8.7 读写加密/解密 260
8.7.1 在读取时进行解密 260
8.7.2 分配与释放MDL 261
8.7.3 写请求加密 262
8.8 crypt_file的组装 265
8.8.1 crypt_file的初始化 265
8.8.2 crypt_file的IRP预处理 266
8.8.3 crypt_file的IRP后处理 269
本章的示例代码 272
练习题 272
第9章 文件系统微过滤驱动 273
从来都不原地踏步的微软,早就准备好了下一代的文件系统过滤的框架、文档、代码例子。虽然本书的前两章的范例在Windows 7上都还可以正常运行,但是如果不学习一下最新的接口,读者一定会觉得不自在。但是读者可以放心,在前面学习的基础上,了解新的接口是易如反掌的。
9.1 文件系统微过滤驱动简介 274
9.1.1 文件系统微过滤驱动的由来 274
9.1.2 Minifilter的优点与不足 275
9.2 Minifilter的编程框架 275
9.2.1 微文件系统过滤的注册 276
9.2.2 微过滤器的数据结构 277
9.2.3 卸载回调函数 280
9.2.4 预操作回调函数 281
9.2.5 后操作回调函数 284
9.2.6 其他回调函数 285
9.3 Minifilter如何与应用程序通信 288
9.3.1 建立通信端口的方法 288
9.3.2 在用户态通过DLL使用通信端口的范例 290
9.4 Minifilter的安装与加载 292
9.4.1 安装Minifilter的INF文件 293
9.4.2 启动安装完成的Minifilter 294
本章的示例代码 295
练习题 295
第10章 网络传输层过滤 296
笔者常常使用防火墙,它们看上去真的很神奇。如果怀疑自己的机器上有见不得人的进程打开了网络端口盗走机密信息,防火墙将提醒您,虽然防火墙并不知道它是否是一个木马。这是怎么做到的?本章为您揭晓谜底。
10.1 TDI概要 297
10.1.1 为何选择TDI 297
10.1.2 从socket到Windows内核 297
10.1.3 TDI过滤的代码例子 299
10.2 TDI的过滤框架 299
10.2.1 绑定TDI的设备 299
10.2.2 唯一的分发函数 300
10.2.3 过滤框架的实现 302
10.2.4 主要过滤的请求类型 304
10.3 生成请求:获取地址 305
10.3.1 过滤生成请求 305
10.3.2 准备解析IP地址与端口 307
10.3.3 获取生成的IP地址和端口 308
10.3.4 连接终端的生成与相关信息的保存 310
10.4 控制请求 311
10.4.1 TDI_ASSOCIATE_ADDRESS的过滤 311
10.4.2 TDI_CONNECT的过滤 313
10.4.3 其他的次功能号 314
10.4.4 设置事件的过滤 316
10.4.5 TDI_EVENT_CONNECT类型的设置事件的过滤 318
10.4.6 直接获取发送函数的过滤 320
10.4.7 清理请求的过滤 322
10.5 本书例子tdifw.lib的应用 323
10.5.1 tdifw库的回调接口 323
10.5.2 tdifw库的使用例子 325
本章的示例代码 326
练习题 327
第11章 NDIS协议驱动 328
网络的连接只是外表而已,实际上,最终它们变成了一个个在网线上往返的网络包。高明的黑客是不会去用Socket来生成连接的。把黑暗的信息隐藏在单个的数据包里,你还可以发现它们吗?本章介绍的NDIS协议驱动,是Windows网络抓包工具的基础。
11.1 以太网包和网络驱动架构 329
11.1.1 以太网包和协议驱动 329
11.1.2 NDIS网络驱动 330
11.2 协议驱动的DriverEntry 331
11.2.1 生成控制设备 331
11.2.2 注册协议 333
11.3 协议与网卡的绑定 335
11.3.1 协议与网卡的绑定概念 335
11.3.2 绑定回调处理的实现 335
11.3.3 协议绑定网卡的API 338
11.3.4 解决绑定竞争问题 339
11.3.5 分配接收和发送的包池与缓冲池 340
11.3.6 OID请求的发送和请求完成回调 342
11.3.7 ndisprotCreateBinding的最终实现 345
11.4 绑定的解除 351
11.4.1 解除绑定使用的API 351
11.4.2 ndisprotShutdownBinding的实现 353
11.5 在用户态操作协议驱动 356
11.5.1 协议的收包与发包 356
11.5.2 在用户态编程打开设备 357
11.5.3 用DeviceIoControl发送控制请求 358
11.5.4 用WriteFile发送数据包 360
11.5.5 用ReadFile发送数据包 362
11.6 在内核态完成功能的实现 363
11.6.1 请求的分发与实现 363
11.6.2 等待设备绑定完成与指定设备名 364
11.6.3 指派设备的完成 365
11.6.4 处理读请求 368
11.6.5 处理写请求 370
11.7 协议驱动的接收回调 374
11.7.1 和接收包有关的回调函数 374
11.7.2 ReceiveHandler的实现 376
11.7.3 TransferDataCompleteHandler的实现 380
11.7.4 ReceivePacketHandler的实现 381
11.7.5 接收数据包的入队 383
11.7.6 接收数据包的出队和读请求的完成 385
本章的示例代码 388
练习题 389
第12章 NDIS小端口驱动 390
如果厌烦了漏洞百出的以太网,还有什么可以充当我的网络接口吗?当然,一切能通信的设备,皆有替代以太网的潜质。即使您不愿意修改无数通过TCP接口编程的应用程序,我们依然可以用其他通信设备来虚拟网卡。本章介绍小端口驱动来虚拟网卡的技术。
12.1 小端口驱动的应用与概述 391
12.1.1 小端口驱动的应用 391
12.1.2 小端口驱动的实例 392
12.1.3 小端口驱动的运作与编程概述 393
12.2 小端口驱动的初始化 393
12.2.1 小端口驱动的DriverEntry 393
12.2.2 小端口驱动的适配器结构 396
12.2.3 配置信息的读取 397
12.2.4 设置小端口适配器上下文 398
12.2.5 MPInitialize的实现 399
12.2.6 MPHalt的实现 402
12.3 打开ndisprot设备 403
12.3.1 I/O目标 403
12.3.2 给IO目标发送DeviceIoControl请求 404
12.3.3 打开ndisprot接口并完成配置设备 406
12.4 使用ndisprot发送包 409
12.4.1 小端口驱动的发包接口 409
12.4.2 发送控制块(TCB) 409
12.4.3 遍历包组并填写TCB 412
12.4.4 写请求的构建与发送 415
12.5 使用ndisprot接收包 417
12.5.1 提交数据包的内核API 417
12.5.2 从接收控制块(RCB)提交包 418
12.5.3 对ndisprot读请求的完成函数 420
12.5.4 读请求的发送 422
12.5.5 用于读包的WDF工作任务 424
12.5.6 ndisedge读工作任务的生成与入列 426
12.6 其他的特征回调函数的实现 428
12.6.1 包的归还 428
12.6.2 OID查询处理的直接完成 429
12.6.3 OID设置处理 432
本章的示例代码 433
练习题 434
第13章 NDIS中间层驱动 435
当我们不满足于抓包和发包,而试图控制本机上流入和流出的所有数据包的时候,NDIS中间层驱动是最终的选择。防火墙的功能在这里得到加强:我们不再满足于看到连接、端口、对方IP地址,而是要看到每一个数据包的原始结构。本章介绍NDIS中间层驱动。
13.1 NDIS中间层驱动概述 436
13.1.1 Windows网络架构总结 436
13.1.2 NDIS中间层驱动简介 437
13.1.3 NDIS中间层驱动的应用 438
13.1.4 NDIS包描述符结构深究 439
13.2 中间层驱动的入口与绑定 442
13.2.1 中间层驱动的入口函数 442
13.2.2 动态绑定NIC设备 443
13.2.3 小端口初始化(MpInitialize) 445
13.3 中间层驱动发送数据包 447
13.3.1 发送数据包原理 447
13.3.2 包描述符“重利用” 448
13.3.3 包描述符“重申请” 451
13.3.4 发送数据包的异步完成 453
13.4 中间层驱动接收数据包 455
13.4.1 接收数据包概述 455
13.4.2 用PtReceive接收数据包 456
13.4.3 用PtReceivePacket接收 461
13.4.4 对包进行过滤 463
13.5 中间层驱动程序查询和设置 466
13.5.1 查询请求的处理 466
13.5.2 设置请求的处理 468
13.6 NDIS句柄 470
13.6.1 不可见的结构指针 470
13.6.2 常见的NDIS句柄 471
13.6.3 NDIS句柄误用问题 473
13.6.4 一种解决方案 475
13.7 生成普通控制设备 476
13.7.1 在中间层驱动中添加普通设备 476
13.7.2 使用传统方法来生成控制设备 478
本章的示例代码 483
练习题 483
附录A 如何使用本书的源码光盘 485
Ⅶ Windows内核安全编程从入门到实践的内容简介
本书详细介绍了Windows平台下的内核安全编程知识。首先简单介绍了驱动编程的基本方法;然后衡樱详细介绍了Windows各个系统组件的工作原理,如文件系统、网络系统自上而下的执行流程。同时还介绍了各个组件涉及的安全问题,如文件隐藏、键盘记录等,并通过工程项目让读者从代码层级了解这些信息安全问题及解决方法;最后介绍了驱动编程本身的安全问题,如安全编码的注意事项和脆弱代码的检测手段。另外本书还介绍了简单的调试和逆向技术,帮助解决开发过程中遇到的技术难题。谈旁通过阅读本书,可以帮助读者更深层次地了解内核态下的信息安全知识。
本书适合大专院校计算机系的学生、Windows程序员、从事信息安全行业的工程师以及含拦橡所有对Windows内核安全编程感兴趣的爱好者使用。