2016-03-23 235 views
0

以下代碼在一臺PC上工作,但不在其他PC上工作。兩臺PC都有Windows 7作爲其操作系統。Win32-Api C++中的CreateFile(...)失敗

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"); 
} 

的PC是成功的輸出打開文件:

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

其他PC無法打開該文件。輸出是:

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

有人知道爲什麼會發生這種情況嗎?也許這是一個權利不足的問題?

+2

也許第二臺計算機沒有運行創建該設備專用文件的驅動程序。 –

+1

您的錯誤檢查有些虛假。如果API調用失敗,只調用'GetLastError'。你不檢查失敗。 –

回答

3

從MSDN的CreateFile() documentation

OPEN_EXISTING

打開一個文件或設備,只要它存在。

如果指定的文件或設備不存在,則該函數將失敗,並且最後一個錯誤代碼將設置爲ERROR_FILE_NOT_FOUND(2)。

所以這意味着\\\\.\\interception00存在於一臺計算機上,但不存在於其他計算機上。嘗試使用通常能夠打開文件/設備的其他程序來查看。

或者只是修復\\\\.\\interception00不可用。

+0

你知道一種方式/工具來觀看所有可用的設備嗎? – Andre

+0

我不知道。抱歉。其他人? –

+0

我現在知道了。這是一個名爲WinObj的軟件:) – Andre