Page 1 sur 2
Protection Fichier&Dossier
Publié : mar. 26/sept./2006 12:54
par SpaceMan
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!!!
Publié : mar. 26/sept./2006 14:45
par Droopy
Sous Windows XP, pour la gestion des droits NTFS, CACLS te permettra de définir ces droits.
Mauvaise nouvelle
Publié : jeu. 28/sept./2006 17:05
par SpaceMan
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
Sous Windows XP, pour la gestion des droits NTFS, CACLS te permettra de définir ces droits.
C'est quoi CACLS ?
je tiens vraiment à ce programme et je compte sur les basiciens pour y arriver.
Publié : jeu. 28/sept./2006 18:47
par Droopy
CACLS est un utilitaire fourni avec XP.
Lance un invite de commande ( CMD )
Puis tape CACLS /? pour avoir la syntaxe
Tu pourrais ensuite avec PureBasic ( commande RunProgram ) exécuter CACLS en mode caché afin d'ajuster les droits

Ok je vais voir ce que ça donne
Publié : jeu. 28/sept./2006 23:17
par SpaceMan
ok je vais voir ce que ça donnera pour pour l'adapter à PB
thank

voici ce que j'ai fait
Publié : ven. 29/sept./2006 19:10
par SpaceMan
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
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
Publié : ven. 29/sept./2006 19:50
par Dr. Dri
je crois que tu ne peux pas lire si tu as le flag Wait
Dri
Publié : ven. 29/sept./2006 22:11
par Droopy
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
Publié : ven. 29/sept./2006 23:05
par Flype
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
;====================================================================================================================
Publié : sam. 30/sept./2006 1:59
par Flype
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 :
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"
voir info sur msdn :
http://msdn.microsoft.com/library/defau ... tyinfo.asp
Publié : sam. 30/sept./2006 20:52
par Droopy
bon boulot flype

C'est du bon les gars!
Publié : lun. 02/oct./2006 19:54
par SpaceMan
Dri
je crois que tu ne peux pas lire si tu as le flag Wait
j'ai lu le message plutard dans la zone d'info
Droopy
j'ai essayé le tiens aussi et c'était bon
Flype
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 t'assure que c'est du bon boulot le code est simple et très compréhensible.
je le préfére par rapport à celui de l'(API)
Encore bravo à tous!!
Publié : mar. 03/oct./2006 9:26
par Flype
et ca fonctionne ?
A merveille
Publié : mar. 03/oct./2006 15:35
par SpaceMan
le code fonctionne à merveille.
Serait il possible de l'adapter aux dossiers ?
Publié : mar. 03/oct./2006 16:42
par Droopy
Tu spécifie les droits du dossiers dans Cacls