WINDOWS是如何在注册表里记录盘符分配的

简介:
 windows在加载一个之前从未加载过的分区时,首先要将这个分区的设备序号信息记录在注册表里,如果对这个分区进行了盘符(或路径)分配,那么在下次加载这个分区的时候就不用再次指定盘符(或路径)了。
  这些信息记录在:[HKEY_LOCAL_MACHINE\SYSTEM\MountedDevices]键值下,内容大致为(从我的电脑里导出的): 附件1
 
  这里面重要的是这几个:
  "\\DosDevices\\R:"=hex:eb,f8,b2,92,00,7e,00,00,00,00,00,00
  上面的R:表示盘符为R,后面的HEX值中分成两个部分,第一部分是前4个HEX值,表示R分区所属硬盘的序号,后面8个HEX表示R分区在这个硬盘的偏移起始位置,以字节为单位。对照上面的R,看一下R分区所属的硬盘的0扇区:
  
Offset          00 01 02 03 04 05 06 07  08 09 0A 0B 0C 0D 0E 0F
000000000   33 C0 8E D0 BC 00 7C FB  50 07 50 1F FC BE 1B 7C
000000010   BF 1B 06 50 57 B9 E5 01  F3 A4 CB BD BE 07 B1 04
000000020   38 6E 00 7C 09 75 13 83  C5 10 E2 F4 CD 18 8B F5
000000030   83 C6 10 49 74 19 38 2C  74 F6 A0 B5 07 B4 07 8B
000000040   F0 AC 3C 00 74 FC BB 07  00 B4 0E CD 10 EB F2 88
000000050   4E 10 E8 46 00 73 2A FE  46 10 80 7E 04 0B 74 0B
000000060   80 7E 04 0C 74 05 A0 B6  07 75 D2 80 46 02 06 83
000000070   46 08 06 83 56 0A 00 E8  21 00 73 05 A0 B6 07 EB
000000080   BC 81 3E FE 7D 55 AA 74  0B 80 7E 10 00 74 C8 A0
000000090   B7 07 EB A9 8B FC 1E 57  8B F5 CB BF 05 00 8A 56
0000000A0   00 B4 08 CD 13 72 23 8A  C1 24 3F 98 8A DE 8A FC
0000000B0   43 F7 E3 8B D1 86 D6 B1  06 D2 EE 42 F7 E2 39 56
0000000C0   0A 77 23 72 05 39 46 08  73 1C B8 01 02 BB 00 7C
0000000D0   8B 4E 02 8B 56 00 CD 13  73 51 4F 74 4E 32 E4 8A
0000000E0   56 00 CD 13 EB E4 8A 56  00 60 BB AA 55 B4 41 CD
0000000F0   13 72 36 81 FB 55 AA 75  30 F6 C1 01 74 2B 61 60
000000100   6A 00 6A 00 FF 76 0A FF  76 08 6A 00 68 00 7C 6A
000000110   01 6A 10 B4 42 8B F4 CD  13 61 61 73 0E 4F 74 0B
000000120   32 E4 8A 56 00 CD 13 EB  D6 61 F9 C3 49 6E 76 61
000000130   6C 69 64 20 70 61 72 74  69 74 69 6F 6E 20 74 61
000000140   62 6C 65 00 45 72 72 6F  72 20 6C 6F 61 64 69 6E
000000150   67 20 6F 70 65 72 61 74  69 6E 67 20 73 79 73 74
000000160   65 6D 00 4D 69 73 73 69  6E 67 20 6F 70 65 72 61
000000170   74 69 6E 67 20 73 79 73  74 65 6D 00 00 00 00 00
000000180   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00
000000190   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00
0000001A0   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00
0000001B0   00 00 00 00 00 2C 44 63  EB F8 B2 92 00 00 00 01
0000001C0   01 00 07 FE FF FF 3F 00  00 00 3F F5 7F 0C 00 00
0000001D0   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00
0000001E0   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00
0000001F0   00 00 00 00 00 00 00 00  00 00 00 00 00 00 55 AA
 
    图中偏移为0x1B8~0x1BB,内容为HEX:EB F8 B2 92就是注册表中记录的R分区的硬盘序号。而从偏移0x1be~0x1ce中的第一组分区表可以看出,唯一的分区起始位置为0x3F,以扇区为单位,换成字节就是0x3F*0x200=0x7E00,如果用8字节的64位值表示,HEX就是00 7E 00 00 00 00 00 00 ,就是注册表中记录的键值的后半部分。




本文转自 张宇 51CTO博客,原文链接:http://blog.51cto.com/zhangyu/143742,如需转载请自行联系原作者
目录
相关文章
|
1月前
|
存储 安全 数据安全/隐私保护
Windows部署WebDAV服务并映射到本地盘符实现公网访问本地存储文件
Windows部署WebDAV服务并映射到本地盘符实现公网访问本地存储文件
251 0
|
2月前
|
JavaScript Windows Python
Windows DOS进入指定盘符(磁盘路径)
Windows DOS进入指定盘符(磁盘路径)
43 1
|
7月前
|
Windows
Windows注册表维护与优化
Windows注册表维护与优化
45 0
|
7月前
|
Windows
Windows注册表基础
Windows注册表基础
34 0
|
4月前
|
监控 安全 API
6.8 Windows驱动开发:内核枚举Registry注册表回调
在笔者上一篇文章`《内核枚举LoadImage映像回调》`中`LyShark`教大家实现了枚举系统回调中的`LoadImage`通知消息,本章将实现对`Registry`注册表通知消息的枚举,与`LoadImage`消息不同`Registry`消息不需要解密只要找到`CallbackListHead`消息回调链表头并解析为`_CM_NOTIFY_ENTRY`结构即可实现枚举。
48 1
6.8 Windows驱动开发:内核枚举Registry注册表回调
|
4月前
|
监控 安全 API
7.5 Windows驱动开发:监控Register注册表回调
在笔者前一篇文章`《内核枚举Registry注册表回调》`中实现了对注册表的枚举,本章将实现对注册表的监控,不同于32位系统在64位系统中,微软为我们提供了两个针对注册表的专用内核监控函数,通过这两个函数可以在不劫持内核API的前提下实现对注册表增加,删除,创建等事件的有效监控,注册表监视通常会通过`CmRegisterCallback`创建监控事件并传入自己的回调函数,与该创建对应的是`CmUnRegisterCallback`当注册表监控结束后可用于注销回调。
45 0
7.5 Windows驱动开发:监控Register注册表回调
|
4月前
|
存储 API 数据库
C/C++ 实现Windows注册表操作
Windows注册表(Registry)是Windows操作系统中用于存储系统配置信息、用户设置和应用程序数据的一个集中式数据库。它是一个层次结构的数据库,由键(Key)和值(Value)组成,这些键和值被用于存储各种系统和应用程序的配置信息。
50 0
|
4月前
|
存储 安全 API
8.5 Windows驱动开发:内核注册表增删改查
注册表是Windows中的一个重要的数据库,用于存储系统和应用程序的设置信息,注册表是一个巨大的树形结构,无论在应用层还是内核层操作注册表都有独立的API函数可以使用,而在内核中读写注册表则需要使用内核装用API函数,如下将依次介绍并封装一些案例,实现对注册表的创建,删除,更新,查询等操作。在Windows内核中,注册表是一种存储系统配置信息的机制,包括应用程序、硬件、驱动程序和操作系统的各种设置。内核提供了一些API函数,可以让驱动程序通过代码访问和修改注册表,以实现系统的配置和管理。下面简单介绍一下内核中的注册表增删改查操作:
34 0
8.5 Windows驱动开发:内核注册表增删改查
|
5月前
|
API Windows
3.1 Windows驱动开发:内核远程堆分配与销毁
在开始学习内核内存读写篇之前,我们先来实现一个简单的内存分配销毁堆的功能,在内核空间内用户依然可以动态的申请与销毁一段可控的堆空间,一般而言内核中提供了`ZwAllocateVirtualMemory`这个函数用于专门分配虚拟空间,而与之相对应的则是`ZwFreeVirtualMemory`此函数则用于销毁堆内存,当我们需要分配内核空间时往往需要切换到对端进程栈上再进行操作,接下来`LyShark`将从API开始介绍如何运用这两个函数实现内存分配与使用,并以此来作为驱动读写篇的入门知识。
24 0
3.1 Windows驱动开发:内核远程堆分配与销毁
|
11月前
|
安全 Windows
[windows提权] 注册表AlwaysInstallElevated提权
注册表AlwaysInstallElevated是策略设置项,允许低权限用户以system权限运行安装文件,powerup中的Get-RegistryAlwaysInstallElevate模块可用来检查注册表键是否被设置。如果为Ture就证明是以system权限运行的,可提权。
241 0