Это от какого-то старого кода, который работал хорошо в течение нескольких лет, но в нашем новом проекте он получил ошибку. Я заменил все аргументы функции на константы, и попытался использовать версию с широким символом и ASCII, и все получили один и тот же результат:
// compile with UNICODE=1
HANDLE handle = CreateFile( L"\\\\.\\C", 0, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL );
// or
HANDLE handle = CreateFileW( L"\\\\.\\C", 0, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL );
// or
HANDLE handle = CreateFileA( "\\\\.\\C", 0, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL );
Возвращенный дескриптор 0xffffffff
, то есть INVALID_HANDLE_VALUE
и GetLastError()
возврат 2, что означает, что файл не найден.
Запуск программы с правами администратора получил тот же результат.