CreateFile() Fehler Mit GetLastError() = 5
Ich geschrieben habe eine Beispiel-Anwendung zum Lesen der Datei von der anderen Datei. Wenn ich diese Anwendung ausführen, bilden virtuelle Maschine, die ich bin immer Zugriff verweigert. Unten ist der code.
int _tmain(int argc, _TCHAR* argv[])
{
WCHAR *wcsPath = L"\\\\150.160.130.22\\share\\123.XML";
HANDLE hFile = CreateFileW(wcsPath,
GENERIC_READ,
FILE_SHARE_READ,
NULL,
OPEN_EXISTING,
0,
0);
if (NULL == hFile)
{
printf("failed - %d", GetLastError());
}
return 0;
}
Bitte lassen Sie mich wissen, keine änderungen.
- Sehen Sie, wenn Sie können, öffnen Sie die Datei mit dem Editor. Die Rechte werden pro Benutzer, nicht pro-Programm - wenn Sie nicht Lesen können, es aus Editor, Ihr Programm auch nicht.
- ich kann die Datei in Editor öffnen
- Sie haben zu prüfen, ob der Benutzer die Ausführung des Programms hat das Recht, die Datei zu öffnen, die rechts um die Freigabe zu öffnen ist und die Datei nicht in einem anderen Programm geöffnet.
- Von der virtuellen Maschine aus, öffnen Sie den Explorer, lokalisieren Sie die Datei. Dann gehe zu einem
Security
tab. Klicken Sie aufAdvanced
. Klicken Sie aufEffective Permissions
, und prüfen Sie, ob Sie alle erforderlichen Berechtigungen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Fehler code 5 steht für "Zugriff Verweigert". Sie sollten überprüfen Sie Ihre Benutzerrechte.
Den error-Ausgang des CreateFileW() ist INVALID_HANDLE_VALUE, nicht NULL. Nun, NULL-auf jeden Fall klingt wie ein falscher Wert für ein Datei-handle zu, aber trotzdem.
Ist der eingefügte code-snippet genau den Inhalt des Programms, oder eine Nacherzählung?
EDIT: ich sehe, es gibt eine VM eingebunden. Können Sie die Datei in Editor öffnen von der virtuellen Maschine wo das Programm ausgeführt wird und erroring?
FILE_SHARE_*
Einstellung. Es kann FILE_SHARE_WRITE oder FILE_SHARE_DELETE.Ich glaube die Dokumentation für CreateFile hält die Antwort.
Es kann, dass Ihr dwShareMode das problem verursacht. Mit
FILE_SHARE_READ
es sagt, "damit die anderen Dosenöffner zu öffnen die Datei für den LESE-Zugriff". Wenn Sie nicht angeben, FILE_SHARE_WRITE` , die dann andere Dosenöffner nicht in der Lage, die Datei zu öffnen, die für das schreiben - Ihr Anruf würde verhindern, dass.Aber, CreateFile, glaube ich, auch nicht, wenn die sharemode würde verletzt werden, indem vor-öffner. Wenn das wahr ist, dann, wenn eine andere Anwendung bereits hat die Datei zum schreiben geöffnet werden-Zugriff, dann ist dein Aufruf von CreateFile fehl, wenn Sie angeben, dwShareMode =
FILE_SHARE_READ
. Sehen Sie? Geben SieFILE_SHARE_WRITE | FILE_SHARE_READ
für das dwShareMode parameter.Versuchen Sie es.
ERROR_SHARING_VIOLATION
.