
谈谈windows 核心编程系列
ithzhang
继续向架构师挺进
展开
-
《windows核心编程系列》一谈谈windows中的错误处理机制
谈谈windows核心编程系列 2012、8、27http://blog.youkuaiyun.com/ithzhang/article/details/7912489转载请注明出处!! 错误处理 我们写的函数会用返回值表示程序执行的正确与否,使用void,就意味着程序一定不会出错。Bool类型标识true时原创 2012-08-27 15:47:11 · 8049 阅读 · 2 评论 -
《windows核心编程系列》七谈谈用户模式下的线程同步
http://blog.youkuaiyun.com/ithzhang/article/details/8066658转载请注明出处!用户模式下的线程同步 系统中的线程必须访问系统资源,如堆、串口、文件、窗口以及其他资源。如果一个线程独占了对某个资源的访问,其他线程就无法完成工作。我们也必须限制线程在任何时刻都能访问任何资源。比如在一个线程读内存时要限制其他线程对此块内存进行写入。原创 2012-10-13 09:51:53 · 5989 阅读 · 2 评论 -
《windows核心编程系列》四谈谈进程的建立和终止
http://blog.youkuaiyun.com/ithzhang/article/details/7927682转载请注明出处!第二部分:工作机理第一章:进程上一章介绍了内核对象,这一节开始就要不断接触各种内核对象了。首先要给大家介绍的是进程内核对象。进程大家都不陌生,它是资源和分配的基本单位,而进程内核对象就是与进程相关联的一个数据结构。操作系统内核通过它管理进原创 2012-08-31 09:23:18 · 11968 阅读 · 5 评论 -
《Windows核心编程系列》十一谈谈Windows线程池
Windows线程池 上一篇博文我们介绍了IO完成端口。得知IO完成端口可以非常智能的分派线程。但是IO完成端口仅对等待它的线程进行分派,创建和销毁线程的工作仍然需要我们自己来做。 我们自己也可以创建线程,但是涉及到线程的编码操作比较复杂,容易出现差错。为了简化程序员的工作,Windows提供了一个线程池机制来简化线程的创建、销毁以及日常管理。这个新线程池可能不原创 2012-12-22 15:41:36 · 22849 阅读 · 8 评论 -
《windows核心编程系列》二十二谈谈修改导入段拦截API。
一个模块的导入段包含一组DLL。为了让模块能够运行,这些DLL是必须的。导入段还包含一个符号表。它列出了该模块从各DLL中导入的符号。当模块调用这些导入符号的时候,系统实际上会调用转换函数,获得导入函数在导入表的地址,然后再跳到相应的位置。如果我们能将导入段中相应导入函数的地址替换成自定义的函数的地址,即可实现对该函数的拦截。在自定义的函数中,我们既可以调用拦截的函数,也可以执行其他工作。原创 2011-12-14 19:49:11 · 4944 阅读 · 1 评论 -
《windows核心编程系列》二十一谈谈基址重定位和模块绑定
每个DLL和可执行文件都有一个首选基地址。它表示该模块被映射到进程地址空间时最佳的内存地址。在构建可执行文件时,默认情况下链接器会将它的首选基地址设为0x400000。对于DLL来说,链接器会将它的首选基地址设为0x10000000,然后将该地址以及代码、数据的相关地址都写入它们的PE文件中。当它们被加载时,加载程序读取首选基地址的值,并试图把它们加载到相应位置。 对于可执行文件和DLL中原创 2011-12-09 22:52:47 · 6847 阅读 · 0 评论 -
《windows核心编程系列》十五谈谈windows线程栈
谈谈windows线程栈。 当系统创建线程时会为线程预订一块地址空间区域,注意仅仅是预订。默认情况下预定的这块区域的大小是1MB,虽然预订这么多,但是系统并不会给全部区域调拨物理存储器。默认情况下,仅仅为两个页面挑拨。x86系统下每个页面是4KB.其他页面会在访问的时候由系统调拨。这仅仅是在创建线程时,程序员指定CreateThread的第二个参数StackSize为0时才会发挥作用原创 2011-11-21 22:51:06 · 5432 阅读 · 0 评论 -
《Windows核心编程系列》十谈谈同步设备IO与异步设备IO之异步IO
http://blog.youkuaiyun.com/ithzhang/article/details/8316171 同步设备IO与异步设备IO之异步IO介绍 设备IO与cpu速度甚至是内存访问相比较都是比较慢的,而且更不可预测。虽然如此,通过使用异步设备IO我们仍然能够创造出更高效的程序。原创 2012-12-18 20:45:55 · 8488 阅读 · 4 评论 -
《Windows核心编程系列》十异步IO之IO完成端口
http://blog.youkuaiyun.com/ithzhang/article/details/8508161转载请注明出处!! IO完成端口原创 2013-01-16 10:06:46 · 23207 阅读 · 11 评论 -
《windows核心编程系列》二谈谈ANSI和Unicode字符集
2012、8、28http://blog.youkuaiyun.com/ithzhang/article/details/7916732转载请注明出处!!第二章:字符和字符串处理 使用vc编程时项目--》属性--》常规栏下我们可以设置项目字符集合,它可以是ANSI(多字节)字符集,也可以是unicode字符集。一般情况下说Unicode都是指UTF-16。也就是说每个字符编码为两个字节。65535个字符原创 2012-08-28 16:29:02 · 9739 阅读 · 3 评论 -
浅谈windows句柄表
浅谈windows句柄表 windows定义了很多内核对象:进程对象、线程对象、互斥量对象、信号量对象、事件对象、文件对象等等。在调用相应的函数创建这些对象后,我们都可以通过HANDLE类型的句柄来引用它们。或许你在一些书上看到过说句柄相当于指针,它指向具体的对象。在某种程度上来说这是不错的,但是进一步深入探究时就会发现这样的说法很不准确。说到句柄就不能不提句柄表,句柄必须通过句柄表才能找到所引用原创 2013-03-22 22:15:40 · 10436 阅读 · 3 评论 -
《Windows核心编程系列》九谈谈同步设备IO与异步设备IO之同步设备IO
http://blog.youkuaiyun.com/ithzhang/article/details/8307633同步设备IO所谓同步IO是指线程在发起IO请求后会被挂起,IO完成后继续执行。 异步IO是指:线程发起IO请求后并不会挂起而是继续执行。IO完毕后会得到设备的通知。而IO完成端口就是实现这种通知的很好的一种方式。 线程是我们开发高性能、响应性好的一个必不可少原创 2012-12-17 15:31:07 · 4818 阅读 · 0 评论 -
《windows核心编程系列》五谈谈线程基础
http://blog.youkuaiyun.com/ithzhang/article/details/8046721,转载请注明出处! 线程基础 与前面介绍的进程一样,线程也有两部分组成。一个是线程内核对象。它是一个数据结构,操作系统用它来管理线程以及用它来存储线程的一些统计信息。另一个是线程栈,用于维护线程执行时所需的所有函数参数和局部变量。位于同一个进程原创 2012-10-08 07:57:08 · 7861 阅读 · 11 评论 -
《windows核心编程系列》三谈谈内核对象及句柄的本质
2012、8、29http://blog.youkuaiyun.com/ithzhang/article/details/7920204转载请注明出处! 内核对象 本章讨论的是相对抽象的概念,不涉及任何具体的内核对象的细节而是讨论所有内核对象的共有特性。首先让我们来了解一下什么是内核对象。内核对象通过API来创建,每个内核对象是原创 2012-08-29 14:45:52 · 12851 阅读 · 12 评论 -
《windows核心编程系列》十七谈谈dll
DLL全称dynamic linking library.即动态链接库。广泛应用与windows及其他系统中。因此对dll的深刻了解,对计算机软件开发专业人员来说非常重要。 windows中所有API都包含在DLL中。三个最重要的DLL是Kernel32.dll,User32.dll,GDI32.dll。 使用dll的好处: 1:扩展了应用程序的特性。原创 2011-11-28 22:24:40 · 4859 阅读 · 0 评论 -
《谈谈Windows核心编程系列》导读
《谈谈Windows核心编程系列》导读 谈谈Windows核心编程系列终于发布完了。 发布这些文章的目的: 一是为了总结之用,当需要的时候可以迅速的找出。 二也是在记录学习轨迹。 慢慢的养成了一种习惯,好像不写笔记就不算读过书一样。读书的时候会不自觉的加快速度,有时候看的不是很仔细,有时甚至看了很多遍还是原创 2012-12-28 13:32:48 · 14215 阅读 · 4 评论 -
《Windows核心编程系列》十二谈谈Windows内存体系结构
Windows内存体系结构 理解Windows内存体系结构是每一个励志成为优秀的Windows程序员所必须的。 进程虚拟地址空间 每个进程都有自己的虚拟地址空间。对于32位操作系统来说,它的地址空间是4GB。这是因为32位指针可以表示从0x00000000到0xFFFFFFFF之间的任一值。对于64位的操作系统来说有0--2的64次方之间的任一值。原创 2012-12-23 10:51:51 · 5798 阅读 · 4 评论 -
《Windows核心编程系列》十四谈谈默认堆和自定义堆
堆 前面我们说过堆非常适合分配大量的小型数据。使用堆可以让程序员专心解决手头的问题,而不必理会分配粒度和页面边界之类的事情。因此堆是管理链表和数的最佳方式。但是堆进行内存分配和释放时的速度比其他方式都慢,而且无法对物理存储器的调拨和撤销调拨进行控制。 什么是堆? 在系统内部堆就是一块预定的地址空间区域。刚开始堆的大部分页面都没有调拨物理存储器。随着我原创 2012-12-28 10:52:48 · 7781 阅读 · 1 评论 -
《windows核心编程系列》十九谈谈使用远程线程来注入DLL。
windows内的各个进程有各自的地址空间。它们相互独立互不干扰保证了系统的安全性。但是windows也为调试器或是其他工具设计了一些函数,这些函数可以让一个进程对另一个进程进行操作。虽然他们是为调试器设计的,但是任何应用程序都可以调用它们 。接下来我们来谈谈使用远程线程来注入DLL。 从根本上说,DLL注入就是将某一DLL注入到某一进程的地址空间。该进程中的一个线程调用Loa原创 2011-12-05 17:41:57 · 8896 阅读 · 0 评论 -
《windows核心编程系列》十六谈谈内存映射文件
内存映射文件允许开发人员预订一块地址空间并为该区域调拨物理存储器,与虚拟内存不同的是,内存映射文件的物理存储器来自磁盘中的文件,而非系统的页交换文件。将文件映射到内存中后,我们就可以在内存中操作他们了,就像他们被载入内存中一样。内存映射文件主要有三方面的用途:1:系统使用内存映射文件来将exe或是dll文件本身作为后备存储器,而非系统页交换文件,这大大节省了系统页交换空间,由于不需要将ex原创 2011-11-22 21:30:41 · 6627 阅读 · 1 评论 -
《Windows核心编程系列》十三谈谈在应用程序中使用虚拟内存
在应用程序中使用虚拟内存 Windows提供了以下三种机制对内存进行操控: 一:虚拟内存。最适合来管理大型对象数据或大型结构数组。 二:内存映射文件。最适合用来管理大型数据流,以及在同一机 器上运行的多个进程之间共享数据。 三:堆。最适合用来管理大量的小型对象。 很多人都对VirtualAlloc和malloc原创 2012-12-27 12:43:21 · 6709 阅读 · 2 评论 -
《windows核心编程系列》十八谈谈windows钩子
windows应用程序是基于消息驱动的。各种应用程序对各种消息作出响应从而实现各种功能。 windows钩子是windows消息处理机制的一个监视点,通过安装钩子可以达到监视指定窗口某种类型的消息的功能。所谓的指定窗口并不局限于当前进程的窗口,也可以是其他进程的窗口。当监视的某一消息到达指定的窗口时,在指定的窗口处理消息之前,钩子函数将截获此消息,钩子函数既可以加工处理该消息,也可以原创 2011-12-01 16:47:16 · 16485 阅读 · 5 评论 -
《Windows核心编程系列》二十谈谈DLL高级技术
本篇文章将介绍DLL显式链接的过程和模块基地址重定位及模块绑定的技术。 第一种将DLL映射到进程地址空间的方式是直接在源代码中引用DLL中所包含的函数或是变量,DLL在程序运行后由加载程序隐式的载入,此种方式被称为隐式链接。 第二种方式是在程序运行时,通过调用API显式的载入所需要的DLL,并显式的链接所想要链接的符号。换句话说,程序在运行时,其中的一个线程能够显式的将原创 2011-12-07 22:24:05 · 11261 阅读 · 1 评论 -
《windows核心编程系列 》六谈谈线程调度、优先级和关联性
http://blog.youkuaiyun.com/ithzhang/article/details/8046723转载请注明出处!线程调度、优先级和关联性 每个线程都有一个CONTEXT结构,保存在线程内核对象中。大约每隔20ms windows就会查看所有当前存在的线程内核对象。并在可调度的线程内核对象中选择一个,将其保存在CONTEXT结构的值载入cpu寄存器。这被称为上下文切换。原创 2012-10-08 08:06:20 · 11747 阅读 · 3 评论 -
《Windows核心编程系列》八谈谈用内核对象进行线程同步
http://blog.youkuaiyun.com/ithzhang/article/details/8291027转载请注明出处!使用内核对象进行线程同步。 前面我们介绍了用户模式下线程同步的几种方式。在用户模式下进行线程同步的最大好处就是速度非常快。因此当需要使用线程同步时用户模式下的线程同步是首选。 但是用户模式下的线程同步也存在缺点。如InterLocked原创 2012-12-13 15:46:29 · 5538 阅读 · 6 评论 -
《谈谈windows核心编程系列》 结构化异常处理SEH之__finally终止处理
结构化异常处理SEH:__finally终止处理。 结构化异常处理(Structuredexception handling)简称SEH。是windows系统提供的异常处理机制。促使windows将SEH加入到windows系统的一个关键原因就是:它可以简化操作系统本身的开发工作,同时还让系统更加健壮。 我们当然也可以在我们的程序中添加SEH机制,这样我们的应用程序也可以变得更加健壮。使用SE原创 2013-04-11 21:36:58 · 5062 阅读 · 4 评论