2016-03-23 5 views
0

Следующий код работает под одним ПК, но не на другом ПК. Оба компьютера имеют ОС Windows 7 в качестве ОС.Win32-Api CreateFile (...) на C++ не удалось

char device_name[] = "\\\\.\\interception00"; 
printf("device_name: %s \n", device_name); 

device_array[i].handle = CreateFile(device_name, GENERIC_READ, 0, NULL, OPEN_EXISTING, 0, NULL); 

DWORD error = GetLastError(); 
printf("GetLastError (Number): %d, ", error); 

if (error == ERROR_FILE_NOT_FOUND) 
{ 
    printf("error == ERROR_FILE_NOT_FOUND \n"); 
} 
else if (error == ERROR_SUCCESS) 
{ 
    printf("error == ERROR_SUCCESS \n"); 
} 
else 
{ 
    printf("error == UNBEKANNT \n"); 
} 

Выход ПК, который успешно открывает файл:

device_name: \\.\interception00 
GetLastError (Number): 0, error == ERROR_SUCCESS 

Другой ПК не сможет открыть файл. Выход:

device_name: \\.\interception00 
GetLastError (Number): 2, error == ERROR_FILE_NOT_FOUND 

У кого-то есть ключ, почему это происходит? Может быть, это проблема недостаточных прав?

+2

Возможно, на втором компьютере не запущен драйвер, который создает специальный файл этого устройства. –

+1

Ваша проверка ошибок несколько фиктивная. Вызывайте «GetLastError» только в случае сбоя вызова API. Вы не проверяете наличие сбоя. –

ответ

3

Из MSDN-х CreateFile() documentation:

OPEN_EXISTING

Открывает файл или устройство, только если оно существует.

Если указанный файл или устройство не существует, функция не работает, а код последней ошибки - ERROR_FILE_NOT_FOUND (2).

Это значит, что \\\\.\\interception00 существует на одном компьютере, но не в другом. Попытайтесь посмотреть с какой-нибудь другой программой, которая обычно открывает файл/устройство.

Или просто исправить это, что \\\\.\\interception00 не доступен.

+0

Знаете ли вы способ/инструмент для просмотра всех доступных устройств? – Andre

+0

Я не делаю. Сожалею. Кто-нибудь другой? –

+0

Я знаю сейчас. Это программное обеспечение под названием WinObj :) – Andre

 Смежные вопросы

  • Нет связанных вопросов^_^