'Inno Setup: Iterate/Enumerate through Firewall Rules / IEnumVariant

I have a similar question like Daniel Rogers about how to declare an IEnumVariant in Inno Setup. Declare an OleVariant and IEnumVariant in Inno Setup

I'm writing some extra functionality for our setup, in this case I want to add and remove firewall rules during install/uninstall. There are plenty good pointers with examples on the internet to do that. So that's not the problem, it's already done.

But now I want to iterate/enumerate the existing firewall rules but that's the part where I'm struggling with :-( I can't get it to work, unfortunately Inno Setup doesn't recognize the IEnumVariant type so the examples who's are written in Delphi are not going to work.

If I lookup the Microsoft API documentation about the INetFwRules interface https://docs.microsoft.com/en-us/windows/win32/api/netfw/nn-netfw-inetfwrules then it looks like it that the only way to enumerate/iterate is to use the _NewEnum function. (which is returning an IEnumVariant)

So does anybody have some pointers (or mini example) to work around or deal with the above problem?

I also have some issue's when I'm trying to get one single rule through the FwRules.Item function, Inno Setup just keeps saying "Ongeldig aantal parameters" (something like "invalid parameter count").

var
  lcFwPolicy : Variant;
  lcFwRules  : Variant;
  lcFwRule   : Variant;
  //lcEnum     : IVariantEnum;
begin
  try
    lcFwPolicy  := CreateOleObject('HNetCfg.FwPolicy2');
    lcFwRules   := lcFwPolicy.Rules;
 
    lcFwRules.Item('a fwrule name', lcFwRule); <----- this call is causing "invalid parameter count"
  except
    Log(GetExceptionMessage);
    Log('>>> FirewallRuleExists Exception !!!');
  end;
end;

But the most important part of my question is about the enumeration of the firewall rules, if that is possible then the other question is less important.

I'll hope there is somebody out there with the golden solution/workaround.



Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source