gpt4 book ai didi

c++ - CreateFile 和长设备名

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:44:56 26 4
gpt4 key购买 nike

我正在使用 CreateFile打开设备。一切正常,直到设备名称太长。

在文档中说:

In the ANSI version of this function, the name is limited to MAX_PATH characters. To extend this limit to 32,767 wide characters, call the Unicode version of the function and prepend "\\?\" to the path. For more information, see Naming Files, Paths, and Namespaces.

我正在尝试使用 CreateFileW 并将“\\?\”添加到路径中,但得到无效的句柄和

The system cannot find the path specified.

在 GetLastError() 中。

那么,这个技巧是否只对文件名有效,对设备名无效?有没有其他方法可以避免这个问题?

UPD1:没有前缀的设备名称如下所示:

\\.\devicename\EndsBy:\name1.exe|EndsBy:\name2.exe.

代码:

CreateFileW(path.c_str(), GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, 0, OPEN_EXISTING, FILE_FLAG_OVERLAPPED, 0));

最佳答案

\\? 前缀直接将路径发送到文件系统,无需预处理。

\\. 前缀绕过文件命名空间并使用 Win32 设备命名空间。

它们有不同的用途,不能混合在一起。

你可以自己试试。例如,这将打开空设备:

HANDLE hDevice = ::CreateFileW(L"\\\\.\\NUL", GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, 0, OPEN_EXISTING, 0, 0);

但是,如果您将路径更改为 L"\\\\?\\\\.\\NUL",它将失败。

要回答您的问题,是的,在路径前加上 \\? 仅对文件系统路径有效。

关于c++ - CreateFile 和长设备名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24295076/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com