- 硬盘是由一组堆积的盘片组成类似于圆柱体组成,每个盘片的数据都以电磁方式存储在同心圆或轨道中,轨道的最小可寻址单元是扇区;
- 基本磁盘:最常用于windows的存储类型,指的是**包含分区的磁盘。**在基本磁盘上只能创建和删除主分区和扩展分区,在扩展分区中创建和删除逻辑驱动器,格式化分区并将其标记为活动分区。
- 当用户将硬盘格式化为基本磁盘时,将创建分区。在磁盘上创建多个分区允许具有单独的硬盘驱动器。
- 基本磁盘上的第一个物理扇区包含称为主启动记录 (MBR) 的数据结构。 MBR 包含以下内容:
启动程序 (最大大小为 442 字节)
磁盘签名 (唯一的 4 字节数字)
一个分区表最多 (四个条目)
MBR 结束标记 (始终0x55AA) - 主启动记录:所有运行Windows的基于X86的计算机和基于X86的计算机都可以使用成为主启动记录的分区样式(MBR)。MBR是Windows Server 2003 之前基于X86且Service Pack 1(SP1)的计算机上唯一可用的分区样式,因此无需选择此样式,它会自动使用。
- 可以使用 MBR 分区方案在基本磁盘上创建最多四个分区:四个主分区,或三个主分区和一个扩展分区。 扩展分区可以包含一个或多个逻辑驱动器。
- 全局唯一标识符的分区样式(GUID)分区表(GPT),使用GPT分区样式的基本磁盘最多可有128个主分区,可允许大于2TB的分区,增加复制和循环冗余的可靠性,检查(CRC、)分区表的保护,支持多种分区类型GUID。
- 管理磁盘配额:NTFS文件系统支持磁盘配额,允许管理员控制每个用户可以在NTFS文件系统卷上存储的数据量。可通过调用GetVolumeInformation函数并检查FILE_VOLUME_QUOTAS位标志确定文件系统是否支持磁盘配额。
- 需要检索实际可用磁盘空间量的程序可以调用 GetDiskFreeSpaceEx 函数并查看 TotalNumberOfFreeBytes 参数。
- 磁盘配额接口
接口 说明
IDiskQuotaControl 控制单个 NTFS 文件系统卷的磁盘配额设施。
IDiskQuotaEvents 接收与配额相关的事件通知。
IDiskQuotaUser 表示卷配额信息文件中的单个用户配额条目。
IDiskQuotaUserBatch 将多个配额用户对象添加到容器中,然后在单个调用中提交更新。
IEnumDiskQuotaUsers 枚举卷上的用户配额条目。 - 磁盘管理控制代码以及枚举类型较多,不做记录,需要时到:https://learn.microsoft.com/zh-cn/windows/win32/fileio/disk-management-functions
- 函数 说明
GetDiskFreeSpace
检索有关指定磁盘的信息,包括磁盘上的可用空间量。
GetDiskFreeSpaceEx
检索有关磁盘卷上可用空间量的信息,即空间总量、可用空间总量以及与调用线程关联的用户可用空间总量。 - IDiskQuotaControl::AddUserName
在卷上为指定用户添加新的配额条目。 用户由域和帐户名称标识。
IDiskQuotaControl::AddUserSid
在卷上为指定用户添加新的配额条目。 用户由安全标识符 (SID) 标识。
IDiskQuotaControl::CreateEnumUsers
创建枚举器对象,用于枚举卷上的配额用户。
IDiskQuotaControl::CreateUserBatch
创建批处理对象,用于同时优化对多个用户的配额设置的更新。
IDiskQuotaControl::DeleteUser
从卷配额信息文件中删除用户条目。
IDiskQuotaControl::FindUserName
在卷配额信息中找到特定条目。
IDiskQuotaControl::FindUserSid
在卷配额信息中找到特定的用户条目。
IDiskQuotaControl::GetDefaultQuotaLimit
检索卷的默认配额限制。
IDiskQuotaControl::GetDefaultQuotaLimitText
检索卷的默认配额限制。 限制表示为文本字符串;例如,10.5 MB。
IDiskQuotaControl::GetDefaultQuotaThreshold
检索卷的默认配额警告阈值。
IDiskQuotaControl::GetDefaultQuotaThresholdText
检索卷的默认警告阈值。
IDiskQuotaControl::GetQuotaLogFlags
检索控制卷上用户相关配额事件的日志记录的标志。
IDiskQuotaControl::GetQuotaState
检索一组描述配额系统状态的标志。
IDiskQuotaControl::GiveUserNameResolutionPriority
将指定的用户对象提升到队列的头,以便它排在下一行进行解析。
IDiskQuotaControl::Initialize
通过使用请求的访问权限打开 NTFS 文件系统卷来初始化新的 DiskQuotaControl 对象。
IDiskQuotaControl::InvalidateSidNameCache
使系统的 SID 到名称缓存的内容失效,因此对新用户对象的后续请求 (IEnumDiskQuotaUsers::Next、IDiskQuotaControl::FindUserSid 和 IDiskQuotaControl::FindUserName) 必须从域控制器获取用户名。
IDiskQuotaControl::SetDefaultQuotaLimit
修改默认配额限制。
IDiskQuotaControl::SetDefaultQuotaThreshold
修改默认警告阈值。
IDiskQuotaControl::SetQuotaLogFlags
控制卷上与用户相关的配额事件的日志记录。
IDiskQuotaControl::SetQuotaState
设置配额系统的状态。
IDiskQuotaControl::ShutdownNameResolution
将用户安全标识符 (SID) 转换为用户名。
- 客户端必须将 IDiskQuotaEvents 接口实现为接收配额相关事件通知的事件接收器。 每当发生重大配额事件时,系统将调用其方法。 目前支持的唯一事件是用户帐户名称信息的异步解析。IDiskQuotaEvents 接口继承自 IUnknown 接口
- IDiskQuotaEvents::OnUserNameChanged
每当异步解析用户的 SID 时**,通知客户端的连接接收器。**
16.HRESULT OnUserNameChanged(
[in] PDISKQUOTA_USER pUser //指向配额用户对象的 IDiskQuotaUser 接口的指针
);
IDiskQuotaUser::GetAccountStatus
检索用户对象帐户的状态。
IDiskQuotaUser::GetID
检索 DiskQuotaUser 对象的唯一标识符 (ID) 编号。
IDiskQuotaUser::GetName
检索与磁盘配额用户关联的名称字符串。
IDiskQuotaUser::GetQuotaInformation
检索用户的警告阈值、硬配额限制和使用的配额的值。
IDiskQuotaUser::GetQuotaLimit
检索用户在卷上的配额限制值。
IDiskQuotaUser::GetQuotaLimitText
检索用户对卷的配额限制。
IDiskQuotaUser::GetQuotaThreshold
检索用户在卷上的警告阈值。
IDiskQuotaUser::GetQuotaThresholdText
检索用户针对卷的警告阈值。
IDiskQuotaUser::GetQuotaUsed
检索用户在卷上使用的配额值。
IDiskQuotaUser::GetQuotaUsedText
检索卷的用户已用配额值。
IDiskQuotaUser::GetSid
检索 SID) (用户的安全标识符。
(IDiskQuotaUser.GetSid)
IDiskQuotaUser::GetSidLength
检索 SID) (用户安全标识符的长度(以字节为单位)。
IDiskQuotaUser::Invalidate
使存储在配额用户对象中的配额信息无效。
IDiskQuotaUser::SetQuotaLimit
设置用户对卷的配额限制值。
IDiskQuotaUser::SetQuotaThreshold
设置用户对卷的警告阈值。
- IDiskQuotaUserBatch::Add
将 IDiskQuotaUser 指针添加到批列表。
IDiskQuotaUserBatch::FlushToDisk
在对基础文件系统的单个调用中,将用户对象更改写入磁盘。
IDiskQuotaUserBatch::Remove
从批列表中删除 IDiskQuotaUser 指针。
IDiskQuotaUserBatch::RemoveAll
从批列表中删除所有 IDiskQuotaUser 指针。
太多了:使用到再查吧
https://learn.microsoft.com/zh-cn/windows/win32/fileio/working-with-nvme-devices