在NT系统中,每个设备都有几个特殊的路径,在访问这些设备时可以当成文件访问,这些路径不区分大小写。
访问硬盘最常用的路径是:\\.\PhysicalDrive+数字,如\\.\PhysicalDrive0表示第一个物理硬盘。取得该硬盘句柄的方法一般用CreateFile(),如
CString hd=\\\\.\\PhysicalDrive0;
hDevice = CreateFile(
    hd,
    GENERIC_READ|GENERIC_WRITE,
    FILE_SHARE_READ | FILE_SHARE_WRITE,
    NULL,
    OPEN_EXISTING,
    0,
    NULL
    );
打开成功后就可以用ReadFile等函数进行读写操作。
访问硬盘还可以有其它路径,如“\Device\Harddisk0”。
如果想访问分区,可以有以下几种方法:
\\?\C:表示C盘的路径,用访问硬盘的方法可以对它进行访问。C盘还可以用"\Device\HarddiskVolume1","\Device\Harddisk0\Partition1",\\?\Volume{385baaca-8b42-11dc-bb79-0013d324fc7d}\(用GetVolumeNameForVolumeMountPoint()获得)。
提示:如果想获得硬盘整体的物理信息,可以用这个硬盘上任意一个分区的句柄来代替硬盘句柄。
如果发现某些路径用CreateFile打不开,可以用DefineDosDevice()给它定义一个盘符,这个盘符可以是A:,B:,也可以是特殊符号(如[:,]:)甚至是数字(1:,2:)。对于非字母的的盘符,在我的电脑里是不可见的,只有程序可以访问, 这种方法常用于访问隐藏分区。
例:
DefineDosDevice (DDD_RAW_TARGET_PATH, "[:"
          "\\Device\\Harddisk0\\Partition1");//分配一个“[:”盘符,该盘符不可见。
…………………………//处理代码
bRet = DefineDosDevice (
            DDD_RAW_TARGET_PATH|DDD_REMOVE_DEFINITION|
            DDD_EXACT_MATCH_ON_REMOVE, "[:",
            "\\Device\\Harddisk0\\Partition1");//用完后删除这个盘符。
编辑: 硬盘数据恢复中心