C++ 如果没有长路径前缀,使用卷GUID的Windows文件系统路径是否无效?

C++ 如果没有长路径前缀,使用卷GUID的Windows文件系统路径是否无效?,c++,windows,winapi,C++,Windows,Winapi,引用win32文档: 使用带有“\\?\”前缀的卷GUID路径时,必须指定完整路径 现在,我们在我的团队中对此进行了一些讨论,讨论了这是否意味着没有前缀就不能使用卷GUID路径,或者在使用卷GUID的“完整”(长?)路径时,应该使用前缀 第二种解释似乎不正确,因为使用任何Windows API都只能成功地使用guid之前的前缀 例如: std::wstring path = L"\\\\?\\Volume{fe31c178-7b35-4b43-9899-1dcd701d938a

引用win32文档:

使用带有“\\?\”前缀的卷GUID路径时,必须指定完整路径

现在,我们在我的团队中对此进行了一些讨论,讨论了这是否意味着没有前缀就不能使用卷GUID路径,或者在使用卷GUID的“完整”(长?)路径时,应该使用前缀

第二种解释似乎不正确,因为使用任何Windows API都只能成功地使用guid之前的前缀

例如:

    std::wstring path = L"\\\\?\\Volume{fe31c178-7b35-4b43-9899-1dcd701d938a}\\Test\\";

    bool success = CreateDirectoryW(path.c_str(), NULL);
success
仅当
\\?\
前缀位于
路径中时才会为
true


我们的问题在于使用第三方文件驱动程序,该驱动程序为我们提供不带前缀的路径。如果使用没有这个前缀的卷GUID路径显式无效,那么我想让他们知道这个错误。否则,我们将只处理我们这边的情况。

没有\\?\prefix win32错误的转换路径到nt路径。因此\\?\必须始终与卷路径一起使用,而不使用显式设备路径(前缀为“\\?\”、“\\\.\”、“/?/”、“/./”,等等),只有DOS驱动器和经典DOS设备名称(例如NUL、CON、AUX、PRN、COM1、LPT1以及CONIN$和CONOUT$)可以访问。否则,使用相对文件名将不可靠。