|
@@ -164,6 +164,8 @@ begin
|
|
colItems := fWMIService.ExecQuery(Format('SELECT * FROM %s',[aWMIClass]),'WQL',wbemFlagForwardOnly and wbemFlagReturnImmediately);
|
|
colItems := fWMIService.ExecQuery(Format('SELECT * FROM %s',[aWMIClass]),'WQL',wbemFlagForwardOnly and wbemFlagReturnImmediately);
|
|
oEnum := IUnknown(colItems._NewEnum) as IEnumVariant;
|
|
oEnum := IUnknown(colItems._NewEnum) as IEnumVariant;
|
|
Result := TWMIClass.Create(fWMIService,aWMIClass,oEnum);
|
|
Result := TWMIClass.Create(fWMIService,aWMIClass,oEnum);
|
|
|
|
+ oEnum := nil;
|
|
|
|
+ colItems := Unassigned;
|
|
except
|
|
except
|
|
on E : Exception do raise EWMICollector.CreateFmt('Error getting WMI Class "\\%s\%s\%s": %s',[aHost,aRoot,aWMIClass,e.Message]);
|
|
on E : Exception do raise EWMICollector.CreateFmt('Error getting WMI Class "\\%s\%s\%s": %s',[aHost,aRoot,aWMIClass,e.Message]);
|
|
end;
|
|
end;
|
|
@@ -191,12 +193,18 @@ end;
|
|
function TWMIInstance.GetProperties(const aProperties : TArray<string>) : IList<TFlexPair>;
|
|
function TWMIInstance.GetProperties(const aProperties : TArray<string>) : IList<TFlexPair>;
|
|
var
|
|
var
|
|
prop : string;
|
|
prop : string;
|
|
|
|
+ item : OleVariant;
|
|
begin
|
|
begin
|
|
Result := TxList<TFlexPair>.Create;
|
|
Result := TxList<TFlexPair>.Create;
|
|
for prop in aProperties do
|
|
for prop in aProperties do
|
|
begin
|
|
begin
|
|
try
|
|
try
|
|
- Result.Add(TFlexPair.Create(prop,fWMIItem.Properties_.Item(prop, 0)));
|
|
|
|
|
|
+ item := fWMIItem.Properties_.Item(prop, 0);
|
|
|
|
+ try
|
|
|
|
+ Result.Add(TFlexPair.Create(prop,item));
|
|
|
|
+ finally
|
|
|
|
+ item := Unassigned;
|
|
|
|
+ end;
|
|
except
|
|
except
|
|
on E : Exception do raise EWMICollector.CreateFmt('Retrieving "%s" (%s)',[prop,e.message]);
|
|
on E : Exception do raise EWMICollector.CreateFmt('Retrieving "%s" (%s)',[prop,e.message]);
|
|
end;
|
|
end;
|
|
@@ -204,8 +212,15 @@ begin
|
|
end;
|
|
end;
|
|
|
|
|
|
function TWMIInstance.GetProperty(const aPropertyName: string): TFlexValue;
|
|
function TWMIInstance.GetProperty(const aPropertyName: string): TFlexValue;
|
|
|
|
+var
|
|
|
|
+ item : OleVariant;
|
|
begin
|
|
begin
|
|
- Result := fWMIItem.Properties_.Item(aPropertyName, 0);
|
|
|
|
|
|
+ item := fWMIItem.Properties_.Item(aPropertyName, 0);
|
|
|
|
+ try
|
|
|
|
+ Result := item;
|
|
|
|
+ finally
|
|
|
|
+ item := Unassigned;
|
|
|
|
+ end;
|
|
end;
|
|
end;
|
|
|
|
|
|
{ TWMIClass }
|
|
{ TWMIClass }
|
|
@@ -219,7 +234,7 @@ end;
|
|
|
|
|
|
destructor TWMIClass.Destroy;
|
|
destructor TWMIClass.Destroy;
|
|
begin
|
|
begin
|
|
- //fWMIClassItems := nil;
|
|
|
|
|
|
+ fWMIClassItems := nil;
|
|
fWMIService := Unassigned;
|
|
fWMIService := Unassigned;
|
|
inherited;
|
|
inherited;
|
|
end;
|
|
end;
|
|
@@ -232,8 +247,8 @@ var
|
|
begin
|
|
begin
|
|
while fWMIClassItems.Next(1, propItem, iValue) = 0 do
|
|
while fWMIClassItems.Next(1, propItem, iValue) = 0 do
|
|
begin
|
|
begin
|
|
- instanceName := GetInstanceName(propItem);
|
|
|
|
try
|
|
try
|
|
|
|
+ instanceName := GetInstanceName(propItem);
|
|
if CompareText(aInstance,instanceName) = 0 then
|
|
if CompareText(aInstance,instanceName) = 0 then
|
|
begin
|
|
begin
|
|
Result := TWMIInstance.Create(instanceName,propItem);
|
|
Result := TWMIInstance.Create(instanceName,propItem);
|
|
@@ -256,6 +271,7 @@ var
|
|
iValue : Cardinal;
|
|
iValue : Cardinal;
|
|
properties : OleVariant;
|
|
properties : OleVariant;
|
|
objSWbemObjectSet : OleVariant;
|
|
objSWbemObjectSet : OleVariant;
|
|
|
|
+ item : OleVariant;
|
|
begin
|
|
begin
|
|
Result := '';
|
|
Result := '';
|
|
objSWbemObjectSet:= fWMIService.Get(fClassName, wbemFlagUseAmendedQualifiers and wbemFlagReturnWhenComplete);
|
|
objSWbemObjectSet:= fWMIService.Get(fClassName, wbemFlagUseAmendedQualifiers and wbemFlagReturnWhenComplete);
|
|
@@ -273,17 +289,21 @@ begin
|
|
//Result := rgvarQualif.Value;
|
|
//Result := rgvarQualif.Value;
|
|
if qualifItem.Name = 'key' then
|
|
if qualifItem.Name = 'key' then
|
|
begin
|
|
begin
|
|
- if qualifItem.Value then if Result = '' then Result := aWMIClass.Properties_.Item(propItem.Name,0)
|
|
|
|
- else Result := Format('%s %s',[Result,aWMIClass.Properties_.Item(propItem.Name,0)]);
|
|
|
|
|
|
+ item := aWMIClass.Properties_.Item(propItem.Name,0);
|
|
|
|
+ try
|
|
|
|
+ if qualifItem.Value then if Result = '' then Result := item
|
|
|
|
+ else Result := Format('%s %s',[Result,item]);
|
|
|
|
+ finally
|
|
|
|
+ item := Unassigned;
|
|
|
|
+ end;
|
|
end;
|
|
end;
|
|
- //VarClear(qualifItem);
|
|
|
|
qualifItem := Unassigned;
|
|
qualifItem := Unassigned;
|
|
end;
|
|
end;
|
|
- //enumQualif := nil;
|
|
|
|
|
|
+ enumQualif := nil;
|
|
qualifiers := Unassigned;
|
|
qualifiers := Unassigned;
|
|
propItem := Unassigned;
|
|
propItem := Unassigned;
|
|
end;
|
|
end;
|
|
- //enumProp := nil;
|
|
|
|
|
|
+ enumProp := nil;
|
|
properties := Unassigned;
|
|
properties := Unassigned;
|
|
objSWbemObjectSet := Unassigned;
|
|
objSWbemObjectSet := Unassigned;
|
|
end;
|
|
end;
|