J'ai écrit une DLL en cours de chargement dans un processus de service s'exécutant en tant que système local. Ne devrais-je pas être en mesure de supprimer les fichiers que je crée?DeleteFile échoue après CreateFile/Close handle dans le compte de service SYSTEM
HANDLE hFile = CreateFileW(m_achTempFilePath, GENERIC_READ|GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL) ;
réussit. alors je cours CloseHandle(hFile)
et DeleteFile(m_achTempFilePath)
Supprimer le fichier échoue avec l'accès refusé.
J'ai exécuté ce qui suit et transmis &sa
en tant qu'attributs de sécurité à CreateFile
, puis DeleteFile
réussit. Mais cela donne à tout le monde un contrôle total. Je ne veux pas ça.
Quelle est la bonne façon de le faire?
CDacl dacl;
dacl.AddAllowedAce(Sids::World(), SPECIFIC_RIGHTS_ALL | STANDARD_RIGHTS_ALL) ;
CSecurityDesc sd;
sd.SetDacl(dacl);
CSecurityAttributes sa;
sa.Set(sd, true);
Pour le dossier où les fichiers temporaires sont créés, ses autorisations peuvent-elles être définies pour refuser spécifiquement une opération "Supprimer" (tout en autorisant d'autres opérations)? Pour vérifier cela, vous pouvez explorer le menu contextuel "Propriétés" du dossier dans l'Explorateur et continuer à choisir les vues "Avancées" pour l'utilisateur du SYSTÈME jusqu'à ce que vous voyiez "Supprimer" séparé des autres opérations. –
Comment puis-je voir les autorisations pour l'utilisateur du système sans prendre possession du répertoire? J'ai suivi les instructions [ici] (http://superuser.com/questions/172437/run-explorer-in-system-account-on-windows-vista-or-7-using-sysinternal-s-psexec). Il démarre le menu Démarrer en tant que système, mais il lance toujours l'interface utilisateur de l'explorateur pour parcourir le système de fichiers en tant que compte d'utilisateur local. Le répertoire est c: \ ProgramData \ Microsoft \ Search \ Data \ Temp \ usgthrsvc si vous voulez vérifier sur votre ordinateur local. – tdemay
Correction ... J'ai oublié. Je suis passé à C: \ ProgramData ... J'ai créé un répertoire sous le répertoire de données de l'application commune. Vous pouvez y créer des répertoires et des fichiers, mais vous ne pouvez pas les supprimer dans le compte de service fonctionnant en tant que système local. – tdemay