使用GetLogicalDriveStrings()获取未知数据

Getting unknown data with GetLogicalDriveStrings()

本文关键字:未知 未知数 数据 获取 GetLogicalDriveStrings 使用      更新时间:2023-10-16

使用下面的代码来获取我的驱动器名称:

const DWORD buffer_length = sizeof(DWORD)*CHAR_BIT;
WCHAR buffer[buffer_length] = {0};
GetLogicalDriveStrings(buffer_length,buffer);
std::set<wchar_t> drives_letters;
for(auto e : buffer)
{
    drives_letters.insert(e);
}  

因此,我得到了以下输出(在drives_letters上循环):

: //what on earth is this?  
C 
D 
E 
F 
G 
I 
 //and what on earth is this?  

GetLogicalDriveStrings返回形式为C:的字符串。这可以从以下文档中推断出来:

缓冲区中的每个字符串都可以用于根目录所在的位置例如用于GetDriveTypeGetDiskFreeSpace功能。

由于您将这些字符放入一个集合中,不允许重复,因此您最终会得到所有不同的驱动器号加上一个双冒号和一个反斜杠。冒号打印在前,反斜杠打印在后的原因是std::set本质上是有序的,所以每个字符的ASCII码决定了。

您的for循环错误。假设GetLogicalDriveStrings()只返回单个驱动器号,但事实并非如此(如果需要,请使用GetLogicalDrives())。它返回驱动器根文件夹的路径,因此您需要更改以下for循环:

const DWORD buffer_length = 104; // can return drive paths A: - Z:
WCHAR buffer[buffer_length+1] = {0}; // room for null terminator
GetLogicalDriveStrings(buffer_length, buffer);
std::set<wchar_t> drives_letters;
for(wchar_t *drive = buffer; *drive != 0; drive += 4)
{
    drives_letters.insert(*drive);
}