如何列出物理磁盘?

92
如何在Windows中列出物理磁盘? 为了获取可用的"\\\\.\PhysicalDrive0"列表。
16个回答

2
这是一种使用 WMI 调用的新解决方案。
然后你所需要做的就是调用:Here
queryAndPrintResult(L"SELECT * FROM Win32_DiskDrive", L"Name");

2
可能需要将旧的A:和B:驱动器包括在内,因为你永远不知道谁会使用它们!我厌倦了USB驱动器撞击我的两个仅用于Readyboost的SDHC驱动器。我一直在使用一种实用程序将它们分配给高字母Z:Y:,该实用程序将根据您的意愿为设备分配驱动器字母。我想知道.... 我能把Readyboost驱动器的字母设置为A:吗?是的!我能把我的第二个SDHC驱动器的字母设置为B:吗?是的!
我曾经使用过软盘驱动器,从来没有想过A:或B:会对Readyboost有用。
我的观点是,不要假定A:和B:不会被任何人用于任何事情,您甚至可能会发现旧的SUBST命令正在使用!

1
如果您想要“物理”访问,我们正在开发这个API,最终可以让您与存储设备通信。它是开源的,您可以查看一些信息的当前代码。请关注更多功能: https://github.com/virtium/vtStor

1

今天在我的RSS阅读器中看到这个。我为你有更简洁的解决方案。这个示例是用Delphi编写的,但很容易转换为C/C++(都是Win32)。

从以下注册表位置查询所有值名称: HKLM\SYSTEM\MountedDevices

逐一将它们传递到以下函数中,您将返回设备名称。非常干净简单!我在这里找到了这段代码的博客。

function VolumeNameToDeviceName(const VolName: String): String;
var
  s: String;
  TargetPath: Array[0..MAX_PATH] of WideChar;
  bSucceeded: Boolean;
begin
  Result := ”;
  // VolumeName has a format like this: \\?\Volume{c4ee0265-bada-11dd-9cd5-806e6f6e6963}\
  // We need to strip this to Volume{c4ee0265-bada-11dd-9cd5-806e6f6e6963}
  s :=  Copy(VolName, 5, Length(VolName) - 5);

  bSucceeded := QueryDosDeviceW(PWideChar(WideString(s)), TargetPath, MAX_PATH) <> 0;
  if bSucceeded then
  begin
    Result := TargetPath;
  end
  else begin
    // raise exception
  end;

end;

2
我想要获取物理名称,这样我就可以处理未分配空间,所以我猜测这个未分配空间没有安装卷 GUID... - CiNN
1
很抱歉,这不是我们正在寻找的内容,并且与@Alnitak的答案类似。 - Matt Joiner
1
你应该在Windows XP及更高版本中使用SetupApi,不再使用注册表来完成操作。在Win98中,使用注册表是一种方法,但现在已经过时了。 - Warren P

0

在Windows Powershell中

Get-WmiObject -Class Win32_DiskDrive -ComputerName <COMPUTERNAME> | select Name,SerialNumber,SCSITargetID,Size

-4

列出美式英语字母表中除了a和b以外的所有字母。"CDEFGHIJKLMNOPQRSTUVWXYZ"。使用CreateFile打开每个驱动器,例如CreateFile("\\.\C:")。如果它没有返回INVALID_HANDLE_VALUE,那么你就得到了一个“好”的驱动器。接下来,将该句柄传递给DeviceIoControl以获取磁盘号码。有关更多详细信息,请参见我的相关答案


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接