最新更新文章[系统运维] 《Windows核心编程系列》十异步IO之IO完成端口http://blog.csdn.net/ithzhang/article/details/8508161转载请注明出处!! ????????????IO完成端口...
[系统运维] 《谈谈Windows核心编程系列》导读《谈谈Windows核心编程系列》导读 谈谈Windows核心编程系列终于发布完了。 发布这些文章的目的: 一是为了总结之用,当需要的时候可以迅速的找出。 二也是在记录学习轨迹。 慢慢的养成了一种习惯,好像不写笔记就不算读过书一样。读书的时候会不自觉的加快速度,有时候看的不是很仔细,有时甚至看了很多遍还是...
[系统运维] 《Windows核心编程系列》十四谈谈默认堆和自定义堆堆 前面我们说过堆非常适合分配大量的小型数据。使用堆可以让程序员专心解决手头的问题,而不必理会分配粒度和页面边界之类的事情。因此堆是管理链表和数的最佳方式。但是堆进行内存分配和释放时的速度比其他方式都慢,而且无法对物理存储器的调拨和撤销调拨进行控制。 什么是堆? 在系统内部堆就是一块预定的地址空间区域。刚开始堆的大部分页面都没有调拨物理存储器。随着我...
[系统运维] 《Windows核心编程系列》十三谈谈在应用程序中使用虚拟内存在应用程序中使用虚拟内存 Windows提供了以下三种机制对内存进行操控: 一:虚拟内存。最适合来管理大型对象数据或大型结构数组。 二:内存映射文件。最适合用来管理大型数据流,以及在同一机 器上运行的多个进程之间共享数据。 三:堆。最适合用来管理大量的小型对象。 很多人都对VirtualAlloc和malloc...
[系统运维] 《Windows核心编程系列》十二谈谈Windows内存体系结构Windows内存体系结构 理解Windows内存体系结构是每一个励志成为优秀的Windows程序员所必须的。 进程虚拟地址空间 每个进程都有自己的虚拟地址空间。对于32位操作系统来说,它的地址空间是4GB。这是因为32位指针可以表示从0x00000000到0xFFFFFFFF之间的任一值。对于64位的操作系统来说有0--2的64次方之间的任一值。...
[系统运维] 《Windows核心编程系列》十一谈谈Windows线程池Windows线程池 上一篇博文我们介绍了IO完成端口。得知IO完成端口可以非常智能的分派线程。但是IO完成端口仅对等待它的线程进行分派,创建和销毁线程的工作仍然需要我们自己来做。 我们自己也可以创建线程,但是涉及到线程的编码操作比较复杂,容易出现差错。为了简化程序员的工作,Windows提供了一个线程池机制来简化线程的创建、销毁以及日常管理。这个新线程池可能不...
[系统运维] 《Windows核心编程系列》十谈谈????同步设备IO与异步设备IO之异步IOhttp://blog.csdn.net/ithzhang/article/details/8316171 同步设备IO与异步设备IO之异步IO介绍 设备IO与cpu速度甚至是内存访问相比较都是比较慢的,而且更不可预测。虽然如此,通过使用异步设备IO我们仍然能够创造出更高效的程序。...
[系统运维] 《Windows核心编程系列》九谈谈同步设备IO与异步设备IO之同步设备IOhttp://blog.csdn.net/ithzhang/article/details/8307633 同步设备IO 所谓同步IO是指线程在发起IO请求后会被挂起,IO完成后继续执行。 异步IO是指:线程发起IO请求后并不会挂起而是继续执行。IO完毕后会得到设备的通知。而IO完成端口就是实现这种通知的很好的一种方式。 线程是我们开发高性能、响应性好的一个必不可少...
[系统运维] 《Windows核心编程系列》八谈谈用内核对象进行线程同步http://blog.csdn.net/ithzhang/article/details/8291027转载请注明出处! 使用内核对象进行线程同步。 前面我们介绍了用户模式下线程同步的几种方式。在用户模式下进行线程同步的最大好处就是速度非常快。因此当需要使用线程同步时用户模式下的线程同步是首选。 但是用户模式下的线程同步也存在缺点。如InterLocked...
[系统运维] 《windows核心编程系列》七谈谈用户模式下的线程同步http://blog.csdn.net/ithzhang/article/details/8066658转载请注明出处! 用户模式下的线程同步 系统中的线程必须访问系统资源,如堆、串口、文件、窗口以及其他资源。如果一个线程独占了对某个资源的访问,其他线程就无法完成工作。我们也必须限制线程在任何时刻都能访问任何资源。比如在一个线程读内存时要限制其他线程对此块内存进行写入。... [系统运维] 《windows核心编程系列 》六谈谈线程调度、优先级和关联性http://blog.csdn.net/ithzhang/article/details/8046723转载请注明出处! 线程调度、优先级和关联性 每个线程都有一个CONTEXT结构,保存在线程内核对象中。大约每隔20ms windows就会查看所有当前存在的线程内核对象。并在可调度的线程内核对象中选择一个,将其保存在CONTEXT结构的值载入cpu寄存器。这被称为上下文切换。... [系统运维] 《windows核心编程系列》五谈谈线程基础http://blog.csdn.net/ithzhang/article/details/8046721,转载请注明出处! 线程基础 与前面介绍的进程一样,线程也有两部分组成。一个是线程内核对象。它是一个数据结构,操作系统用它来管理线程以及用它来存储线程的一些统计信息。另一个是线程栈,用于维护线程执行时所需的所有函数参数和局部变量。位于同一个进程... [系统运维] 《windows核心编程系列》四谈谈进程的建立和终止http://blog.csdn.net/ithzhang/article/details/7927682转载请注明出处! 第二部分:工作机理 第一章:进程 上一章介绍了内核对象,这一节开始就要不断接触各种内核对象了。首先要给大家介绍的是进程内核对象。进程大家都不陌生,它是资源和分配的基本单位,而进程内核对象就是与进程相关联的一个数据结构。操作系统内核通过它管理进... [系统运维] 《windows核心编程系列》三谈谈内核对象及句柄的本质2012、8、29 http://blog.csdn.net/ithzhang/article/details/7920204转载请注明出处! 内核对象 本章讨论的是相对抽象的概念,不涉及任何具体的内核对象的细节而是讨论所有内核对象的共有特性。 首先让我们来了解一下什么是内核对象。内核对象通过API来创建,每个内核对象是... [系统运维] 《windows核心编程系列》二谈谈ANSI和Unicode字符集2012、8、28http://blog.csdn.net/ithzhang/article/details/7916732转载请注明出处!!第二章:字符和字符串处理 使用vc编程时项目--》属性--》常规栏下我们可以设置项目字符集合,它可以是ANSI(多字节)字符集,也可以是unicode字符集。一般情况下说Unicode都是指UTF-16。也就是说每个字符编码为两个字节。65535个字符... microsoft Microsoft windows Windows WINDOWS WIndows 编程 编译器 语言 [系统运维] 《windows核心编程系列》一谈谈windows中的错误处理机制谈谈windows核心编程系列 2012、8、27 http://blog.csdn.net/ithzhang/article/details/7912489转载请注明出处!! 错误处理 我们写的函数会用返回值表示程序执行的正确与否,使用void,就意味着程序一定不会出错。Bool类型标识true时... [系统运维] 《windows核心编程系列》二十二谈谈修改导入段拦截API。一个模块的导入段包含一组DLL。为了让模块能够运行,这些DLL是必须的。导入段还包含一个符号表。它列出了该模块从各DLL中导入的符号。当模块调用这些导入符号的时候,系统实际上会调用转换函数,获得导入函数在导入表的地址,然后再跳到相应的位置。如果我们能将导入段中相应导入函数的地址替换成自定义的函数的地址,即可实现对该函数的拦截。在自定义的函数中,我们既可以调用拦截的函数,也可以执行其他工作。... [系统运维] 《windows核心编程系列》二十一谈谈基址重定位和模块绑定每个DLL和可执行文件都有一个首选基地址。它表示该模块被映射到进程地址空间时最佳的内存地址。在构建可执行文件时,默认情况下链接器会将它的首选基地址设为0x400000。对于DLL来说,链接器会将它的首选基地址设为0x10000000,然后将该地址以及代码、数据的相关地址都写入它们的PE文件中。当它们被加载时,加载程序读取首选基地址的值,并试图把它们加载到相应位置。 对于可执行文件和DLL中... [系统运维] 《Windows核心编程系列》二十谈谈DLL高级技术本篇文章将介绍DLL显式链接的过程和模块基地址重定位及模块绑定的技术。 第一种将DLL映射到进程地址空间的方式是直接在源代码中引用DLL中所包含的函数或是变量,DLL在程序运行后由加载程序隐式的载入,此种方式被称为隐式链接。 第二种方式是在程序运行时,通过调用API显式的载入所需要的DLL,并显式的链接所想要链接的符号。换句话说,程序在运行时,其中的一个线程能够显式的将... [系统运维] 《windows核心编程系列》十九谈谈使用远程线程来注入DLL。windows内的各个进程有各自的地址空间。它们相互独立互不干扰保证了系统的安全性。但是windows也为调试器或是其他工具设计了一些函数,这些函数可以让一个进程对另一个进程进行操作。虽然他们是为调试器设计的,但是任何应用程序都可以调用它们 。接下来我们来谈谈使用远程线程来注入DLL。 从根本上说,DLL注入就是将某一DLL注入到某一进程的地址空间。该进程中的一个线程调用Loa... |
|