Vbs to vb6 [Résolu]

Signaler
Messages postés
163
Date d'inscription
samedi 19 janvier 2008
Statut
Membre
Dernière intervention
26 août 2014
-
Messages postés
163
Date d'inscription
samedi 19 janvier 2008
Statut
Membre
Dernière intervention
26 août 2014
-
salut a tous
j'ai besoin d'un coup de main
j'ai trouver ce code mai sa veux pas fonctionner sur Visual basic 6 je croi que c'st du vbs
'Changement permision sur le fichier a recuperer

Dim objLocator: Set objLocator = CreateObject("wbemscripting.swbemlocator")

Dim objServices: Set objServices = objLocator.ConnectServer("")
objServices.security_.privileges.AddAsString ("SeSecurityPrivilege")

Dim StrRepPath = "d:\test"

Dim StrNomFichier = "test.txt"
Dim FilePath: FilePath = StrRepPath & StrNomFichier

Dim objSecDescriptor: Set objSecDescriptor = GetObject("Winmgmts:{impersonationlevel=impersonate}!root/cimv2:Win32_SecurityDescriptor").Spawninstance_()

objSecDescriptor.ControlFlags = 32772

''allow everyone
Dim ACE1: Set ACE1 = SetACE(1245631, 3, 0, SetTrustee(vbNull, "Everyone", Array(1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0)))

''allow admin full access
Dim ACE2: Set ACE2 = SetACE(2032127, 3, 0, SetTrustee(vbNull, "Administrators", Array(1, 2, 0, 0, 0, 0, 0, 5, 32, 0, 0, 0, 32, 2, 0, 0)))

objSecDescriptor.DACL = Array(ACE1, ACE2)

Dim obj: Set obj = objServices.Get("CIM_DataFile='" & FilePath & "'")

Dim objClass: Set objClass = objServices.Get("CIM_DataFile")
Dim objInParam: Set objInParam = obj.Methods_("ChangeSecurityPermissions").inParameters.Spawninstance_()

objInParam.Option = 4 ''DACL
objInParam.SecurityDescriptor = objSecDescriptor

Dim objOutParams: Set objOutParams = obj.ExecMethod_("ChangeSecurityPermissions", objInParam)

Function SetTrustee(strDomain, strName, SID)
     Dim objTrustee: Set objTrustee = GetObject("Winmgmts:{impersonationlevel=impersonate}!root/cimv2:Win32_Trustee").Spawninstance_
     objTrustee.Domain = strDomain
     objTrustee.Name = strName
     objTrustee.SID = SID
     Set SetTrustee = objTrustee
End Function

Function SetACE(AccessMask, AceFlags, AceType, objTrustee)
  Dim objACE: Set objACE = GetObject("Winmgmts:{impersonationlevel=impersonate}!root/cimv2:Win32_Ace").Spawninstance_
  objACE.AccessMask = AccessMask
  objACE.AceFlags = AceFlags
  objACE.AceType = AceType
  objACE.Trustee = objTrustee
  Set SetACE = objACE
End Function




une solution ???

10 réponses

Messages postés
14788
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
1 mai 2021
155
Bonjour,

Oui, ça ressemble à un code VBS, bien que j'ai des doutes avec un .NET sans les Options adéquate.

Dim StrRepPath = "d:\test"
Dim StrNomFichier = "test.txt"

Doit devenir :
Dim StrRepPath
StrRepPath = "d:\test"
Dim StrNomFichier
StrNomFichier = "test.txt"

Sinon, penses à mettre les bons types aux variables, et à mettre Option Explicit.

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, ce lien ou encore celui-ci[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : )
[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés./list
---
Mon site
Messages postés
14788
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
1 mai 2021
155
Bonjour,

Le message d'erreur est clair pourtant.

Il faut que le code soit dans une procédure (Sub) ou une fonction (Function).

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, ce lien ou encore celui-ci[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : )
[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés./list
---
Mon site
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
236
C'est ce qui arriver généralement lorsque l'on se trouve face à un code non suffisamment commenté et où l'on utilise une valeur numérique spécifique plutôt qu'un constante parmi toutes celles possibles !
Et qu'on ignore, en plus, les autres valeurs utilisables.
Ton problème est sur cette ligne :
objInParam.Option = 4 

tout simplement, qui attribue une valeur 4.
Je te conseille de lire :

cette source

Tu devrais y découvrir les autres valeurs (des constantes). Tu devrais également en profiter pour traiter autrement qu'en te servant de VBS.
____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Messages postés
163
Date d'inscription
samedi 19 janvier 2008
Statut
Membre
Dernière intervention
26 août 2014

sa veux pas fonctionner
comment je peux arranger sa ?
Messages postés
163
Date d'inscription
samedi 19 janvier 2008
Statut
Membre
Dernière intervention
26 août 2014

merci beaucoup beaucoup sa fonctionne très bien
Private Sub Form_Load()
'Changement permision sur le fichier a recuperer

Dim objLocator: Set objLocator = CreateObject("wbemscripting.swbemlocator")

Dim objServices: Set objServices = objLocator.ConnectServer("")
objServices.security_.privileges.AddAsString ("SeSecurityPrivilege")

Dim StrRepPath
StrRepPath = "c:\test"
Dim StrNomFichier
StrNomFichier = "test.txt"

Dim FilePath: FilePath = StrRepPath & StrNomFichier

Dim objSecDescriptor: Set objSecDescriptor = GetObject("Winmgmts:{impersonationlevel=impersonate}!root/cimv2:Win32_SecurityDescriptor").Spawninstance_()

objSecDescriptor.ControlFlags = 32772

''allow everyone
Dim ACE1: Set ACE1 = SetACE(1245631, 3, 0, SetTrustee(vbNull, "Everyone", Array(1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0)))

''allow admin full access
Dim ACE2: Set ACE2 = SetACE(2032127, 3, 0, SetTrustee(vbNull, "Administrators", Array(1, 2, 0, 0, 0, 0, 0, 5, 32, 0, 0, 0, 32, 2, 0, 0)))

objSecDescriptor.DACL = Array(ACE1, ACE2)

Dim obj: Set obj = objServices.Get("CIM_DataFile='" & FilePath & "'")

Dim objClass: Set objClass = objServices.Get("CIM_DataFile")
Dim objInParam: Set objInParam = obj.Methods_("ChangeSecurityPermissions").inParameters.Spawninstance_()

objInParam.Option = 4 ''DACL
objInParam.SecurityDescriptor = objSecDescriptor

Dim objOutParams: Set objOutParams = obj.ExecMethod_("ChangeSecurityPermissions", objInParam)
End Sub
Function SetTrustee(strDomain, strName, SID)
     Dim objTrustee: Set objTrustee = GetObject("Winmgmts:{impersonationlevel=impersonate}!root/cimv2:Win32_Trustee").Spawninstance_
     objTrustee.Domain = strDomain
     objTrustee.Name = strName
     objTrustee.SID = SID
     Set SetTrustee = objTrustee
End Function

Function SetACE(AccessMask, AceFlags, AceType, objTrustee)
  Dim objACE: Set objACE = GetObject("Winmgmts:{impersonationlevel=impersonate}!root/cimv2:Win32_Ace").Spawninstance_
  objACE.AccessMask = AccessMask
  objACE.AceFlags = AceFlags
  objACE.AceType = AceType
  objACE.Trustee = objTrustee
  Set SetACE = objACE
End Function

une dernière question sil te plais je veux que le fichier test.txt soit modifier par les administrateurs seulement comment je peux faire ???
et le cas contraire et merci beaucoup
Messages postés
14788
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
1 mai 2021
155
Bonjour,

Regardes du coté des droits NTFS.

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, ce lien ou encore celui-ci[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : )
[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés./list
---
Mon site
Messages postés
163
Date d'inscription
samedi 19 janvier 2008
Statut
Membre
Dernière intervention
26 août 2014

ce code sa ser a faire sa non ?
Messages postés
14788
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
1 mai 2021
155
Bonjour,

Apparemment, oui, mais je n'ai jamais utilisé cette méthode (par le code).

Peut être que tu trouveras la réponse en regardant dans l'aide de la focntion : SetACE

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, ce lien ou encore celui-ci[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : )
[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés./list
---
Mon site
Messages postés
163
Date d'inscription
samedi 19 janvier 2008
Statut
Membre
Dernière intervention
26 août 2014

ta source est super intéressante et c'est bien ce que je veux mai
elle doit fonctionner sur Windows Seven et elle doit forcer l'autorisation de tout les droits et annuler tout les droits de ce fichier sans demander la permission et le cas contraire

pour cette source
Private Sub Form_Load()
'Changement permision sur le fichier a recuperer

Dim objLocator: Set objLocator = CreateObject("wbemscripting.swbemlocator")

Dim objServices: Set objServices = objLocator.ConnectServer("")
objServices.security_.privileges.AddAsString ("SeSecurityPrivilege")

Dim StrNomFichier
StrNomFichier = "c:\test\test.txt"

Dim FilePath: FilePath = StrRepPath & StrNomFichier

Dim objSecDescriptor: Set objSecDescriptor = GetObject("Winmgmts:{impersonationlevel=impersonate}!root/cimv2:Win32_SecurityDescriptor").Spawninstance_()

objSecDescriptor.ControlFlags = 32772

''allow everyone
Dim ACE1: Set ACE1 = SetACE(1245631, 3, 0, SetTrustee(vbNull, "Everyone", Array(1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0)))

''allow admin full access
Dim ACE2: Set ACE2 = SetACE(2032127, 3, 0, SetTrustee(vbNull, "Administrators", Array(1, 2, 0, 0, 0, 0, 0, 5, 32, 0, 0, 0, 32, 2, 0, 0)))

objSecDescriptor.DACL = Array(ACE1, ACE2)

Dim obj: Set obj = objServices.Get("CIM_DataFile='" & FilePath & "'")

Dim objClass: Set objClass = objServices.Get("CIM_DataFile")
Dim objInParam: Set objInParam = obj.Methods_("ChangeSecurityPermissions").inParameters.Spawninstance_()

objInParam.Option = 4 ''DACL
objInParam.SecurityDescriptor = objSecDescriptor

Dim objOutParams: Set objOutParams = obj.ExecMethod_("ChangeSecurityPermissions", objInParam)
End Sub
Function SetTrustee(strDomain, strName, SID)
     Dim objTrustee: Set objTrustee = GetObject("Winmgmts:{impersonationlevel=impersonate}!root/cimv2:Win32_Trustee").Spawninstance_
     objTrustee.Domain = strDomain
     objTrustee.Name = strName
     objTrustee.SID = SID
     Set SetTrustee = objTrustee
End Function

Function SetACE(AccessMask, AceFlags, AceType, objTrustee)
  Dim objACE: Set objACE = GetObject("Winmgmts:{impersonationlevel=impersonate}!root/cimv2:Win32_Ace").Spawninstance_
  objACE.AccessMask = AccessMask
  objACE.AceFlags = AceFlags
  objACE.AceType = AceType
  objACE.Trustee = objTrustee
  Set SetACE = objACE
End Function

sa a l'air de bien fonctionner mai je voie rien qui change
c'est acose de Windows seven ??
Messages postés
163
Date d'inscription
samedi 19 janvier 2008
Statut
Membre
Dernière intervention
26 août 2014

une idée ???