您的示例代码中似乎存在一些错误。如果它实际上是从您的程序中复制和粘贴的,那么肯定会有其他事情发生。
首先,您使用 MBCS 字符串调用 Unicode 函数:第一个参数应该L
以_T()
.
其次,也许更重要的是,"\\\\.\\E"
它不是一个有效的名称。您缺少一个尾随冒号:要打开一个卷,它需要是 形式\\.\X:
,或者在您的情况下是"\\\\.\\E:"
。
在修复了这两个错误之后(第一个阻止编译,第二个需要获取除INVALID_HANDLE_VALUE
返回之外的任何内容),一切似乎都按预期工作。我用GetProcessHandleCount来统计打开句柄的个数,前后都一样:
HANDLE m_driveHandle = NULL;
HANDLE m_process = GetCurrentProcess();
DWORD handleCount;
GetProcessHandleCount(m_process, &handleCount);
cout << "Currently held handles: " << handleCount << endl;
for (int i = 0; i < 10; ++i) {
m_driveHandle = CreateFileW(L"\\\\.\\E:",
GENERIC_READ | GENERIC_WRITE,
FILE_SHARE_READ | FILE_SHARE_WRITE,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL
);
if (INVALID_HANDLE_VALUE == m_driveHandle) {
cout << "Invalid handle" << endl;
} else {
CloseHandle(m_driveHandle);
}
GetProcessHandleCount(m_process, &handleCount);
cout << "Currently held handles: " << handleCount << endl;
}
注释掉 CloseHandle 调用会导致 handleCount 按预期增加。