WIKI
+ -

windows体系结构

2021-09-07 111 0

Windows操作系统的整体架构如下图所示:

Windows体系架构

可以看到,应用层与内核层通过NTdll.dll进行隔离。
NTdll.dll内部是Windows内核提供的系统调用,应用层通过自陷进行内核,然后调用内核中对应的内核服务函数。

Windows体系架构

0 篇笔记 写笔记

Windows驱动注册表写数据
实际上注册表的写入比读取要简单。因为这省略了一个尝试数据的大小的过程。直接将数据写入即可。写入值一般使用函数ZwSetValueKey 。这个函数的原型如下:NTSTATUS ZwSetValueKey( IN HANDLE KeyHandle, IN PUNICODE_STRI......
Windows应用与内核内存共享
我们知道,进程之间如果要进行数据,是可以通过共享内存来实现的。其原理就是将同一片物理内存,分别进行不同的线性映射,这样就可以得到2个线性地址,而这两个线地址址对应的空间就是物理内存的空间。这样,如果我们在各自的进程分别读写内存,另一个进程中对应的线性地址空间的数据同时也会变化。原理如下图:相同的......
Windows下获取盘符信息
Windows 下,各盘符其实是系统中一个文件,我们了可以通过CreateFile来打开,然后再通过DeviceIoControl函数发送不同的控制码获取相关的信息。这里的信息包括盘符大小,StartingOffset,DiskNumber,ExtentLength等。#include<......
Windows Inf文件设备GUID分类(设备安装程序类)
Class=SystemClassGuid={4d36e97d-e325-11ce-bfc1-08002be10318}Class=USBClassGuid={36FC9E60-C465-11CF-8056-444553540000}Class=AudioClassGuid={4d36e96c-......
Windows IRP结构字段解释
 比如说你开发了一个USB接口的设备, 那么为了在windows上使用它, 你需要开发一个驱动程序,也许还需要一个应用程序.有些硬件是"免驱"的.但事实上不是不需要驱动,而是他所需要的驱动已经存在在windows中了,不需要你另外安装而已.  你使用应用程序可以控制该硬件的行为,过程是应用程序发出......
Windows应用层写数据到驱动
应用层传入信息的时候,可以使用WriteFile,也可以使用DeviceIoControl。DeviceIoControl是双向的,在读取设备的信息也可以使用。因此本书以DeviceIoControl为例子进行说明。DeviceIoControl称为设备控制接口。其特点是可以发送一个带有特定控制码的......
Windows驱动读注册表数据
一般使用ZwQueryValueKey来读取注册表中键的值。要注意的是注册表中的值可能有多种数据类型。而且长度也是没有定数的。为此,在读取过程中,就可能要面对很多种可能的情况。ZwQueryValueKey这个函数的原型如下:NTSTATUS ZwQueryValueKey( IN HAN......
windows服务启动选项
dwStartType服务启动选项。此参数可以是下列值之一:宏值含义SERVICE_AUTO_START0x00000002系统启动时由服务控制管理器自动启动该服务程序。SERVICE_BOOT_START0x00000000用于由系统加载器创建的设备驱动程序。只......
Windows修改注册表使应用程序开机自动运行
先向大家介绍能让WINDOWS自动启动的2个文件和8个注册键1: 当前用户专用的启动文件夹 将快捷方式放入WINDOWS的用户启动文件夹中.在开始菜单的启动文件夹上,右键选中“打开”菜单如在本机win7 x64下为:C:/Users/Administrator/AppData/Roaming/M......
Windows内核线程睡眠
许多读者一定使用过Sleep函数。这能使程序停下一段时间。许多需要连续、长期执行,但是又不希望占太多CPU使用率的任务,可以在中间加入睡眠。这样能使CPU使用率大大降低。即使睡眠的时间非常短(几十个毫秒)。在驱动中也可以睡眠。使用到的内核函数的原型如下: NTSTATUS Ke......
Windows堆管理器概述
Windows下,堆管理器的原理如下图:堆的空间布局堆的创建每个进程在创建时,加载器执行用户态的初始化函数,调用RtlCreateHeap函数为进程创建第一个堆,即默认堆。应用程序也可调用HeapCreate创建 其它堆,且只能为本进程自己用,此堆为私有堆。进程的进程环境块(PEB)存放当前......
windows驱动协安装的配置及源安装路径获取
在做windows驱动开发时,有时需要在驱动安装前,安装后,等事件发生时进行一系列的处理工作,当然如果在驱动内部配置相关的IRP回调函数,但有时多有不便。微软给我们提供了一种叫做协安装的方法,由系统调用,我们只需要生成DLL并导出函数即可。以vm虚拟机的显卡驱动为例,inf文件配置如下:[vmx......
Windows内核中获得当前时间
接下来的一个需求是得到当前的可以供人类理解的时间。包括年、月、日、时、分、秒这些要素。在驱动中不能使用诸如CTime之类的MFC类。不过与之对应的有TIME_FIELDS,这个结构中含有对应的时间要素。KeQuerySystemTime()得到当前时间。但是得到的并不是当地时间,而是一个格林威治时......
Windows的关机和重起
平时用的最多的是开始菜弹中进行windows的关机或者重启,或者当远程某台电脑台,由于远程session并未提供关机或重启按钮,这时我们经常通过dos命令行来实现关机或重启。如用如下命令执行立即重启shutdown -r -t 0那么怎么通过程序来实现呢?windows api提供了一个api函......
Windows内核驱动创建线程
有时候需要使用线程来完成一个或者一组任务。这些任务可能耗时过长,而开发者又不想让当前系统停止下来等待。在驱动中停止等待很容易使整个系统陷入“停顿”,最后可能只能重启电脑。但一个单独的线程长期等待,还不至于对系统造成致命的影响。另一些任务是希望长期、不断的执行,比如不断写入日志。为此启动一个特殊的线程......
作者信息
我爱内核
Windows驱动开发,网站开发
好好学习,天天向上。
取消
感谢您的支持,我会继续努力的!
扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

您的支持,是我们前进的动力!