Bonjour,
J'ai besoin de mettre tout les droits à tout le monde sur un fichier (un pipe nommé ici), une sorte de chmod 777 sous windows.
Je suis null en win32, quelqu'un peu m'aider?
Merci.
Bonjour,
J'ai besoin de mettre tout les droits à tout le monde sur un fichier (un pipe nommé ici), une sorte de chmod 777 sous windows.
Je suis null en win32, quelqu'un peu m'aider?
Merci.
Peut-être avec la commande Cacls.exe
Le code qui semblerai me convenir:
http://pastebin.com/ZTXCfSk8
Mais je n'arrive pas à l'appliquer à un pipe nommé. J'aimerai donné tout les droits à l'utilisateur courrant.
vous pouvez essayer ce petit vbscript : il crée deux répertoires différents c:\Essai avec Contrôle totale et c:\EssaiLectureSeule en lecture seule.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35 Dim oFSO,oFld Set oFSO = CreateObject("Scripting.FileSystemObject") Dossier = "c:\Essai" DossierReadOnly = "c:\EssaiLectureSeule" If Not oFSO.FolderExists(Dossier) Then 'Crée le repertoire c:\Essai Set oFld=oFSO.CreateFolder(Dossier) end if If Not oFSO.FolderExists(DossierReadOnly) Then 'Crée le repertoire c:\EssaiLectureSeule Set oFld=oFSO.CreateFolder(DossierReadOnly) end if Call ControlTotal(Dossier) 'Pour rendre le dossier en contrôle Totale Call LectureSeule(DossierReadOnly) 'Pour rendre le dossier en lecture seule Function LectureSeule(objet) Set Ws = CreateObject("WScript.Shell") Set ProcessEnv = Ws.Environment("Process") NomUtilisateur = ProcessEnv("USERNAME") Command = "%COMSPEC% /c Echo o| cacls "& objet &" /g " & qq(NomUtilisateur) & ":r administrateurs:r" Result = ws.Run(Command,0,True) 'exécution de la commande sans afficher la console MS-DOS End Function Function ControlTotal(objet) Set Ws = CreateObject("WScript.Shell") Set ProcessEnv = Ws.Environment("Process") NomUtilisateur = ProcessEnv("USERNAME") Command = "%COMSPEC% /c Echo o| cacls "& objet &" /g " & qq(NomUtilisateur) & ":f administrateurs:f" Result = ws.Run(Command,0,True) 'exécution de la commande sans afficher la console MS-DOS End Function Function qq(strIn) qq = Chr(34) & strIn & Chr(34) End Function
Je vois bien, pour l'instant il semble bloquer sur un INVALID_HANDLE_VALUE, avec un:
The system cannot find the file specificed.
Pourtant le pipe existe bien.
Les droits sont définis à la création du pipe. Le paramètre lpSecurityAttributes.
Ont peu le définir aprés coup? Car j'ai pas accés à la creation du pipe, et je sais pas le faire en C/C++.
J'ai appliquer ce code qui semble maintenant bien obtenir l'HANDLER:
http://pastebin.com/aUDqscUw
Mais ça ne change rien, je ne peu pas accédé à mon server en pipe nommé depuis un application normal, si j'ai lancé le server en mode administrateur
J'en doute fort. Ce n'est pas au client de définir les droits qui l'arrangent
Pourtant c'est bien toi qui appelle CreateNamedPipe...
En Delphi pour un accès sans restriction, c'est quelque chose comme ceci:
Code Delphi : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 var SA :TSecurityAttributes; SD :TSecurityDescriptor; begin SA.nLength := SizeOf(SA); SA.bInheritHandle := TRUE; SA.lpSecurityDescriptor := @SD; InitializeSecurityDescriptor(@SD, SECURITY_DESCRIPTOR_REVISION); SetSecurityDescriptorDacl(@SD, TRUE, nil, FALSE); CreateNamedPipe(..., @SA); end;
A toi de convertir
J'ai 2 serveur, un en C++ (donc oui j'ai la main), et un en Qt (j'ai pas la main):
http://qt-project.org/doc/qt-4.8/qlo...er.html#listen
Le delphi j'ai pour l'instant de gros probléme avec sa compreansion.
Quelqu'un peu me dire ce que fait le code en C? Je ne set peu étre pas les bon droits.
Ou il faudrai que je puisse utilisé:
WRITE_OWNER The caller will have write access to the named pipe's owner.
Et savoir comment changer pour l'utilisateur courrant
J'ai essayé:
http://pastebin.com/bzxkmAwG
Mais ça ne marche pas. Ca crash. je sais pas ou.
Ici tu es sur le forum Windows, ça reste très généraliste. Pourquoi ne pas poser tes questions QT sur le forum correspondant ?
Car il vont me répondre (et il ont raison), que ça n'as rien à voir avec Qt la manipulation de fichier en win32, et que l'accés au pipe est encapsuler dans Qt et qu'on ne peu pas y toucher.
Pseudo-fichier
Le NamedPipes existe aussi (sauf erreur) sous Linux.
Mais même si QT te permet de programmer sans tenir compte de l'OS, il y a bien dessous une couche propre à l'OS. Donc pour moi, ça reste un problème d'implémentation QT...
Maintenant, si l'implémentation est si superficielle et inadaptée, tu n'as plus qu'à changer d'IPC...
En Win32, quand on joue avec les Security Descriptors, le plus simple pour que tout le monde ait tous les droits est de mettre une ACL nulle. À ne pas confondre avec une ACL vide, qui ne donne aucun droit à personne (mais le propriétaire de l'objet a tout le temps tous les droits).
Le probléme d'un pipe contrairement à un fichier, c'est que les droits ne peuvent étre hérité, donc mon logiciel crée bien les fichiers avec mon utilisateur courrant, mais le pipe en administrateur (ce qui empéche les autres applications lancé sans le mode admin d'y accédé)
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager