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;
}
È stato utile?

Soluzione

  1. Possiamo vedere qualche esempio di codice?
  2. Hai specificato l'unità, vale a dire "C: \ Windows \ System32 \"
  3. Stai cercando di aprire un file all'interno di system32?
  4. Questo si verifica solo su Windows 7? e
  5. 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:

  1. Utilizzare un servizio
  2. elevazione moniker Usa COM
  3. 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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top