如何获取有盘符但是未格式化的磁盘大小(RAW类型的磁盘)

轻箬笠 2017-10-09 11:32:30
我已经通过GetDiskFreeSpaceEx获取了有盘符且格式化了的磁盘(NTFS类型的磁盘)大小.
现在碰到一个问题,用这个函数获取有盘符但是未格式化的磁盘(RAW类型的磁盘)的大小,返回值为0,即操作失败.
有人知道怎么处理这种情况吗?
...全文
434 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
轻箬笠 2017-10-10
  • 打赏
  • 举报
回复
@赵4老师 @zjq9931 多谢两位的启发。最后换了个思路,就找到了。在PARTITION_INFORMATION_EX里面有个PartitionLength就可以得到分区总的字节数了,发送IOCTL_DISK_GET_PARTITION_INFO_EX指令就可以了。
赵4老师 2017-10-09
  • 打赏
  • 举报
回复
CreateFile The CreateFile function creates or opens the following objects and returns a handle that can be used to access the object: files pipes mailslots communications resources disk devices (Windows NT only) consoles directories (open only) HANDLE CreateFile( LPCTSTR lpFileName, // pointer to name of the file DWORD dwDesiredAccess, // access (read-write) mode DWORD dwShareMode, // share mode LPSECURITY_ATTRIBUTES lpSecurityAttributes, // pointer to security attributes DWORD dwCreationDisposition, // how to create DWORD dwFlagsAndAttributes, // file attributes HANDLE hTemplateFile // handle to file with attributes to // copy ); …… Disk Devices Windows NT: You can use the CreateFile function to open a disk drive or a partition on a disk drive. The function returns a handle to the disk device; that handle can be used with the DeviceIOControl function. The following requirements must be met in order for such a call to succeed: The caller must have administrative privileges for the operation to succeed on a hard disk drive. The lpFileName string should be of the form \\.\PHYSICALDRIVEx to open the hard disk x. Hard disk numbers start at zero. For example: String Meaning \\.\PHYSICALDRIVE2 Obtains a handle to the third physical drive on the user's computer.
  • 打赏
  • 举报
回复
赵老师说了理论,我这里来两个例子吧。 这里有两个例子: http://blog.csdn.net/snz/article/details/1702884 http://blog.163.com/cumt_xl/blog/static/19071504420130133653923/
好用的ramdisk,支持x64 1. 驱动程序的配置信息存放在下面注册表中: HKLM\System\CurrentControlSet\Services\RRamdisk\Parameters\ 为什么要用RRamdisk这个名字,因为XP SP1开始内置了一个ramdisk程序, 主要用于XP Embed内存运行的。 2. 参数: DiskSizeM, DiskSizeK 以M和K为单位的虚拟盘大小,K单位优先。 3. 参数: MediaType 虚拟盘模拟的磁盘类型: 1 -- 内存盘 2 -- 固定介质 (缺省) 3 -- 移动介质 4 -- 软驱,和移动盘区别不大 4. 参数: UsePAE 设置为1时,允许在32位windows下使用memory remap到4G之上的内存。要求32位2k/xp/vista,4G物理内存,BIOS打开memory remap/hole。 5. 参数: DriveLetter 所用盘符,缺省为 R: 6. 参数: SectorsPerCluster 希望的簇大小, 零由驱动程序决定: <= 2M FAT12, 簇=512 <= 32M FAT16, 簇=512 <= 64M FAT16, 簇=1k <= 128M FAT16, 簇=2k <= 256M FAT16, 簇=4k <= 512M FAT32, 簇=2k <= 16G FAT32, 簇=4k ...... 如果你选择的簇大小比缺省的小,分区会被格式化成FAT32格式。 7. 参数: Image 由rdutil程序管理,主要用以自动加载NTFS映像. 例如: 1) 加载虚拟盘,不要做任何操作 2) 格式化为NTFS FORMAT /FS:NTFS /Q /V:RamDisk /A:512 R: 3) 把NTFS的日志大小设到最小(2M) CHKDSK /L:2048 R: 4) 预设访问权限(例子是只允许管理员们使用虚拟盘) CACLS R:\ /G: BUILTIN\Adminstrators:F 5) 创建一些目录结构,如临时目录 MKDIR R:\TEMP 6) 压缩虚拟盘,并存到这个注册表中 rdutil R: registry 注释: 1) 你应该尽量不要往虚拟盘上放太多东西,压缩后的映像文件不能超过64K 2) 当你改变虚拟盘大小时必须重新创建映像文件 3) 当映像文件大小和虚拟盘大小不符时,虚拟盘将不再自动格式化。 如果要驱动自动格式化,必须删除这个注册表项。 rdutil 程序使用示例: 1) 备份注册表里的映像文件 rdutil save filename 2) 恢复注册表里的映像文件 rdutil load filename 3) 测试压缩映像文件大小 rdutil R: rdutil registry rdutil unpacked_file 第二条命令压缩注册表里设置的缺省盘符 第三条命令压缩被解开的映像文件 4) 压缩盘符并存入注册表 rdutil R: registry 5) 压缩盘符但保存到文件 rdutil R: packed_file 6) 把映像文件解开 rdutil unpack packed_file unpacked_file 7) 创建一个NTFS符号连接直接指向虚拟盘 rdutil link temp \ 8. 重新格式化虚拟盘 除了内存介质类型外,其它的盘符都可以重新格式化。如: 固定介质 FORMAT /FS:NTFS /FORCE /Q /V:RamDisk /A:512 R: 移动介质 ECHO Y | FORMAT /FS:NTFS /FORCE /Q /V:RamDisk /A:512 R: 你可以在开机脚本里对虚拟盘重新格式化。但不推荐再次格式化为FAT分区, 因为驱动程序格式化的分区比通用格式化程序效率更高。如果要把虚拟盘做 成映像文件作它用(特别是软驱),推荐重新格书化为标准格式。 9. 页面交换文件支持 如果你使用固定介质类型,并且不重新格式化,你可以用系统管理直接把 页面文件加到虚拟盘上。 如果你使用其它介质类型,或者需要重新格式化, 请使用addswap程序创建页面文件。 如: addswap r:\pagefile.sys 16 32 创建一个页面文件,最小16M,最大32M 10. TEMP 临时目录 驱动程序格式化时已经创建好了TEMP目录。需要的话要把TEMP和TMP环境变量 设到子目录下,不能设置到根目录。 11. NTFS 符号连接到虚拟盘 当使用内存盘介质类型时,不能从其它NTFS分区创建符号连接到虚拟盘。 固定和移动介质都没有问题。 12. Connectix VirtualPC 兼容性 如果VPC无法使用物理RAW磁盘时,不要使用固定介质类型。 13. 无盘符工作方式 把DriveLetter注册表值设为空,驱动将不创建任何盘符。注意不是删除 DriveLetter,否则缺省创建R: 无盘符方式下,用rdutil创建ram目录指向虚拟盘(只能在NTFS分区里): rdutil link C:\ramdisk 连接 C:\ramdisk 到虚拟盘根目录 rdutil link C:\TEMP TEMP 连接 C:\TEMP 到虚拟盘的 \TEMP 下 rmdir C:\ramdisk rmdir 可以直接删除连接点,不会影响连接目标 不推荐使用无盘符模式,因为大多是防毒程序无法实时监控无盘符的分区
安易硬盘数据恢复软件。软件功能强大,支持微软操作系统用到的NTFS分区、FAT和FAT32分区、exFAT分区的数据恢复,能够实现经过回收站删除掉的文件、被Shift Delete键直接删除的文件和目录、快速格式化/完全格式化的分区、分区表损坏、盘符无法正常打开的RAW分区数据、在磁盘管理中删除掉的分区、被重新分区过的硬盘数据、一键Ghost对硬盘进行分区、被第三方软件做分区转换时丢失的文件、把整个硬盘误Ghost成一个盘等数据文件。不仅如此,本软件用只读的模式来扫描文件数据信息,在内存中组建出原来的目录文件名结构,不会破坏源盘内容。安易硬盘数据恢复软件界面美观简洁、使用方便、文件恢复速度快,质量高,对于用户来说是一款很不错的软件,小编这里推荐大家使用这款软件! 安易硬盘数据恢复软件功能特色 1. 更强的反删除能力:当FAT32分区内Shift Delete直接删除文件,这个文件的记录信息遭到破坏,其它文件恢复软件往往恢复后打不开,本软件则自动对这种情况进行修正,更好的恢复出数据。当文件删除后如果这个盘还继续使用,会有新文件存入就覆盖破坏原来删除掉的文件名,本软件有扫描剩余扇区的功能来对文件数据进行按文件类型恢复,能扫描出更多的文件。 2. 更全面的反格式化能力:本软件对被格式化的分区扫描时,同时搜索FAT、FAT32、NTFS和exFAT等四种文件系统的目录文件记录,在内存中构造出原先的文件目录结构,即使格式化前后分区类型发生改变也能扫描出原来的数据。(其它有些恢复工具则需先将这个盘重新格回原来的分区类型才能描到数据)。本软件还具有闪电恢复被格式化的分区功能,可以在短短数分钟内扫描列出大硬盘被格掉的文件。 3. 强大的快速扫描丢失的分区功能:对分区表损坏、重新分区、一键Ghost分成四个分区、整个硬盘Ghost成一个分区、盘符打不开提示格式化盘符,本软件仅需数分钟便可扫描出原来的分区进行恢复。分区快速恢复的功能支持MBR分区表和GPT分区表,能大大减少数据扫描恢复的时间。 4. 按文件头扫描恢复功能:当文件记录被破坏的时候,是无法按原先的文件名来恢复的,本软件内置了多种按扩展名进行扫描的算法,支持Office文件(DOC/ DOCX/ XLS/ XLSX/ PPT/ PPTX)、数码相片文件(JPG/ NEF/CR2 /X3F/ SR2/ PNG)、视频文件(3GP/ MP4/ RMVB/ MOV/ MPG/ MOD/ FLV)、压缩包文件(ZIP/ RAR)等多种文件格式。 5. 支持ChkDsk的恢复:有时候做了磁盘检查,正常的文件统一都变成了扩展名是*.chk的文件,本软件能自动识别这种情况,按原来的文件类型自动把扩展名修正回来。 6. 新文件系统exFAT恢复功能:全面支持微软新推出的exFAT分区恢复,包括删除文件、删除目录、格式化、重新分区等多种情况。 7. 支持RAW类型分区的恢复:硬盘分区突然打不开,提示格式化,变成了RAW分区,本软件可以很快就列出完整的根目录结构来,目录文件的恢复效果非常好。 安易硬盘数据恢复软件 v9.65更新日志 改进删除SKP文件后的恢复效果。 安易硬盘数据恢复软件页面展示 安易硬盘数据恢复软件截图
软件介绍 安易数据恢复软件是一款文件恢复功能非常全面的软件,能够恢复经过回收站删除掉的文件、被Shift+Delete键直接删除的文件和目录、快速格式化/完全格式化的分区、分区表损坏、盘符无法正常打开的RAW分区数据、在磁盘管理中删除掉的分区、被重新分区过的硬盘数据、一键Ghost对硬盘进行分区、被第三方软件做分区转换时丢失的文件、把整个硬盘误Ghost成一个盘等。本恢复软件用只读的模式来扫描文件数据信息,在内存中组建出原来的目录文件名结构,不会破坏源盘内容。支持常见的NTFS分区、FAT/FAT32分区、exFAT分区的文件恢复,支持普通本地硬盘、USB移动硬盘恢复、 SD卡恢复、U盘恢复、数码相机和手机内存卡恢复等。采用向导式的操作界面,很容易就上手,普通用户也能做到专业级的数据恢复效果。 与其他恢复软件相比,本软件还具更多的功能特点: 1. 更强的反删除能力:当FAT32分区内Shift+Delete直接删除文件,这个文件的记录信息遭到破坏,其它文件恢复软件往往恢复后打不开,本软件则自动对这种情况进行修正,更好的恢复出数据。当文件删除后如果这个盘还继续使用,会有新文件存入就覆盖破坏原来删除掉的文件名,本软件有扫描剩余扇区的功能来对文件数据进行按文件类型恢复,能扫描出更多的文件。 2. 更全面的反格式化能力:本软件对被格式化的分区扫描时,同时搜索FAT、FAT32、NTFS和exFAT等四种文件系统的目录文件记录,在内存中构造出原先的文件目录结构,即使格式化前后分区类型发生改变也能扫描出原来的数据。(其它有些恢复工具则需先将这个盘重新格回原来的分区类型才能描到数据)。本软件还具有闪电恢复被格式化的分区功能,可以在短短数分钟内扫描列出大硬盘被格掉的文件。 3. 强大的快速扫描丢失的分区功能:对分区表损坏、重新分区、一键Ghost分成四个分区、整个硬盘Ghost成一个分区、盘符打不开提示格式化盘符,本软件仅需数分钟便可扫描出原来的分区进行恢复。分区快速恢复的功能支持MBR分区表和GPT分区表,能大大减少数据扫描恢复的时间。 4. 按文件头扫描恢复功能:当文件记录被破坏的时候,是无法按原先的文件名来恢复的,本软件内置了多种按扩展名进行扫描的算法,支持Office文件 (DOC/ DOCX/ XLS/ XLSX/ PPT/ PPTX)、数码相片文件(JPG/ NEF/CR2 /X3F/ SR2/ PNG)、视频文件(3GP/ MP4/ RMVB/ MOV/ MPG/ MOD/ FLV)、压缩包文件(ZIP/ RAR)等多种文件格式。 5. 支持ChkDsk的恢复:有时候做了磁盘检查,正常的文件统一都变成了扩展名是*.chk的文件,本软件能自动识别这种情况,按原来的文件类型自动把扩展名修正回来。 6. 新文件系统exFAT恢复功能:全面支持微软新推出的exFAT分区恢复,包括删除文件、删除目录、格式化、重新分区等多种情况。 7. 支持RAW类型分区的恢复:硬盘分区突然打不开,提示格式化,变成了RAW分区,本软件可以很快就列出完整的根目录结构来,目录文件的恢复效果非常好。

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧