Windows内核编程01|Process

1.1 进程 进程拥有的内容: 一个可执行程序。包含用来在进程中执行的原始的代码和数据(PE格式的文件)。 一段虚拟地址空间。进程中的代码不管出于何种目的要分配内存时,都从这里分配。 一个主令牌。它是一个保存进程默认安全上下文的对象,在进程内执行代码的线程会用到它,除非某个线程通过身份扮演(i……

阅读全文

Windows内核开发总结(二)

同步异步的两种用法 FILE_FLAG_OVERLAPPED异步打开参数 在CreateFile打开设备对象时 HANDLE CreateFile( LPCSTR lpFileName, DWORD dwDesiredAccess, DWORD dwShareMode, LPSECURITY_ATTRIBUTES lpSecurityAttributes, DWORD dwCreationDisposition, DWORD dwFlagsAndAttributes, //FILE_FLAG_OVERLAPPED HANDLE hTemplateFile ); 加入FILE_FLAG_OVERLAPPED参数就是以异步的方式打开驱动的设备对象 与驱动通讯时如下的调用界面及异步结构,需要设置一个OVE……

阅读全文

Windows内核开发总结(一)

1. windows内核对象 每个对象都有对象头和对象体组成。所有类型的对象头结构都是相同的,而结构体部分却各不相同的。下面是内核对象的结构图: 进程句柄表 dt nt!_EPROCESS +0x000 Pcb : _KPROCESS +0x06c ProcessLock : _EX_PUSH_LOCK +0x070 CreateTime : _LARGE_INTEGER +0x078 ExitTime : _LARGE_INTEGER +0x080 RundownProtect : _EX_RUNDOWN_REF +0x084 UniqueProcessId : Ptr32 Void +0x088 ActiveProcessLinks : _LIST_ENTRY +0x090 QuotaUsage : [3] Uint4B +0x09c QuotaPeak : [3] Uint4B +0x0a8 CommitCharge : Uint4B +0x0ac PeakVirtualSize : Uint4B +0x0b0 VirtualSize : Uint4B +0x0b4 SessionProcessLinks : _LIST_ENTRY +0x0bc DebugPort : Ptr32 Void +0x0c0 ExceptionPort : Ptr32……

阅读全文

IRP和派遣函数

什么是派遣函数? 派遣函数是 WIndows 驱动程序中的重要概念。驱动程序的主要功能是负责处理I/O请求,其中大部分I/O请求是在派遣函数中处理的。也就是说,派遣函数是用来处理驱动程序提交过来的 I/O 请求。 那什么是 I/O 请求呢? 上层程序与驱动程序之间通信时,上层会发出I/O请求,即输入输出请求包(I/O……

阅读全文

渲染管线之旅|14 索引页

A trip through the Graphics Pipeline 2011 是发布在博客 http://fgiesen.wordpress.com 上的系列文章。主要涉及图形流水线在GPU中实现的方方面面。包括D3D/OpenGL app, UMD Driver, KMD Driver, GPU 硬件流水线设计等等。是非常好的学习图形学应用,GPU驱动等相关领域的资料。翻译的目的一方面是对学习的总结;另一方面是为了分享,因为国内在图形学, GPU相关的资……

阅读全文

渲染管线之旅|13 计算着色器

欢迎回到"渲染管线之旅"系列,本篇是“渲染管线之旅”的最后部分。这个系列已经够长了,后面可能写更多与GPU相关的文章。 之前我们一直遨游在图形渲染管线的所有常规部分,以及不同层级的具体细节。这篇我们来看DX11中引入的一项重要新功能:计算着色器(Computer……

阅读全文

渲染管线之旅|12 曲面细分

欢迎回来!这次,我们将研究D3D11 / Shader 5.x硬件世代所引入的“海报男孩”功能:细分。这个很有趣,既因为它是一个有趣的话题,又因为它标志着很长一段时间以来的第一次,这是一个重要的用户可见的组件已被添加到不可编程的图形管道中。 与从概念上讲很简单的“几何着色器”(它是一个可以看到整个……

阅读全文

渲染管线之旅|11 流输出

欢迎回来! 这次,重点将放在流出(SO)上。 这是一种用于将“几何着色器”阶段的输出存储到内存中,而不是将其沿管道的其余部分发送的功能。 这可以用于例如 在D3D10级别的硬件上使用D3D10 API缓存外观化的顶点数据,或作为穷人的Compute Shader(请注意,使用D3D11,即使……

阅读全文

渲染管线之旅|10 几何着色器

欢迎回来。 上一次,我们深入到像素管线的底端。 这次,我们将切换回管道的中间,以查看D3D10:几何着色器可能是最明显的附加功能。 但是首先,我要进一步讲解如何分解本系列中的图形管道,以及与API呈现给你的视图有何不同。 Welcome back. Last time, we dove into bottom end of the pixel pipeline. This time, we’ll switch back to the middle of the pipeline to look at what is……

阅读全文

渲染管线之旅|09 像素处理之联合

这篇文章介绍了像素处理的后半部分,即“连接阶段”。 上一阶段的工作是将少量输入流转换成着色器单元的许多独立任务。 现在,我们需要将大量独立的计算折叠到一个(正确排序的)内存操作流中。 就像我在光栅化和Z早期的文章中已经做过的那样,我将首先简要介绍需要在一般级别上完成的工作,然后再介绍如……

阅读全文