#68049 - 2002-07-12 04:39 PM
Re: Determine NTConfig.pol entries
|
Richard H.
Administrator
   
Registered: 2000-01-24
Posts: 4946
Loc: Leatherhead, Surrey, UK
|
Updated to handle VALUEPREFIX type entries.
At least I think it does. Don't have any to test it on
code:
Break On Global $bInString $bInString=0 Global $bIsEnding $bIsEnding=0 Global $sString Global $cQuote $cQuote='"' Global $sAction Global $sHive Global $sKey Global $sEntry Global $sIniFile ; Constants Global $INDENT $INDENT=" | " Global $BRANCH $BRANCH=" |-" Global $SPACES $SPACES=" " Global $TAB $TAB=Chr(9)
; Call UDF $=udfDocPolicy(".\common.adm") Function udfDocPolicy($sPolicyFile) If Open(1,$sPolicyFile) "Cannot open file " $sPolicyFile " for reading." ? $udfDocPolicy=1 Return EndIf $sIniFile=$sPolicyFile $sData=ReadLine(1) While @ERROR=0 ; Convert tabs to spaces. ; How long did it take me to work out why the split was failing! ; Doh! $iIndex=InStr($sData,$TAB) While $iIndex $sData="" + SubStr($sData,1,$iIndex-1) + " " + SubStr($sData,$iIndex+1,9999) $iIndex=InStr($sData,$TAB) Loop udfParseLine(Split($sData)) $sData=ReadLine(1) Loop $udfDocPolicy=0 Return EndFunction Function udfParseLine($asData) $iArraySize=Ubound($asData) For $iIndex = 0 To $iArraySize udfInterpret($asData[$iIndex]) Next EndFunction Function udfInterpret($sToken) If $bInString=0 $sString="" EndIf If $sAction = "" Select Case $sToken="END" $sAction=$sToken Case $sToken="CLASS" $sAction=$sToken Case $sToken="CATEGORY" $sAction=$sToken Case $sToken="PART" $sAction=$sToken Case $sToken="POLICY" $sAction=$sToken Case $sToken="KEYNAME" $sAction=$sToken Case $sToken="VALUENAME" $sAction=$sToken Case $sToken="VALUEPREFIX" $sAction=$sToken EndSelect Else Select Case $bInString $sString=$sString + " " + $sToken If SubStr($sToken,Len($sToken),1)=$cQuote $bInString=0 $sString=SubStr($sString,1,Len($sString)-1) EndIf Case $sToken="" Return Case SubStr($sToken,1,1)=$cQuote $bInString=1 $sString=SubStr($sToken,2,Len($sToken)-1) If SubStr($sString,Len($sString),1)=$cQuote $bInString=0 $sString=SubStr($sString,1,Len($sString)-1) EndIf Case SubStr($sToken,1,2)="!!" ; Get parameter from string fields $sString=ReadProfileString($sIniFile,"strings",SubStr($sToken,3,99)) EndSelect ; Actions. If $bInString Return EndIf Select Case $sAction="END" Select Case $sToken="CATEGORY" $sIndent=SubStr($sIndent,1,Len($sIndent)-Len($INDENT)) EndSelect $sAction="" Case $sAction="CLASS" ? "Registry hive: " $sToken ? $sIndent="" Select Case $sToken="MACHINE" $sHive="HKEY_LOCAL_MACHINE" Case $sToken="USER" $sHive="HKEY_CURRENT_USER" EndSelect Case $sAction="CATEGORY" $sIndent $BRANCH If $sString="" $sToken Else $sString EndIf ? $sIndent=""+$sIndent+$INDENT Case $sAction="POLICY" $sIndent $SPACES "Policy: " If $sString="" $sToken Else $sString EndIf ? Case $sAction="KEYNAME" If $sString="" $sKey=$sToken Else $sKey=$sString EndIf $sIndent $SPACES "Key: " $sKey ? Case $sAction="VALUENAME" If $sString="" $sEntry=$sToken Else $sEntry=$sString EndIf $sIndent $SPACES $SPACES "Entry: '" $sEntry "'=" ReadValue($sHive + "\" + $sKey,$sEntry) ? Case $sAction="VALUEPREFIX" $iEnum=0 $sEntry=EnumValue($sHive + "\" + $sKey,$iEnum) While @ERROR=0 "ERROR=@ERROR, Enum=$iEnum, Entry=$sEntry" ? If $sString=SubStr($sEntry,1,Len($sString)) $sIndent $SPACES $SPACES "Entry: '" $sEntry "'=" ReadValue($sHive + "\" + $sKey,$sEntry) ? EndIf $iEnum=$iEnum+1 $sEntry=EnumValue($sHive + "\" + $sKey,$iEnum) Loop EndSelect $sAction="" $bIsEnding=0 EndIf EndFunction
[ 15 July 2002, 16:19: Message edited by: Richard Howarth ]
|
|
Top
|
|
|
|
Moderator: Glenn Barnas, NTDOC, Arend_, Jochen, Radimus, Allen, ShaneEP, Ruud van Velsen, Mart
|
0 registered
and 2235 anonymous users online.
|
|
|