2010-09-29 13 views
0

Vous essayez simplement de copier un fichier en utilisant la fonction CopyFile() du répertoire en cours vers C: \ windows \ system32 \ drivers.requestedExecutionLevel dans le fichier manifeste et l'échec de la fonction CopyFile()

J'ai écrit aussi manifestement avec "requestedExecutionLevel level =" highestAvailable "" et j'ai exécuté mt pour l'ajouter à l'exécutable résultant.

Lorsque j'essaie de l'exécuter, la boîte de dialogue Windows 7 UAC ressort, j'appuie sur "Oui", mais CopyFile() renvoie l'erreur "Accès refusé". Qu'est-ce qui ne va pas? Que dois-je vérifier?

Mon fichier manifeste:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> 
    <v3:trustInfo xmlns:v3="urn:schemas-microsoft-com:asm.v3"> 
    <v3:security> 
     <v3:requestedPrivileges> 
     <v3:requestedExecutionLevel level="requireAdministrator" uiAccess="false"/> 
     </v3:requestedPrivileges> 
    </v3:security> 
    </v3:trustInfo> 
</assembly> 

Mon morceau de code C:

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) 
{ 
    if (CopyFile ("aaa.sys", "C:\\windows\\system32\\drivers", FALSE)==FALSE) 
     ErrorExit ("CopyFile"); 
+0

Etes-vous en train d'essayer d'écraser un fichier MS appartenant à TrustedInstaller? Ou quelque chose qui est utilisé? – Anders

+0

Non, j'écris un fichier qui n'existe pas auparavant –

+0

Puisque vous dites que vous voyez la boîte de dialogue UAC, les réponses indiquant si votre manifeste est correct ou incorrectement attaché sont mal orientées. Vous élevez. –

Répondre

1

Hmm, pas vraiment sûr de ce que "highestAvailable" fait. Supprimer tous les doutes et utiliser "requireAdministrator" à la place, cela fonctionne toujours pour obtenir des privilèges d'administrateur complet. Assurez-vous également d'utiliser le nom et l'ID de ressource appropriés, RT_MANIFEST et 1.

+0

Non, ne fonctionne pas. –

+0

Je joins le manifeste en exécutant: mt -manifest 1.manifest -outputresource: 1.exe; 1 –

+0

Publiez le contenu du manifeste, quel type d'OS, les détails du compte d'utilisateur et les droits qu'il a dans le répertoire. –

0
  • requireAdministrator = Toujours requérir une élévation de l'administrateur.
  • highestAvailable = Si membre du groupe admin, l'élever. Si utilisateur normal, exécutez en tant qu'utilisateur normal sans élévation.
+0

ne fonctionnant pas tous les deux –