2009-05-20 7 views
0

J'ai remarqué que si le paramètre path de la fonction CreateFile cible \Windows\System32\, l'appel échoue avec le code d'erreur suivant: ERROR_PATH_NOT_FOUND.Erreur CreateFile dans Windows7

Le chemin du fichier est correct, je suis le propriétaire du dossier, donc la question est pourquoi l'appel échoue? MS a-t-il ajouté une politique spéciale interdisant l'accès au dossier?

Exemple de code:

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

Répondre

2
  1. Avez-vous spécifié le lecteur, par exemple, "C: \ Windows \ System32 \"
  2. Essayez-vous d'ouvrir un fichier dans system32?
  3. Est-ce que cela se produit uniquement sur Windows 7? Pourquoi avez-vous besoin de modifier quoi que ce soit dans system32 en premier lieu?

Billy3

+0

1) Je vais ajouter dans une seconde. 2) Oui. 3) Oui. 4) Oui, fonctionne bien sous XP. 5) Besoin de charger un fichier de configuration. – arul

+0

Pourquoi le fichier de configuration est-il dans system32? Ne devriez-vous pas le mettre dans% appdata%? –

+0

Oh, et est-ce un système d'exploitation 64 bits? –

0

Vous êtes programme doit probablement exécuter en tant qu'administrateur. Vous devrez escalader vos privilèges, même si vous êtes un administrateur. Faites un clic droit lorsque vous exécutez le programme et cliquez sur "Exécuter en tant qu'administrateur", ou modifiez les propriétés et sélectionnez toujours exécuter en tant qu'administrateur. Pouvons-nous voir un exemple de code?

+0

Essayé cela, toujours la même erreur. – arul

2

Si c'est une application 32 bits fonctionnant sur un système d'exploitation 64 bits, puis en appelant Wow64DisableWow64FsRedirection() avant l'appel à CreateFile va lire « C: \ Windows \ System32 » au lieu de " C: \ Windows \ Syswow64 ", ce qui est probablement ce qui vous arrive.

+0

Bon à savoir, merci. – arul

2

Sous Windows XP, les administrateurs/comptes standard n'ont pas besoin de droits d'administration pour obtenir un descripteur de périphérique.

Cela a changé sur Vista, Windows 7 (UAC) où vous devez avoir des droits d'administrateur pour obtenir des poignées de périphériques.

Certaines solutions sont:

  1. Utilisez un service
  2. Utiliser COM altitude sobriquet
  3. Utilisez Manifest

Note: Si vous avez seulement besoin d'interroger des informations statistiques à partir d'un périphérique ce doesn ne nécessitent pas de droits administratifs. Lorsque vous utilisez CreateFile(), spécifiez zéro (0) pour le paramètre dwDesiredAccess.

Questions connexes