2016-03-23 10 views
0

Der folgende Code funktioniert unter einem PC, aber nicht auf einem anderen PC. Beide PCs haben Windows 7 als Betriebssystem.Win32-API CreateFile (...) in C++ fehlgeschlagen

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

Der Ausgang des PC, die erfolgreich öffnet die Datei ist:

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

Der andere PC nicht in der Lage ist, die Datei zu öffnen. Die Ausgabe ist:

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

Hat jemand eine Ahnung, warum das passiert? Vielleicht ist es ein Problem unzureichender Rechte?

+2

Wahrscheinlich führt der zweite Computer den Treiber nicht aus, der diese spezielle Gerätedatei erstellt. –

+1

Ihre Fehlerprüfung ist etwas falsch. Rufen Sie "GetLastError" nur auf, wenn der API-Aufruf fehlschlägt. Sie überprüfen nicht auf Fehler. –

Antwort

3

Von MSDN CreateFile() documentation:

OPEN_EXISTING

öffnet eine Datei oder ein Gerät nur dann, wenn es vorhanden ist.

Wenn die angegebene Datei oder das Gerät nicht vorhanden ist, schlägt die Funktion fehl, und der letzte Fehlercode ist auf ERROR_FILE_NOT_FOUND (2) gesetzt.

Das bedeutet also, \\\\.\\interception00 existiert auf einem Computer, aber nicht der andere. Versuchen Sie, mit einem anderen Programm zu suchen, das normalerweise die Datei/das Gerät öffnen kann.

Oder einfach nur beheben, dass \\\\.\\interception00 nicht verfügbar ist.

+0

Kennen Sie einen Weg/Werkzeug, um alle verfügbaren Geräte zu sehen? – Andre

+0

Ich nicht. Es tut uns leid. Jemand anderes? –

+0

Ich weiß jetzt. Es ist eine Software namens WinObj :) – Andre