我正在尝试列出 Windows 上的所有远程和本地驱动器。使用 GetLogicalDrives() 和 GetDriveType(),映射到字母的任何驱动器都是一个相当简单的问题。
主要问题与 UNC 路径有关,例如 \server\share\,而如果我已经知道路径,GetDriveType() 将正常工作,但使用 GetLogicalDrives() 发现它显然不起作用。我还希望能够在单个网络位置下找到多个共享,例如 \server\share1\ 和 \server\share2\
我尝试过使用像 WNetGetNetworkInformation() WNetEnumResource() 和 WNetOpenEnum() 这样的 Windows api 调用,但没有取得任何真正的成功,而且我不确定使用这些调用是否能得到我正在寻找的结果。
我的代码的当前(简化)状态是:
#include <windows.h>
#include <iostream>
int main() {
DWORD drives = GetLogicalDrives();
DWORD mask = 1;
for(UINT i = 0; i < 32; i++) {
if(mask & drives) {
CHAR driveName[] = {(CHAR)('A' + i), ':', '\\', 0};
UINT driveType = GetDriveTypeA(driveName);
std::cout << "Drive " << driveName << " is " <<
(driveType == DRIVE_REMOTE ? "remote" : "local") << '\n';
}
mask <<= 1;
}
return 0;
}
任何帮助,甚至是可能将我推向正确方向的 API 调用,我将不胜感激。