interdire acces a un fichier

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
ChaudEf
Messages : 179
Inscription : dim. 27/déc./2015 17:02
Localisation : Strasbourg

interdire acces a un fichier

Message 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
Windows 10 x64 -- Purebasic 5.70 LTS x86
Avatar de l’utilisateur
celtic88
Messages : 309
Inscription : sam. 12/sept./2015 14:31
Localisation : Alger

Re: interdire acces a un fichier

Message 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)
.....i Love Pb :)
Avatar de l’utilisateur
ChaudEf
Messages : 179
Inscription : dim. 27/déc./2015 17:02
Localisation : Strasbourg

Re: interdire acces a un fichier

Message par ChaudEf »

Merci
En fait je parle d'un fichier qui existe déjà, pas un fichier que je vis créer
Windows 10 x64 -- Purebasic 5.70 LTS x86
Avatar de l’utilisateur
celtic88
Messages : 309
Inscription : sam. 12/sept./2015 14:31
Localisation : Alger

Re: interdire acces a un fichier

Message 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)
.....i Love Pb :)
Avatar de l’utilisateur
ChaudEf
Messages : 179
Inscription : dim. 27/déc./2015 17:02
Localisation : Strasbourg

Re: interdire acces a un fichier

Message 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:
Windows 10 x64 -- Purebasic 5.70 LTS x86
Avatar de l’utilisateur
celtic88
Messages : 309
Inscription : sam. 12/sept./2015 14:31
Localisation : Alger

Re: interdire acces a un fichier

Message 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.
.....i Love Pb :)
Avatar de l’utilisateur
ChaudEf
Messages : 179
Inscription : dim. 27/déc./2015 17:02
Localisation : Strasbourg

Re: interdire acces a un fichier

Message 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. :!: :!:
Windows 10 x64 -- Purebasic 5.70 LTS x86
Avatar de l’utilisateur
celtic88
Messages : 309
Inscription : sam. 12/sept./2015 14:31
Localisation : Alger

Re: interdire acces a un fichier

Message 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 :)
.....i Love Pb :)
Avatar de l’utilisateur
ChaudEf
Messages : 179
Inscription : dim. 27/déc./2015 17:02
Localisation : Strasbourg

Re: interdire acces a un fichier

Message 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!!
Windows 10 x64 -- Purebasic 5.70 LTS x86
Avatar de l’utilisateur
celtic88
Messages : 309
Inscription : sam. 12/sept./2015 14:31
Localisation : Alger

Re: interdire acces a un fichier

Message par celtic88 »

.....i Love Pb :)
Avatar de l’utilisateur
ChaudEf
Messages : 179
Inscription : dim. 27/déc./2015 17:02
Localisation : Strasbourg

Re: interdire acces a un fichier

Message 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!!!
Windows 10 x64 -- Purebasic 5.70 LTS x86
Mesa
Messages : 1126
Inscription : mer. 14/sept./2011 16:59

Re: interdire acces a un fichier

Message 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.
Marc56
Messages : 2198
Inscription : sam. 08/févr./2014 15:19

Re: interdire acces a un fichier

Message 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:
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Re: interdire acces a un fichier

Message 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:
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Marc56
Messages : 2198
Inscription : sam. 08/févr./2014 15:19

Re: interdire acces a un fichier

Message 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:
Répondre