Page 1 sur 2

interdire acces a un fichier

Publié : lun. 23/janv./2017 12:17
par ChaudEf
Bonjour, je cherche a interdire la supression d'un fichier, comme les fichiers du dossier system32 qui sont protege par windows.

j'ai essaye ca

Code : Tout sélectionner

icacls myfile /deny Everyone:(X)
mais windows me reponds
Everyone: Le mappage entre les noms de compte et les ID de s?curit? n'a pas ?t?
effectu?.
0 fichiers correctement trait?s ; ?chec du traitement de 1 fichiers

Re: interdire acces a un fichier

Publié : mar. 24/janv./2017 22:13
par celtic88
:wink:

Code : Tout sélectionner

CreateFile_( chemin_vers_le_fichier.s , #FILE_SHARE_WRITE| #FILE_SHARE_DELETE, 0, 0, #CREATE_ALWAYS| #CREATE_NEW, 0, 0)

Re: interdire acces a un fichier

Publié : mar. 24/janv./2017 22:15
par ChaudEf
Merci
En fait je parle d'un fichier qui existe déjà, pas un fichier que je vis créer

Re: interdire acces a un fichier

Publié : mar. 24/janv./2017 22:17
par celtic88
ChaudEf a écrit :Merci
En fait je parle d'un fichier qui existe déjà, pas un fichier que je vis créer
oki
https://msdn.microsoft.com/en-us/librar ... s.85).aspx
CreateFile_( chemin_vers_le_fichier.s , #FILE_SHARE_WRITE| #FILE_SHARE_DELETE, 0, 0, #CREATE_ALWAYS, 0, 0)

Re: interdire acces a un fichier

Publié : mar. 24/janv./2017 22:20
par ChaudEf
Je suis pas sur d'avoir compris, je fait createfile sur min fichier existant ? Ca ne va pas lui faire bobo ? :roll: :roll:

Re: interdire acces a un fichier

Publié : mar. 24/janv./2017 22:22
par celtic88
CreateFile function
Creates or opens a file or I/O device. The most commonly used I/O devices are as follows: file, file stream, directory, physical disk, volume, console buffer, tape drive, communications resource, mailslot, and pipe. The function returns a handle that can be used to access the file or device for various types of I/O depending on the file or device and the flags and attributes specified.
To perform this operation as a transacted operation, which results in a handle that can be used for transacted I/O, use the CreateFileTransacted function.

Traduction:
Fonction CreateFile
Crée ou ouvre un fichier ou périphérique d'E / S. Les périphériques d'E / S les plus couramment utilisés sont les suivants: fichier, flux de fichiers, répertoire, disque physique, volume, tampon de console, lecteur de bande, ressource de communication, processeur de messages et canal. La fonction renvoie une poignée qui peut être utilisée pour accéder au fichier ou au périphérique pour divers types d'E / S en fonction du fichier ou du périphérique et des indicateurs et attributs spécifiés.
Pour exécuter cette opération en tant qu'opération transactionnelle, ce qui entraîne une poignée qui peut être utilisée pour les E / S transactionnées, utilisez la fonction CreateFileTransacted.

Re: interdire acces a un fichier

Publié : mar. 24/janv./2017 22:27
par ChaudEf
Merci beaucoup :D :D

J'ai essaye et ca ne marche pas. :( :(

Code : Tout sélectionner

Debug CreateFile_( "c:\a.exe" , #FILE_SHARE_WRITE| #FILE_SHARE_DELETE, 0, 0, #CREATE_ALWAYS, 0, 0)
compile avec droit d'administrateur, et le fichier c:\a.exe s'efface toujours. :!: :!:

Re: interdire acces a un fichier

Publié : mar. 24/janv./2017 22:43
par celtic88
ChaudEf a écrit :Merci beaucoup :D :D

J'ai essaye et ca ne marche pas. :( :(

Code : Tout sélectionner

Debug CreateFile_( "c:\a.exe" , #FILE_SHARE_WRITE| #FILE_SHARE_DELETE, 0, 0, #CREATE_ALWAYS, 0, 0)
compile avec droit d'administrateur, et le fichier c:\a.exe s'efface toujours. :!: :!:

il faut que ton programme "qui protège le fichier" reste ouvert :)

Re: interdire acces a un fichier

Publié : mar. 24/janv./2017 22:46
par ChaudEf
ahh :oops: :oops: , j'avais pas compris.

Mon programme ne reste pas ouvert, il tourne une fois et c'est tout, et j'ai besoin qu'on ne puisse pas effacer apres qu'on l'ait ferme.

Merci beaucoup pour ton aide!!

Re: interdire acces a un fichier

Publié : mar. 24/janv./2017 22:54
par celtic88

Re: interdire acces a un fichier

Publié : mar. 24/janv./2017 23:30
par ChaudEf
bon ben il doit y avoir un probleme chez moi...

j'ai fait

Code : Tout sélectionner

 SetFileAttributes("C:\Test.txt", #PB_FileSystem_Hidden | #PB_FileSystem_ReadOnly)
... et le fichier s'efface toujours!!!

Re: interdire acces a un fichier

Publié : mer. 25/janv./2017 9:31
par Mesa
Powershell sait faire ce genre de truc, tu as déjà un thead pour cela: http://www.purebasic.fr/french/viewtopi ... ll#p188761

et jette un coup d'oeil ici http://powershell-scripting.com/index.p ... 0&catid=14

ou là

https://msdn.microsoft.com/fr-fr/librar ... .110).aspx
il y a un progarmme en c++ que tu peux peut-être traduire en pb.

M.

Re: interdire acces a un fichier

Publié : mer. 25/janv./2017 11:28
par Marc56
icacls myfile /deny Everyone:(X)
(Si tu met (X) tu empêches d'utiliser le fichier. Il faut mettre (D) pour empêcher sa suppression)

À défaut de mappage des SID, utilise ceux-ci directement

Code : Tout sélectionner

icacls myfile /deny *S-1-1-0:(X)
'*' en tête pour signifier que c'est un SIS
S-1-1-0 = Everyone ou World
S-1-2-0 = Utilisateurs connectés
S-1-3-0 = Créateur du fichier
S-1-3-1 = Groupe du créateur du fichier

Mais attention, Everyone (ou World) signifie tout le monde et non pas l'utilisateur connecté etc

Je de déconseille de bidouiller sur les droits d'accès de fichiers sans avoir aucune notion de ce que sont les "sécurités" et les "permissions" d'un système de fichier (équivalent Windows des "droits" et "partages" des systèmes unix)

Si tu veux véritablement protéger certains fichiers de ton application, il est préférable de passer par le système normal, c'est à dire installer avec un compte différent de celui de l'utilisateur (et donc ayant des droits supérieurs) ou alors créer une fonction qui régénère le fichier si l'utilisateur le supprime par erreur (ex: fichier INI régénéré ou repris d'un backup auto dans un répertoire différent)

Le mieux est aussi d'éviter les installation en mode portable, préférer l'utilisation des répertoires de données utilisateurs (%homepath%) et données programme (%appdata%) qui évite que le débutant fasse une fausse manipulation. On atteint ces répertoires sous PB avec par exemple GetEnvironmentVariable("appdata")

Quant aux attributs de fichiers Readonly et System ils sont un héritage du DOS et sont purement symboliques pour Windows, il y aura juste un message d'information. N'importe quel utilisateur peut les supprimer s'il a accès au répertoire.

De plus, comme l'a dit Fred, bidouiller les fichiers systèmes rend l'application douteuse au yeux des antivirus.

PS. Ne me demande pas de complément d'aide par MP, je n'ai pas le temps, désolé.

:wink:

Re: interdire acces a un fichier

Publié : mer. 25/janv./2017 14:15
par Kwai chang caine
Marc56 a écrit :(Si tu met (X) tu empêches d'utiliser le fichier. Il faut mettre (D) pour empêcher sa suppression)

Code : Tout sélectionner

icacls myfile /deny Everyone:(D)
A ouaaaaaih !!! ça marche 8)
Super !!! j'ai un fichier devant mon groin, que je peux plus virer :mrgreen:

Euuuhh !!!! maintenant que KCC il a cassé la machine.....il lui vient soudainement une question..... y'a un antidote ??? :oops:

Re: interdire acces a un fichier

Publié : mer. 25/janv./2017 14:43
par Marc56
Lance ton gestionnaire de fichier en mode administrateur ou édite les propriétés et va dans l'onglet: Sécurité / Avancé / Autorisations (tu verras une ligne supplémentaire: Refuser / "tout le monde", supprime la ligne)

Démonstration en ligne de commande:

Console Windows mode normal

Code : Tout sélectionner

C:\AAA>echo aaa > myfile

C:\AAA>icacls myfile /deny *S-1-1-0:(D)
fichier traité : myfile
1 fichiers correctement traités ; échec du traitement de 0 fichiers

C:\AAA>del myfile
C:\AAA\myfile
Accès refusé.
(Pareil avec le gestionnaire de fichier de Windows)
Donc on inverse en remplaçant /deny par /grant

Code : Tout sélectionner

C:\AAA>icacls myfile /grant *S-1-1-0:(D)
fichier traité : myfile
1 fichiers correctement traités ; échec du traitement de 0 fichiers

C:\AAA>del myfile

C:\AAA>
ou

Console Windows mode Admin: on peut supprimer le fichier.

Code : Tout sélectionner

C:\AAA>del myfile

C:\AAA>dir myfile

 Répertoire de C:\AAA

Fichier introuvable
Hum, était-ce une bonne idée de te laisser jouer avec ça ?
pour une fois que tu sembles avoir un Windows qui fonctionne normalement :mrgreen: