Errore di CreateFile in Windows7
-
23-08-2019 - |
Domanda
Ho notato che se il parametro percorso agli obiettivi di funzione CreateFile
\Windows\System32\
la chiamata non riesce con il seguente ERROR_PATH_NOT_FOUND
codice di errore.
Il percorso del file è corretto, io sono il proprietario della cartella, quindi la domanda è il motivo per cui viene chiamata fallendo? Ha MS aggiungere politica speciale che vieta la cartella da cui si accede?
Codice di esempio:
TCHAR szFile[MAX_PATH];
PathCombine(szFile, g_szSystemDirectory, "settings.ini");
HANDLE hFile = CreateFile(szFile,
GENERIC_READ,
0,
NULL,
OPEN_EXISTING,
0,
NULL);
if (hFile == INVALID_HANDLE_VALUE)
{
printf("INVALID FILE: %i", GetLastError());
return FALSE;
}
Soluzione
- Possiamo vedere qualche esempio di codice?
- Hai specificato l'unità, vale a dire "C: \ Windows \ System32 \"
- Stai cercando di aprire un file all'interno di system32?
- Questo si verifica solo su Windows 7? e
- Perché avete bisogno di modificare nulla all'interno system32 in primo luogo?
Billy3
Altri suggerimenti
Se si tratta di un'applicazione a 32 bit in esecuzione su un 64-bit OS, quindi chiamando Wow64DisableWow64FsRedirection () prima della chiamata a CreateFile leggerà da "C: \ Windows \ System32" invece di "C: \ Windows \ Syswow64", che è probabilmente quello che ti sta succedendo.
Utilizzo di Windows XP sia per gli amministratori / conti standard non richiedono diritti amministrativi per ottenere dispositivi a maniglie.
Questa è cambiato su Vista, Windows 7 (UAC) in cui si deve disporre di diritti di amministratore per ottenere le maniglie del dispositivo.
Alcune soluzioni sono:
- Utilizzare un servizio
- elevazione moniker Usa COM
- Usa manifesto
Nota: Se avete solo bisogno di interrogare informazioni statistiche da un dispositivo di questo non richiede diritti amministrativi. Quando si utilizza CreateFile()
, specificare zero (0) per il dwDesiredAccess parametro.
Sei programma probabilmente deve essere eseguito come amministratore. Dovrete aumentare i privilegi, anche se sei un amministratore. Tasto destro del mouse quando si esegue il programma e fare clic su "Esegui come amministratore", o modificare le proprietà e selezionare sempre eseguito come amministratore.