Accueil > Forum > > > > Protection d'un fichier
Protection d'un fichier
mercredi 9 novembre 2005 à 10:14:01 |
Protection d'un fichier

mammnon
|
Bonjour à tous. Petite question qui va probablement en faire rire plus d'un: Comment bloquer completement l'acces à un fichier?, voir à un dossier? Pour l'instant j'ai un programme (en fait un service mais bon...) qui ouvre un handle vers le fichier a proteger et le referme pas. HANDLE fichier= CreateFile ( "c:\\mon_fichier.txt", MAXIMUM_ALLOWED | GENERIC_READ | GENERIC_WRITE, 0, 0,OPEN_EXISTING, FILE_FLAG_SEQUENTIAL_SCAN | FILE_ATTRIBUTE_SYSTEM, NULL ); De cette manière il s'avere impossible de le supprimer (tant que mon prg tourne)! Oui mais j'ai l'esprit tordu et j'ai fais quelques test et là oh! surprise! il est possible de RENOMMER le fichier! Du coup au prochain demarrage mon service ne pourra pas ouvrir le handle vers le fichier et je l'ai dans **********! J'ai déjà fait ca: SetFileAttributes("c:\\mon_fichier.txt",FILE_ATTRIBUTE_HIDDEN | FILE_ATTRIBUTE_READONLY ); donc maintenant ca complique encore plus la chose mais il est toujours possible de supprimer mon satané fichier! Si quelqu'un a une idée de génie, ca serrais cool de la partager....même une idée tout court serrait la bienvenue... Tom@
|
|
mercredi 9 novembre 2005 à 10:38:23 |
Re : Protection d'un fichier

BruNews
|
Ton HANDLE fichier est surement invalide. J'ai testé: int WINAPI WinMain(HINSTANCE h, HINSTANCE x, LPSTR ystr, int z) { HANDLE hfl = CreateFile("d:\\aaa.txt", GENERIC_READ | GENERIC_WRITE, 0, 0, OPEN_ALWAYS, 0, 0); if(hfl == INVALID_HANDLE_VALUE) return 0; MessageBox(0, "OK", "R", 0); CloseHandle(hfl); return 0; } Tant que MessageBox est affichée il est tout à fait impossible de renommer, éditer ou supprimer le fichier. ciao... [ Lien ]BruNews, MVP VC++
|
|
mercredi 9 novembre 2005 à 11:04:33 |
Re : Protection d'un fichier

mammnon
|
LOL, j'ai pas pensé à verifier que mon handle est bon...je verifie et je tiens au courant
thomas
|
|
mercredi 9 novembre 2005 à 11:10:06 |
Re : Protection d'un fichier

mammnon
|
Bon mauvaise nouvelle....  Mon Handle est bon et je peux toujours renommer le fichier MAIS BruNews tu n'avais pas tort: effectivement ouvrir le handle empeche de le renommer quand c'est un prg standard. Le problème vient donc du fait que le handle est ouvert a partir d'un service et non d'un executable classique... Tom@
|
|
mercredi 9 novembre 2005 à 11:38:14 |
Re : Protection d'un fichier

BruNews
|
C'est certain, à partir d'un service il est ouvert dans un autre 'contexte' et la session en cours n'a pas eu la restriction d'accès. Vérifie si ton service est 'system' ou 'local'. ciao... [ Lien ]BruNews, MVP VC++
|
|
mercredi 9 novembre 2005 à 11:51:23 |
On avance, on avance....on a plus assez d'essence...

mammnon
|
Je me moque pas mais à la question de savoir si mon service est "system" ou "local" je reponds qu'il est noté comme "Système local" dans le gestionnaire de service...dsl Voilà comment je l'ai créé: SC_HANDLE schService = CreateService(schSCManager,NOM1,NOM2, SERVICE_ALL_ACCESS, // Type d'acces SERVICE_WIN32_OWN_PROCESS, // Type de service SERVICE_AUTO_START, // Pour le demarrage automatique SERVICE_ERROR_NORMAL, // error control type lpszBinaryPathName, // service's binary NULL, // no load ordering group NULL, // no tag identifier NULL, // no dependencies NULL, // Si null demarrer en tant que compte system NULL); // Mot de passe : null si demarrer en tant que system Voilà, autant vous dire que j'ai pas ré-inventer la roue donc si quelqu'un trouve que ca ressemble a son code c plus que possible... Bon alors j'ai posé une colle? La question de protection d'un fichier est devenue: Comment un service peux-t-il ouvrir un handle en mode exclusif avec tous les utilisateurs? Tom@
|
|
mercredi 9 novembre 2005 à 12:06:44 |
Re : Protection d'un fichier

BruNews
|
désolé c'était 'local system' ou 'local service'. Je m'occupe de ton problème dès que possible. ciao... [ Lien ]BruNews, MVP VC++
|
|
jeudi 10 novembre 2005 à 13:01:27 |
Re : Protection d'un fichier

BruNews
|
Réponse acceptée !
As-tu essayé de mettre un DACL pour restreindre l'accès ? Regarde ici si ça peut t'aider: [ Lien ]ciao... [ Lien ]BruNews, MVP VC++
|
|
lundi 14 novembre 2005 à 14:40:42 |
Re : Protection d'un fichier

mammnon
|
Merci BruNews de m'avoir mis sur la voie... Bon alors comme ca ca fonctionne mais il y a encore des choses bizarres. Par exemple si le prg creer le fichier les droits sont correctement placés. Sinon, sur un fichier dejà existant, ca ne fait que empecher reelement son ouverture, sa destruction, et son renommage... Bon bah pour ceux que ca interesse voici un bout de code, condensé de tout ce que j'ai trouvé sur le sujet, qui permet de vraiment interdire un fichier: (dsl pour les commentaires) SECURITY_ATTRIBUTES sa; SECURITY_DESCRIPTOR SD; PACL pACL = NULL; EXPLICIT_ACCESS ea[2]; SID_IDENTIFIER_AUTHORITY SIDAuthWorld = SECURITY_WORLD_SID_AUTHORITY; SID_IDENTIFIER_AUTHORITY SIDAuthNT = SECURITY_NT_AUTHORITY; PSID pEveryoneSID = NULL, pAdminSID = NULL; sa.nLength = sizeof(SECURITY_ATTRIBUTES); sa.bInheritHandle = FALSE; BOOL bInitOk = InitializeSecurityDescriptor( &SD,SECURITY_DESCRIPTOR_REVISION ); if ( bInitOk ){ // give the security descriptor a Null Dacl // done using the "TRUE, (PACL)NULL" here if(AllocateAndInitializeSid(&SIDAuthWorld, 1,SECURITY_WORLD_RID,0, 0, 0, 0, 0, 0, 0,&pEveryoneSID)){ // Initialize an EXPLICIT_ACCESS structure for an ACE. // The ACE will allow Everyone read access to the key. ZeroMemory(&ea, 2 * sizeof(EXPLICIT_ACCESS)); ea[0].grfAccessPermissions = KEY_READ; ea[0].grfAccessMode = SET_ACCESS; ea[0].grfInheritance= NO_INHERITANCE; ea[0].Trustee.TrusteeForm = TRUSTEE_IS_SID; ea[0].Trustee.TrusteeType = TRUSTEE_IS_WELL_KNOWN_GROUP; ea[0].Trustee.ptstrName = (LPTSTR) pEveryoneSID; if(AllocateAndInitializeSid(&SIDAuthNT, 2,SECURITY_BUILTIN_DOMAIN_RID,DOMAIN_ALIAS_RID_ADMINS,0, 0, 0, 0, 0, 0,&pAdminSID)){ // Initialize an EXPLICIT_ACCESS structure for an ACE. // The ACE will allow the Administrators group full access to the key. ea[1].grfAccessPermissions = KEY_ALL_ACCESS; ea[1].grfAccessMode = SET_ACCESS; ea[1].grfInheritance= NO_INHERITANCE; ea[1].Trustee.TrusteeForm = TRUSTEE_IS_SID; ea[1].Trustee.TrusteeType = TRUSTEE_IS_GROUP; ea[1].Trustee.ptstrName = (LPTSTR) pAdminSID; if(ERROR_SUCCESS == SetEntriesInAcl(2, ea, NULL, &pACL)){ BOOL bSetOk = SetSecurityDescriptorDacl( &SD,TRUE,pACL,FALSE ); if ( bSetOk ){ // Make the security attributes point // to the security descriptor sa.lpSecurityDescriptor = &SD; protection = CreateFile ( "c:\\lcc\\projects\\executable.exe",MAXIMUM_ALLOWED | GENERIC_READ, 0, &sa,OPEN_EXISTING, FILE_FLAG_SEQUENTIAL_SCAN | FILE_ATTRIBUTE_SYSTEM, NULL ); // Free the memory allocated for the SECURITY_DESCRIPTOR. LocalFree(sa.lpSecurityDescriptor); } } } } } Mammnon
|
|
Cette discussion est classée dans : fichier, file, handle, protection, attribute
Répondre à ce message
Sujets en rapport avec ce message
ouverture de fichier avec les MFC [ par steph76 ]
Bonjourvoila je programme une application qui ha beusoin d'ouvrir 1 fichier via httpJ'ai donc fait le code suivantCStdioFile *file;CInternetSession IS
Problème avec traitement de fichier (cplusplus !) [ par Sianrin ]
Voila, j'explique mon problème. Pour voir un peu comment les accès au fichiers se géraient en cplusplus, je me suis mis en tête de faire un programme
Enregistrer en HEXA un texte avec gcc !! [ par UncleShu ]
/* * Ce programme affiche le fichier en HEXADECIMAL et se copie lui-même avec * une autre exetenstion (.txt). Moi je voudrais qui affiche le fichier *
Petit probleme de code en C sur Linux !! [ par UncleShu ]
Je voudrais créer un fichier dans le réperoire personnel d'un utilisateur mais mon code ne marche pas !!#include #include #include #define DIR $HOM
Mettre un fichier .exe dans un buffer [ par guiguikun ]
Je n'arrive pas a mettre un fichier executable en memoire.sur les 100Ko du fichier, mon buffer ne compte que les 3 premiers octets (caracteres)voici m
[C] Transfert de fichier par sockets [ par bonobo78 ]
salut ! j'ai un petit pb pour transmettre un fichier via des sockets.En fait, je decoupe le fichier en petit bout de 1024 octets et je transmets chaqu
prob avec nom de fichier. [ par kach23 ]
bonjour, je debute etje réalise une acquisition de mesure avec builder.je souhaite que le nom du fichier ouvert a chaque acquisition soit different.vo
GROS problème avec ' tellg() ' [ par Sanke ]
Bonjour à tous, je poste ce message parce que je ne comprends pas ce qui se passe avec tellg() :je m'explique, je lis un fichier ligne à ligne dont vo
Pb de gestion de fichier avec fstream [ par Bub325 ]
Salut,J'ai deux problème distinct avec fstream, Le premier est que lorsque j'arrive à la fin d'un fichier, je ne peut plus revenir plus haut dans ce d
lire un fichier [ par Toobad ]
J'utilise GetFileSize pour me renvoyer la taille du fichier précédemment ouvert et ensuite j'appelle ReadFile en lui passant la valeur DWORD comme nbr
Livres en rapport
|
Derniers Blogs
UNE JOLIE-HORLOGE ET PAS QU'UN PEU !UNE JOLIE-HORLOGE ET PAS QU'UN PEU ! par neodante
Pour les possesseurs d'iPhone, ça y est Bijin Tokei - qui se traduit littéralement en Français par " Jolie Horloge " - est arrivé et GRATUITEMENT s'il vous plaît ! Après la version Tokyo, Hokkaido, night club, racing, Gal, "pour les mademoiselles'", . voi...
Cliquez pour lire la suite de l'article par neodante TECHDAYS PARIS 2010 : CONNECTEZ VOS DONNéES à SHAREPOINT 2010 AVEC LES BUSINESS CONNECTIVITY SERVICESTECHDAYS PARIS 2010 : CONNECTEZ VOS DONNéES à SHAREPOINT 2010 AVEC LES BUSINESS CONNECTIVITY SERVICES par ROMELARD Fabrice
Animé par: Gaetan Bouveret et Julien Chomarat Business Connectivity Services (BCS) est dans SharePoint 2010 la version 2 de Business Data Catalog (BDC dans SharePoint 2007). Il s'agit de la solution permettant de visualiser des données provenan...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice [DIVERS] SUIVRE VOS SéRIES PRéFéRéS SUR LA TOILE[DIVERS] SUIVRE VOS SéRIES PRéFéRéS SUR LA TOILE par orion
Comme de nombreux geek, je suis un grand amateur de série TV et je rate régulièrement des épisodes de mes séries préférés. Une solution s'offre à vous avec ce merveilleux site : Tv Gorge - www.tvgorge.com Moteur de recherche à l'appui, vous pouvez ...
Cliquez pour lire la suite de l'article par orion TECHDAYS PARIS 2010 : LA BI DANS SHAREPOINT 2010TECHDAYS PARIS 2010 : LA BI DANS SHAREPOINT 2010 par ROMELARD Fabrice
Animé par: Vincent Bellet et Baptiste Giraudier La BI dans SharePoint 2010, Les nouveaux services d'application dans SP2010 et SQL Server Reporting services 2008 R2. La BI dans SharePoint est généralisée pour tous afin de permettre à tous les coll...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice
Forum
RE : WIN APIRE : WIN API par racpp
Cliquez pour lire la suite par racpp WIN APIWIN API par omarino_007
Cliquez pour lire la suite par omarino_007
Logiciels
DB-MAIN (9.1.0)DB-MAIN (9.1.0)DB-MAIN is a data-modeling and data-architecture tool. It is designed to help developers and anal... Cliquez pour télécharger DB-MAIN Xilisoft DPG Convertisseur (5.1.37.0120)XILISOFT DPG CONVERTISSEUR (5.1.37.0120)Xilisoft DPG Convertisseur offre aux fans de Nintendo DS une bonne solution leur permettant de dé... Cliquez pour télécharger Xilisoft DPG Convertisseur GraphicsGale (2.01.01)GRAPHICSGALE (2.01.01)GraphicsGale est un logiciel de PixelArt avec de nombreuse fonctionnalités permettant de réalisé ... Cliquez pour télécharger GraphicsGale Architecte 3D (Platinum 2010)ARCHITECTE 3D (PLATINUM 2010)Architecte 3D Platinium vous permet de concevoir facilement les plans votre future maison, de l'é... Cliquez pour télécharger Architecte 3D TeamViewer 5 (TeamViewer 5)TEAMVIEWER 5 (TEAMVIEWER 5)Dépanner un ami,expliquer une manipulation devient un jeu d'enfant.
Prise en main d'un autre ord... Cliquez pour télécharger TeamViewer 5
|