Page 1 sur 1

Pare-Feu Windows et CreateObject("HNetCfg.FwMgr")

Publié : mar. 14/août/2007 14:31
par Mytic
Comment peut on simuler un :

Code : Tout sélectionner

Set fwMgr = CreateObject("HNetCfg.FwMgr")
En PureBasic ?
:?:

Publié : mar. 14/août/2007 14:39
par wolfjeremy
T'est encore avec ton histoire de parefeu ? lol

Enfin désolé je saurais pas t'aider, je venais juste te taquiner un peu :lol: :wink:

Publié : mar. 14/août/2007 15:02
par Progi1984
Essaie de voir du coté de PureDispHelper qui permet d'utiliser des objets COM

http://www.purebasic.fr/english/viewtopic.php?t=26744

Publié : mar. 14/août/2007 15:14
par Mytic
<wolfjeremy>
Ben… j’ai trouver la solution pour le par feu lol
Et elle est vraiment si simple qu’on pourrait dire que c’est une faille du système Windows. :D


<Progi1984>
Merci pour le lien :wink:

Publié : mar. 14/août/2007 20:22
par Flype
PureDispHelper est effectivement la meilleure façon de programmer les objets COM actuellement et très efficace. (meme si ce n'est pas aussi simple que sous VB pour le moment)

Publié : mar. 14/août/2007 21:38
par Flype
voilà ton programme VB converti en utilisant PureDispHelper.

Code : Tout sélectionner

;-------------------------------------------------
;- Activation / Désactivation du Pare-Feu Windows
;-------------------------------------------------

EnableExplicit

; Variables du programme

Define.l objShell 
Define.l objFwMgr
Define.b bResult
Define.l oProfile

; Activation des exceptions DispHelper

dhToggleExceptions(#True)

; Créé l'objet Shell

objShell = dhCreateObject("Shell.Application")

If objShell
  
  ; Vérifie que le service Pare-Feu Windows est démarré 
  
  dhGetValue("%b", @bResult, objShell, "IsServiceRunning(%T)", @"SharedAccess")
  
  If bResult
    
    ; Créé l'objet Windows (Firewall)
    
    objFwMgr = dhCreateObject("HNetCfg.FwMgr")
    
    If objFwMgr
      
      ; Récupère les paramêtres locaux du Pare-Feu Windows
      
      dhGetValue("%o", @oProfile, objFwMgr, ".LocalPolicy.CurrentProfile")
      
      If oProfile
        
        ; Vérifie si le Pare-Feu Windows est actif
        
        dhGetValue("%b", @bResult, oProfile, ".FirewallEnabled")
        
        If bResult
          
          ; Le Pare-Feu Windows est activé
          
          If MessageRequester("Information", "Le Pare-Feu est activé." + #LF$ + "Voulez-vous le désactiver ?", #MB_OKCANCEL) = #IDOK
            dhPutValue(oProfile, ".FirewallEnabled = %b", #False)
          EndIf
          
        Else
          
          ; Le Pare-Feu Windows est désactivé
          
          If MessageRequester("Information", "Le Pare-Feu est désactivé." + #LF$ + "Voulez-vous l'activer ?", #MB_OKCANCEL) = #IDOK
            dhPutValue(oProfile, ".FirewallEnabled = %b", #True)
          EndIf
          
        EndIf
        
      EndIf
      
      ; Libère l'objet Pare-Feu (FireWall)
      
      dhReleaseObject(objFwMgr) 
      
    EndIf
    
  Else
    
    ; Démarre le service Pare-Feu Windows
    
    dhCallMethod(objShell, ".ServiceStart(%T, %b)", @"SharedAccess", #True)
    
  EndIf
  
  ; Libère l'objet Shell
  
  dhReleaseObject(objShell) 

EndIf

Publié : mar. 14/août/2007 21:47
par Mytic
Merciiiiiiiiiii <Flype> , t'es vraiment trop sympa :D :wink: :D

Publié : mar. 14/août/2007 22:07
par Flype
ou en plus court,deuxpetites procs pratiques :

Code : Tout sélectionner

Procedure EnableFirewall(bool.b)
  
  Protected objShell.l, objFwMgr.l, bResult.b
  
  objShell = dhCreateObject("Shell.Application")
  If objShell
    dhGetValue("%b", @bResult, objShell, "IsServiceRunning(%T)", @"SharedAccess")
    If bResult
      objFwMgr = dhCreateObject("HNetCfg.FwMgr")
      If objFwMgr
        dhPutValue(objFwMgr, ".LocalPolicy.CurrentProfile.FirewallEnabled = %b", bool)
        dhReleaseObject(objFwMgr) 
      EndIf
    EndIf
    dhReleaseObject(objShell) 
  EndIf
  
EndProcedure

Procedure.b IsFirewallEnabled()
  
  Protected objShell.l, objFwMgr.l, bResult.b
  
  objShell = dhCreateObject("Shell.Application")
  If objShell
    dhGetValue("%b", @bResult, objShell, "IsServiceRunning(%T)", @"SharedAccess")
    If bResult
      objFwMgr = dhCreateObject("HNetCfg.FwMgr")
      If objFwMgr
        dhGetValue("%b", @bResult, objFwMgr, ".LocalPolicy.CurrentProfile.FirewallEnabled")
        dhReleaseObject(objFwMgr) 
      EndIf
    EndIf
    dhReleaseObject(objShell) 
  EndIf
  
  ProcedureReturn bResult
  
EndProcedure

; Active/Désactive le Firewall

#ComTrue = -1

EnableFirewall(#ComTrue - IsFirewallEnabled())
il faut PureDispHelper v1.5 téléchargeable ici :
http://ts-soft.eu/dl/puredisphelper.zip


sinon, j'ai pas la fonction IsNTAdmin parce que chez moi je n'ai pas l'advpack.dll. çà doit etre une dll Win XP Pro (et non Famille), je testerai au taf (enfin pas demain, c'est férié faut pas déc.. :) ).

mais si tu as la dll chez toi,
tu peux faire comme çà et tu le rajoute au code précédent :

Code : Tout sélectionner

Import "advpack.lib"
  IsNTAdmin(dwReserved.l, *lpdwReserved)
EndImport

Debug IsNTAdmin(#Null, #Null)

Publié : mar. 14/août/2007 22:30
par Mytic
Oui en effet c’est une bonne idée :D