EnableExplicit
DeclareModule Security
EnumerationBinary WSC_SECURITY_PROVIDER
#WSC_SECURITY_PROVIDER_FIREWALL
#WSC_SECURITY_PROVIDER_AUTOUPDATE_SETTINGS
#WSC_SECURITY_PROVIDER_ANTIVIRUS
#WSC_SECURITY_PROVIDER_ANTISPYWARE
#WSC_SECURITY_PROVIDER_INTERNET_SETTINGS
#WSC_SECURITY_PROVIDER_USER_ACCOUNT_CONTROL
#WSC_SECURITY_PROVIDER_SERVICE
EndEnumeration
Enumeration WSC_SECURITY_PROVIDER_HEALTH
#WSC_SECURITY_PROVIDER_HEALTH_GOOD
#WSC_SECURITY_PROVIDER_HEALTH_NOTMONITORED
#WSC_SECURITY_PROVIDER_HEALTH_POOR
#WSC_SECURITY_PROVIDER_HEALTH_SNOOZE
EndEnumeration
Structure Security
Firewall.i
FirewallState.s
Update.i
UpdateState.s
AntiVirus.i
AntiVirusState.s
AntiSpyware.i
AntiSpywareState.s
Internet.i
InternetState.s
UAC.i
UACState.s
WSC.i
WSCState.s
EndStructure
Define.i SecurityLib, pHealth
Define Security.Security
Prototype.i WscGetSecurityProviderHealth(Providers.i, pHealth.i)
SecurityLib = OpenLibrary(#PB_Any, "Wscapi.dll")
If SecurityLib
Global.i WscGetSecurityProviderHealth : WscGetSecurityProviderHealth.WscGetSecurityProviderHealth = GetFunction(SecurityLib, "WscGetSecurityProviderHealth")
EndIf
Declare GetSecurityState()
Declare.s Parse(pHealth.i)
EndDeclareModule
Module Security
Procedure GetSecurityState()
Security::WscGetSecurityProviderHealth(Security::#WSC_SECURITY_PROVIDER_FIREWALL, Security::@pHealth)
Security::Security\Firewall = Security::pHealth
Security::Security\FirewallState = Security::Parse(Security::pHealth)
Security::WscGetSecurityProviderHealth(Security::#WSC_SECURITY_PROVIDER_AUTOUPDATE_SETTINGS, Security::@pHealth)
Security::Security\Update = Security::pHealth
Security::Security\UpdateState = Security::Parse(Security::pHealth)
Security::WscGetSecurityProviderHealth(Security::#WSC_SECURITY_PROVIDER_ANTIVIRUS, Security::@pHealth)
Security::Security\AntiVirus = Security::pHealth
Security::Security\AntiVirusState = Security::Parse(Security::pHealth)
Security::WscGetSecurityProviderHealth(Security::#WSC_SECURITY_PROVIDER_ANTISPYWARE, Security::@pHealth)
Security::Security\AntiSpyware = Security::pHealth
Security::Security\AntiSpywareState = Security::Parse(Security::pHealth)
Security::WscGetSecurityProviderHealth(Security::#WSC_SECURITY_PROVIDER_USER_ACCOUNT_CONTROL, Security::@pHealth)
Security::Security\UAC = Security::pHealth
Security::Security\UACState = Security::Parse(Security::pHealth)
Security::WscGetSecurityProviderHealth(Security::#WSC_SECURITY_PROVIDER_SERVICE, Security::@pHealth)
Security::Security\WSC = Security::pHealth
Security::Security\WSCState = Security::Parse(Security::pHealth)
ProcedureReturn
EndProcedure
Procedure.s Parse(pHealth.i)
Protected Status.s
Select pHealth
Case 0
Status = "The status of the security provider category is good and does not need user attention."
Case 1
Status = "The status of the security provider category is not monitored by WSC."
Case 2
Status = "The status of the security provider category is poor and the computer may be at risk."
Case 3
Status = "The security provider category is in snooze state. Snooze indicates that WSC is not actively protecting the computer."
EndSelect
ProcedureReturn Status
EndProcedure
EndModule
DisableExplicit
Call it like this Security::GetSecurityState() and you will get desired states.
"If you lie to the compiler, it will get its revenge."
Henry Spencer https://www.pci-z.com/