Protection Fichier&Dossier
Protection Fichier&Dossier
Salut chers basiciens
je voudrais savoir comment programmer les droits d'accès à un fichier de sorte que lorsqu'on essaie d'ouvrir ce dernier qu'on ait le message "accès refusé"
Merci A vous!!!
je voudrais savoir comment programmer les droits d'accès à un fichier de sorte que lorsqu'on essaie d'ouvrir ce dernier qu'on ait le message "accès refusé"
Merci A vous!!!
Mauvaise nouvelle
salut droopy
j'ai parcouru ta Lib mais je n'ai pas été satisfait d'ailleurs elle est excellente ta LIB DROOPY.
en fait tu parlais de
je tiens vraiment à ce programme et je compte sur les basiciens pour y arriver.
j'ai parcouru ta Lib mais je n'ai pas été satisfait d'ailleurs elle est excellente ta LIB DROOPY.
en fait tu parlais de
C'est quoi CACLS ?Sous Windows XP, pour la gestion des droits NTFS, CACLS te permettra de définir ces droits.
je tiens vraiment à ce programme et je compte sur les basiciens pour y arriver.
Ok je vais voir ce que ça donne
ok je vais voir ce que ça donnera pour pour l'adapter à PB
thank
thank

voici ce que j'ai fait
salut
salut c'est un programme qui donne des droits d'accès à un fichier
le programme donne ces droits en utilisant la console en mode caché.
en fait comme me l'avait suggerer Droopy j'utilise l'utilitaire cacls de MS-DOS
pour y arriver mais ça bloque.
Après compilation j'ai un msg du genre:
la memoire ne peut pas etre read
salut c'est un programme qui donne des droits d'accès à un fichier
le programme donne ces droits en utilisant la console en mode caché.
en fait comme me l'avait suggerer Droopy j'utilise l'utilitaire cacls de MS-DOS
pour y arriver mais ça bloque.
Après compilation j'ai un msg du genre:
la memoire ne peut pas etre read
Code : Tout sélectionner
CreatePreferences("c:\test.doc")
SetEnvironmentVariable("Fichiers", Fichiers$);est il possible que la variable d'environnement
;et la variable Fichier$ aient le meme nom ?
Filtre$ = "Texte (*.log)|*.txt;*.bat|PureBasic (*.pb)|*.pb|Tous les fichiers (*.*)|*.*"
Filtre = 0
Fichier$ = OpenFileRequester("Sélectionner un Fichier", FichierParDefaut$, Filtre$, Filtre)
If Fichier$
;*MemoireID = AllocateMemory(5000)
Resultat = RunProgram("C:\WINDOWS\system32\cmd.exe","","",#PB_Program_Wait|#PB_Program_Open|#PB_Program_Write|#PB_Program_Hide)
;PokeS(*MemoireID, "cacls info.txt /p Admin:N"+Input())
WriteProgramString(cmd,"cacls Fichiers$ /p Admin:N")
CloseProgram(cmd)
EndIf
;je commence par decourager
; IDE Options = PureBasic v4.00 (Windows - x86)
; CursorPosition = 7
; Folding = -
; EnableUnicode
; EnableThread
; EnableXP
; DisableDebugger
Essaye ça :
Code : Tout sélectionner
#Commande="CMD"
#Parametre="/C DIR C:\"
OpenWindow(0, 0, 0, 640, 480, #Commande+" "+#Parametre, #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
CreateGadgetList(WindowID(0))
EditorGadget(0, 10, 10, 620, 460)
SetGadgetFont(0,LoadFont(0,"Courier",8))
console.l = RunProgram(#Commande,#Parametre,"",#PB_Program_Open|#PB_Program_Read|#PB_Program_Hide)
While ProgramRunning(console)
Delay(1)
While AvailableProgramOutput(console)
Ligne.s=ReadProgramString(console)
OEMTOCHAR_(Ligne,Ligne) ;/ Merci à LNA pour cette fonction
AddGadgetItem(0, -1, Ligne)
Wend
Wend
Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
ou çà - j'ai pas l'habitude de manipuler les entree/sortie DOS mais çà a l'air de fonctionner - à vous de confirmer je suis pas spécialiste du tout :
Code : Tout sélectionner
;====================================================================================================================
;
; Object: Microsoft Cacls
; Information: Displays or modifies discretionary access control list (DACL) files.
; Information: Affiche ou modifie les listes DACL (Discretionary Access Control List) pour des fichiers spécifiés.
; WebSite: http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/cacls.mspx
;
;====================================================================================================================
#Access_None = "n"
#Access_Read = "r"
#Access_Write = "w"
#Access_Change = "c"
#Access_Full = "f"
;====================================================================================================================
Procedure.s ShowAccess(Fichier.s) ; Affiche les listes DACL des fichiers spécifiés.
Protected handle.l, result.s
handle = RunProgram("cacls", Fichier, "", #PB_Program_Open|#PB_Program_Read|#PB_Program_Hide)
If handle
While ProgramRunning(handle)
result + ReadProgramString(handle) + #CRLF$
Wend
CloseProgram(handle)
EndIf
ProcedureReturn result
EndProcedure
Procedure.l RevokeAccess(Fichier.s, Utilisateur.s) ; Révoque les droits d'accès de l'utilisateur spécifié.
Protected handle.l, result.l
handle = RunProgram("cacls", Fichier + " /e /r " + Utilisateur, "", #PB_Program_Hide|#PB_Program_Open|#PB_Program_Write|#PB_Program_Read)
If handle
result = WriteProgramStringN(handle, "O") ; Répond 'Oui' à la confirmation
CloseProgram(handle)
EndIf
ProcedureReturn result
EndProcedure
Procedure.l DenyAccess(Fichier.s, Utilisateur.s) ; Refuse l'accès à l'utilisateur spécifié.
Protected handle.l, result.l
handle = RunProgram("cacls", Fichier + " /d " + Utilisateur, "", #PB_Program_Hide|#PB_Program_Open|#PB_Program_Write|#PB_Program_Read)
If handle
result = WriteProgramStringN(handle, "O") ; Répond 'Oui' à la confirmation
CloseProgram(handle)
EndIf
ProcedureReturn result
EndProcedure
Procedure.l GrantAccess(Fichier.s, Utilisateur.s, Access.s) ; Accorde des droits d'accès à l'utilisateur spécifié.
Protected handle.l, result.l
handle = RunProgram("cacls", Fichier + " /g " + Utilisateur + ":" + Access, "", #PB_Program_Hide|#PB_Program_Open|#PB_Program_Write|#PB_Program_Read)
If handle
result = WriteProgramStringN(handle, "O") ; Répond 'Oui' à la confirmation
CloseProgram(handle)
EndIf
ProcedureReturn result
EndProcedure
Procedure.l ReplaceAccess(Fichier.s, Utilisateur.s, Access.s) ; Remplace les droits d'accès de l'utilisateur spécifié.
Protected handle.l, result.l
handle = RunProgram("cacls", Fichier + " /p " + Utilisateur + ":" + Access, "", #PB_Program_Hide|#PB_Program_Open|#PB_Program_Write|#PB_Program_Read)
If handle
result = WriteProgramStringN(handle, "O") ; Répond 'Oui' à la confirmation
CloseProgram(handle)
EndIf
ProcedureReturn result
EndProcedure
;====================================================================================================================
FICHIER$ = "c:\test.txt"
If CreateFile(0, FICHIER$)
CloseFile(0)
; Affiche les droits
MessageRequester("ShowAccess", ShowAccess(FICHIER$))
; Accorde des droits d'accès
If GrantAccess(FICHIER$, "BUILTIN\Utilisateurs", #Access_Full)
MessageRequester("GrantAccess", "Effectué:" + #LF$ + ShowAccess(FICHIER$))
EndIf
; Refuse l'accès
If DenyAccess(FICHIER$, "PCASUS\Nico")
MessageRequester("DenyAccess", "Effectué:" + #LF$ + ShowAccess(FICHIER$))
EndIf
; Remplace les droits
If ReplaceAccess(FICHIER$, "BUILTIN\Administrateurs", #Access_Read)
MessageRequester("ReplaceAccess", "Effectué:" + #LF$ + ShowAccess(FICHIER$))
EndIf
; Remplace les droits
If ReplaceAccess(FICHIER$, "BUILTIN\Administrateurs", #Access_Full)
MessageRequester("ReplaceAccess", "Effectué:" + #LF$ + ShowAccess(FICHIER$))
EndIf
; Révoque les droits
If RevokeAccess(FICHIER$, "BUILTIN\Administrateurs")
MessageRequester("RevokeAccess", "Effectué:" + #LF$ + ShowAccess(FICHIER$))
EndIf
DeleteFile(FICHIER$)
EndIf
;====================================================================================================================
sinon une autre solution - en utilisant l'api win32
sur lequel est basé CACLS je suppose.
c'est un peu hardcore alors je vous laisse chercher - voilà le début de bout de truc que j'ai commencé à chercher :
voir info sur msdn :
http://msdn.microsoft.com/library/defau ... tyinfo.asp
sur lequel est basé CACLS je suppose.
c'est un peu hardcore alors je vous laisse chercher - voilà le début de bout de truc que j'ai commencé à chercher :
Code : Tout sélectionner
#SE_FILE_OBJECT = 1
#DACL_SECURITY_INFORMATION = 4
#SET_ACCESS = 2
#SYNCHRONIZE = $100000
#READ_CONTROL = $20000
#WRITE_DAC = $40000
#WRITE_OWNER = $80000
#STANDARD_RIGHTS_READ = #READ_CONTROL
#STANDARD_RIGHTS_WRITE = #READ_CONTROL
#DELETE = $10000
#DELETE_CHILD = $40
#ALL_ACCESS = $F0000 | #SYNCHRONIZE | $1FF
#GENERIC_ALL = $10000000
#GENERIC_EXECUTE = $20000000
#GENERIC_READ = $80000000
#GENERIC_WRITE = $40000000
#OBJECT_INHERIT_ACE = $1
#CONTAINER_INHERIT_ACE = $2
Structure TRUSTEE
*pMultipleTrustee.TRUSTEE
MultipleTrusteeOperation.l
TrusteeForm.l
TrusteeType.l
ptstrName.l
EndStructure
Structure EXPLICIT_ACCESS
grfAccessPermissions.l
grfAccessMode.l
grfInheritance.l
*Trustee.TRUSTEE
EndStructure
ObjName.s = "c:\toto.mdb"
TrusteeName.s = "BUILTIN\Administrateurs"
iPerm.l = 20321127
Result.l = GetNamedSecurityInfo_(@ObjName, #SE_FILE_OBJECT, #DACL_SECURITY_INFORMATION, @psidOwner, @psidGroup, @pDacl, @PSacl, @pSecurityDescriptor)
If Result = #ERROR_SUCCESS
Debug "OK"
Debug psidOwner
Debug psidGroup
Debug pDacl
Debug pSacl
Debug pSecurityDescriptor
ea.EXPLICIT_ACCESS
Debug BuildExplicitAccessWithName_(ea, TrusteeName, iPerm, #SET_ACCESS, #CONTAINER_INHERIT_ACE | #OBJECT_INHERIT_ACE)
Else
Debug "GetNamedSecurityInfo Error: " + Str(OK)
EndIf
If pSecurityDescriptor
Debug LocalFree_(pSecurityDescriptor)
EndIf
Debug "fin"
http://msdn.microsoft.com/library/defau ... tyinfo.asp
C'est du bon les gars!
Dri
Droopy
j'ai essayé le tiens aussi et c'était bon
Flype
je le préfére par rapport à celui de l'(API)
Encore bravo à tous!!
j'ai lu le message plutard dans la zone d'infoje crois que tu ne peux pas lire si tu as le flag Wait

Droopy
j'ai essayé le tiens aussi et c'était bon

Flype
je t'assure que c'est du bon boulot le code est simple et très compréhensible.j'ai pas l'habitude de manipuler les entree/sortie DOS mais çà a l'air de fonctionner - à vous de confirmer je suis pas spécialiste du tout

je le préfére par rapport à celui de l'(API)

Encore bravo à tous!!
A merveille
le code fonctionne à merveille.
Serait il possible de l'adapter aux dossiers ?
Serait il possible de l'adapter aux dossiers ?