Question

J'ai remarqué que si le paramètre de chemin vers les cibles de la fonction CreateFile \Windows\System32\ l'appel échoue avec le code d'erreur suivant ERROR_PATH_NOT_FOUND.

Le chemin du fichier est correct, je suis le propriétaire du dossier, la question est de savoir pourquoi l'appel échoue? Est-ce que MS ajouter politique spéciale interdisant le dossier d'être accessible?

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;
}
Était-ce utile?

La solution

  1. Peut-on voir quelques exemples de code?
  2. Avez-vous spécifié le lecteur, i.e. "C: \ Windows \ System32 \"
  3. Vous essayez d'ouvrir un fichier à l'intérieur system32?
  4. Est-ce que cela se produit sur Windows 7 uniquement? et
  5. Pourquoi avez-vous besoin de modifier quoi que ce soit à l'intérieur du premier system32 lieu?

Billy3

Autres conseils

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

Utilisation de Windows XP, les deux administrateurs / comptes standard ne nécessitent pas de droits administratifs pour obtenir un appareil de poignées.

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

Certaines solutions sont:

  1. Utilisez un service
  2. Utilisez sobriquet d'élévation COM
  3. Utilisez Manifest

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

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 modifier les propriétés et sélectionnez Exécuter en tant qu'administrateur toujours.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top