如何在CreateFile中打开卷的文件系统?

xml*_*lmx 2 windows filesystems winapi runtime-error createfile

CreateFile上的MSDN页面说:该字符串"\\.\C:\"可用于打开C:卷的文件系统.但是,以下代码始终返回错误:ERROR_PATH_NOT_FOUND.

HANDLE h = CreateFile(L"\\\\.\\C:\\", FILE_READ_ATTRIBUTES, 
    FILE_SHARE_READ|FILE_SHARE_WRITE|FILE_SHARE_DELETE, 0, OPEN_EXISTING, 0, 0);
Run Code Online (Sandbox Code Playgroud)

我应该如何正确传递参数?

Har*_*ton 5

如果您想要一个卷句柄(用于I/O控制代码),您需要删除尾部斜杠.

为了获取根目录的句柄,您需要保留尾部斜杠并FILE_FLAG_BACKUP_SEMANTICSdwFlagsAndAttributes参数中传递标志.这在MSDN页面的"目录"标题下记录.例如,如果您打算打电话GetFileInformationByHandle或打算,这就是您想要做的GetFileInformationByHandleEx.

但是,通常,您不会打开根目录的句柄以列出文件.相反,您将使用FindFirstFile/ FindNextFile或其中一个相关功能.