PDA

View Full Version : Registry plugin


Instructor
1st August 2005, 11:25
Features:

- Powerful registry search:
   -fast algorithm
   -principle of turn in stack (first in -> last out)
    i.e. search from first registry key to last
   -search for key, value and/or string in any root
   -search with name and/or type
   -search with banner support
   -search with subkeys or not
- Read value of any type
- Write value of any type
- Create key
- Delete key       (same as DeleteRegKey)
- Delete value    (same as DeleteRegValue)


Some performance info:

Search in all HKEY_LOCAL_MACHINE where 60351 keys, 84714 values, 84714 strings

Search only NOT existed value:    (/K=0 /V=1 /S=0 /N=`#Not Existed#`)
  With /B=0: 0 min 9 sec 580 ms
  With /B=1: 0 min 16 sec 300 ms
  With /B=2: 1 min 19 sec 486 ms

Search any keys, values, strings:  (/K=1 /V=1 /S=1 /N=``)
  With /B=0: 2 min 46 sec 664 ms
  With /B=1: 2 min 56 sec 974 ms
  With /B=2: 6 min 2 sec 668 ms

Comperio
2nd August 2005, 00:00
Hey Instructor, nice work.

I had started experimenting doing something similiar with the system plugin. But yours looks much better!

Any chance you'll be adding support to import/export REG files?

Instructor
2nd August 2005, 09:17
Hi, Comperio.

Import/export simply doing with API RegSaveKey, RegRestoreKey and RegReplaceKey, BUT:


[MSDN]
Remarks

There are two different registry hive file formats. Registry hives created on current operating systems typically cannot be loaded by earlier ones.


RegRestoreKey

[MSDN]
Requirements
Windows NT/2000/XP: Included in Windows NT 3.1 and later.
Windows 95/98/Me: Unsupported.
Header: Declared in Winreg.h; include Windows.h.
Library: Use Advapi32.lib.
Unicode: Implemented as Unicode and ANSI versions.


So, probably there is only way to save multi-OS compatibility - write manually REG parser. I'll think that I can do.

Comperio
4th August 2005, 05:26
hmmm. I see your point. But, if you can do it, I think importing/exporting REG files would be a very cool feature.

And something you might consider:
Most of the time, (at least for me anyway), reg files would be used as a means to backup and restore on the same system. So I don't think it's too important that a reg file created on a 9x computer is compatible with a XP computer. (Personally, if I were going to import reg files as part of an install, then I'd probably have 2 files--one for XP and one for 2K).

But that's just me... Someone else may have a different view...

Instructor
4th August 2005, 20:12
http://forums.winamp.com/showthread.php?s=&threadid=223376

Instructor
5th August 2005, 18:19
Changes:
-Merged with REGEDIT4 plugin, probably this will be more comfortable for user.
 Increase plugin size to 13Kb, but you can simply recompile it, only with functions you need (see defines at the beginning of registry.c).

-Fixed: registry::DeleteKey in NT systems didn't delete subkeys

-Fixed: problem with compiling "RegistryTest.nsi" when nxs (http://nsis.sourceforge.net/wiki/Banner_with_Cancel_button) plugin isn't exist

-Now registry::RestoreKey checks if file exist


"Registry" plugin v1.1

Instructor
18th August 2005, 00:23
Changes:
-Fixed: Double calling GlobalFree in some case, that can cause crash
(registry::Find, registry::Close)

-Fixed: REG_RESOURCE_LIST, REG_NONE readed as string, instead of binary
(registry::Find, registry::Read)

-Added: Converts string to hex values
(registry::StrToHex)

-Added: Converts hex values to string
(registry::HexToStr)

-Full registry value types support, added:
REG_FULL_RESOURCE_DESCRIPTOR
REG_RESOURCE_REQUIREMENTS_LIST
REG_QWORD


BTW:
While testing plugin in Microsoft XP I was found errors in REGEDIT with /a switch:
-National characters incorrect exports from registry in hex format
(first hex digit: c->1 d->2 e->3 f->4)
-Special escape sequence "\n" is not replaced with "\\n"


"Registry" plugin v1.2

Brummelchen
18th August 2005, 14:16
Short question cause urgent

can i find all entries "defaulticon" with it ?
And can i export them ?

###
well that works, but i have empty entries

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\.nsc\DefaultIcon]
@=''
it has to be
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\.nsc\DefaultIcon]
@="dxmasf.dll,-502"

not all are empty
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows Scripting Host\Script Extensions\.JS\DefaultIcon]
@='%SystemRoot%\System32\wscript.exe,3'


Name "DefaultIcon"
OutFile "DefaultIcon.exe"

Section
SectionEnd

Function .onInit
IfFileExists "DefaultIcon.reg" 0 noreg
Delete DefaultIcon.reg
noreg:

FileOpen $R1 "DefaultIcon.reg" w
FileWrite $R1 "REGEDIT4"
FileWriteByte $R1 "13"
FileWriteByte $R1 "10"
FileWriteByte $R1 "13"
FileWriteByte $R1 "10"

registry::Open /NOUNLOAD "HKEY_LOCAL_MACHINE" "/K=1 /V=1 /S=1 /B=1 /N='DefaultIcon'" .r0
StrCmp $0 -1 end

loop:
registry::Find /NOUNLOAD .r1 .r2 .r3 .r4
IfErrors end
StrCmp $1 "" end
StrCmp $2 "" end
;StrCmp $3 "" loop
;StrCmp $4 "" loop

FileWrite $R1 "[HKEY_LOCAL_MACHINE\$1\$2]"
FileWriteByte $R1 "13"
FileWriteByte $R1 "10"
FileWrite $R1 "@='$3'"
FileWriteByte $R1 "13"
FileWriteByte $R1 "10"
FileWriteByte $R1 "13"
FileWriteByte $R1 "10"

Goto loop

end:
registry::Close

FileClose $R1
FunctionEnd

Brummelchen
18th August 2005, 15:13
Ok, i did it this way..

Name "DefaultIcon"
OutFile "DefaultIcon.exe"
AutoCloseWindow true

Section
SectionEnd

Function .onInit
IfFileExists "DefaultIcon.reg" 0 noreg
Delete DefaultIcon.reg
noreg:

FileOpen $R1 "DefaultIcon.reg" w
FileWrite $R1 "REGEDIT4"
FileWriteByte $R1 "13"
FileWriteByte $R1 "10"
FileWriteByte $R1 "13"
FileWriteByte $R1 "10"

registry::Open /NOUNLOAD "HKEY_LOCAL_MACHINE" "/K=1 /V=1 /S=1 /B=1 /N='DefaultIcon'" .r0
StrCmp $0 -1 end

loop:
registry::Find /NOUNLOAD .r1 .r2 .r3 .r4
IfErrors end
StrCmp $1 "" end
StrCmp $2 "" end
;StrCmp $3 "" loop
;StrCmp $4 "" loop

ReadRegStr $R2 HKLM "$1\$2" ""

;MessageBox MB_OKCANCEL "'$1\$2'$\n'$R2'$\n'$3''" IDCANCEL end

FileWrite $R1 "[HKEY_LOCAL_MACHINE\$1\$2]"
FileWriteByte $R1 "13"
FileWriteByte $R1 "10"

StrCmp $3 "" write_reg1
FileWrite $R1 "@='$3'"
Goto write_reg2
write_reg1:
FileWrite $R1 "@='$R2'"
write_reg2:
FileWriteByte $R1 "13"
FileWriteByte $R1 "10"
FileWriteByte $R1 "13"
FileWriteByte $R1 "10"

Goto loop

end:
registry::Close

FileClose $R1
FunctionEnd

Instructor
18th August 2005, 17:23
well that works, but i have empty entriesThis because "DefaultIcon" it is key (REG_KEY) and when key is found value and string are empty.
not all are emptyDo you use v1.2? In previos versions in NT systems strings not always updated.

Instructor
19th August 2005, 12:33
Changes:
-Fixed: Cross-calling functions. Now posible for example:
  registry::Open /NOUNLOAD ...
  registry::Find /NOUNLOAD ...
  registry::Read /NOUNLOAD ...
  registry::Write /NOUNLOAD ...
  registry::Close

-Fixed: registry::Read, when reading not existed value, returns "INVALID" registry type instead of "" (all output variables must be empty)

-Fixed: REG_LINK readed as string instead of binary

-Now posible to find default values (any type) or/and empty strings (REG_SZ, REG_EXPAND_SZ). Options with /N="" searches for empty names and without /N= for all names


"Registry" plugin v1.3

Brummelchen
19th August 2005, 23:22
well - see - "defaulticon" can be in the path
[...\DefaultIcon]
and as an entry.
"DefaultIcon"=

And the example below has it both in the path...
but only one of it is read out

yes, was 1.2 and 1.3 shows same behaviour.

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\.nsc\DefaultIcon]
@=''[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows Scripting Host\Script Extensions\.JS\DefaultIcon]
@='%SystemRoot%\System32\wscript.exe,3'

Instructor
19th August 2005, 23:50
Try "Search and write founded in text file" example in RegistryTest.nsi with your registry::Open parameters and check output file.


I have tested it with options you wrote before ["HKEY_LOCAL_MACHINE" "/K=1 /V=1 /S=1 /B=1 /N='DefaultIcon'"] and all fine.



Tested on XP and all fine. Founded ".JS" key, "DefaultIcon" is value - check your script:

REG_SZ:"SOFTWARE\Microsoft\Windows Scripting Host\Script Extensions\.JS" "DefaultIcon"="%SystemRoot%\System32\wscript.exe,3"

Brummelchen
21st August 2005, 04:14
its not "JS"-problem, its here
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\.nsc\DefaultIcon]
@=''
has to be
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\.nsc\DefaultIcon]
@="dxmasf.dll,-502"
on some reason it is empty - try the first script above and test it pls (not the second)

Instructor
21st August 2005, 07:37
Why you didn't test "Search and write founded in text file"? With it no problem there is something in your script. Like I said before if you find registry key then string is EMPTY, registry::Find can't find registry key and they default string at the same time. You need to read it.
Try this:

Name "DefaultIcon"
OutFile "DefaultIcon.exe"
AutoCloseWindow true

!include "WordFunc.nsh"
!insertmacro WordReplace

Section
StrCpy $R0 HKEY_LOCAL_MACHINE
FileOpen $R1 "DefaultIcon.reg" w
FileWrite $R1 "REGEDIT4$\r$\n$\r$\n"

registry::Open /NOUNLOAD "$R0" "/K=1 /V=0 /S=0 /B=1 /N='DefaultIcon'" .r0
StrCmp $0 -1 end

loop:
registry::Find /NOUNLOAD .r0 .r1 .r2 .r3
StrCmp $3 "" end

registry::Read /NOUNLOAD "$R0\$0\$1" "" .r4 .r5 .r6 .r7
StrCmp $6 "" loop

${WordReplace} "$6" "\" "\\" "+" $6
${WordReplace} "$6" '"' '\"' "+" $6
FileWrite $R1 '[$R0\$0\$1]$\r$\n'
FileWrite $R1 '@="$6"$\r$\n$\r$\n'
Goto loop

end:
registry::Close
FileClose $R1
SectionEnd

Brummelchen
21st August 2005, 12:02
You dit not realize that your find-routine sometimes
returnes a value and sometimes not on same condition...

i search all
/K=1 - Search Keys (default)
/V=1 - Search Values (default)
/S=1 - Search Strings (default)

so if it returnes all values 3 cant be emtpy

.r1 - $1="path"
.r2 - $2="value" or "key"
.r3 - $3="string"
.r4 - $4="TYPE"

but the string is empty, however

please work on that

Instructor
21st August 2005, 12:21
Brummelchen attach "DefaultIcon.reg" with my previos post or generated file "Search and write founded in text file". Now I don't realy understand what you want :(

PS
I'll say again: if $4="REG_KEY" then $3="" this is by design!

Brummelchen
21st August 2005, 23:39
This because "DefaultIcon" it is key (REG_KEY) and
when key is found value and string are empty.

And thats what i say - it does not make any sense...
.. to get the key and not its value although it can be performed.

###

ok, let's see...
[path] ist without my search string ???
[value] or [key] is somehow what ?

eg HKLM [path\key}
[string]=

???

dont make either any sense to me... :/

Instructor
22nd August 2005, 07:38
Honestly, I'm not like to talk with people which listen only itself. Of course its not about you, Brummelchen.

Brummelchen
22nd August 2005, 19:56
its not personal but you dont get this point

script + result

and as you can see your function mostly returns nothing and in some cases its value.
[path]
[key]=[value]

thats the combination...

maybe your point of view is from the applikation - mine is from the registry.

Name "DefaultIcon"
OutFile "DefaultIcon.exe"

Section
SectionEnd

Function .onInit
IfFileExists "DefaultIcon.reg" 0 noreg
Delete DefaultIcon.reg
noreg:

FileOpen $R1 "DefaultIcon.reg" w
FileWrite $R1 "REGEDIT4"
FileWriteByte $R1 "13"
FileWriteByte $R1 "10"
FileWriteByte $R1 "13"
FileWriteByte $R1 "10"

registry::Open /NOUNLOAD "HKEY_LOCAL_MACHINE" "/K=1 /V=1 /S=1 /B=1 /N='DefaultIcon'" .r0
StrCmp $0 -1 end

loop:
registry::Find /NOUNLOAD .r1 .r2 .r3 .r4
IfErrors end
StrCmp $1 "" end
StrCmp $2 "" end
;StrCmp $3 "" loop
;StrCmp $4 "" loop

FileWrite $R1 "[HKEY_LOCAL_MACHINE\$1\$2]"
FileWriteByte $R1 "13"
FileWriteByte $R1 "10"
FileWrite $R1 "@='$3'"
FileWriteByte $R1 "13"
FileWriteByte $R1 "10"
FileWriteByte $R1 "13"
FileWriteByte $R1 "10"

Goto loop

end:
registry::Close

FileClose $R1
FunctionEnd
Result
REGEDIT4

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\.nsc\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\.tico\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\ACDSee.AIS\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\ACLFile\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\acwfile\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Agent.Character.2\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Agent.Character2.2\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\AIFFFile\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\anifile\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\appfixfile\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\ASFFile\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\ASXFile\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\atpr\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\AudioCD\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\AUFile\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\AVIFile\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\AWFile\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\batfile\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Briefcase\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CATFile\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\cdafile\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CERFile\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\certificate_wab_auto_file\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\ChannelFile\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\ChannelShortcut\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\ChatFile\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\chm.file\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\clpfile\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\cmdfile\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\comfile\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CRLFile\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CSSfile\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\curfile\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\dbfile\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Directory\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\dllfile\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\DocShortcut\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\dqyfile\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Dreamweaver.Template\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Drive\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\dunfile\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\DVD\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\ELMFile\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\emffile\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Excel.Addin\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Excel.Backup\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Excel.Chart.8\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Excel.CSV\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Excel.Dialog\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Excel.DIF\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Excel.Macrosheet\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Excel.Sheet.8\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Excel.SLK\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Excel.Template\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Excel.VBAModule\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Excel.Workspace\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Excel.XLL\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Excelhtmlfile\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Excelhtmltemplate\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\excelmhtmlfile\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Excelxmlss\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\exefile\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\FFAFile\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\FFLFile\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\FFTFile\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\FFXFile\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\fndfile\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Folder\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\fonfile\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\FoxitReader.Document\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\ftp\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\giffile\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\gopher\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\hlpfile\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\hlsw\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\HLSW Server List\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\htafile\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\htfile\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\htmlfile\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\HTTfile\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\HTTP\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\https\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\iclfile\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\icmfile\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\icofile\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\IDApro.Database32\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\inffile\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\inifile\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\InternetShortcut\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\iqyfile\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\irc\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\ITS FILE\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\IVFfile\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\jpegfile\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\JSEFile\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\JSFile\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\LEXFile\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\LWVFile\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\m3ufile\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Macromedia.DesignNotes\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\MacromediaFlashPaper.MacromediaFlashPaper\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\mailto\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\MaxthonSkin\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\MediaCatalogMGC\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\MediaCatalogMML\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\MediaCatalogMMW\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\MediaPackageFile\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\mhtmlfile\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Microsoft Internet Mail Message\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Microsoft Internet News Message\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\MIDFile\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\MMS\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\MMST\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\MMSU\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\mp3file\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\mpegfile\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\MPlayer\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\msbackupfile\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\MSBD\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\MSCFile\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\MSDASC\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\MSDASQL\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Msi.Package\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Msi.Patch\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\MSInfo.Document\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\MsRcIncident\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\msstylesfile\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\NBBACKUPType\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\NBCOMPRESSType\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\NBJOBType\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Nero Cover Designer.Document\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Nero Cover Designer.Template\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\NeroAACType\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\NeroAudioType\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\NeroCDCoverType\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\NeroCDExtraType\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\NeroCDROMBootType\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\NeroCDROMEFIBootType\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\NeroCDROMHybridType\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\NeroCDROMType\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\NeroCopyType\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\NeroCueSheetType\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\NeroDVDVideoType\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\NeroErrorType\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\NeroHDBackupType\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\NeroHDBVideoType\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\NeroHFSType\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\NeroImageType\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\NerominiDVDType\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\NeroMixedModeType\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\NeroMP3Type\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\NeroSuperVideoType\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\NeroUDFISOType\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\NeroUDFType\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\NeroVideoType\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\NeroWMAType\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\news\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\nntp\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\NSIS.Header\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\NSIS.Script\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\ODBC.FileDSN\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\odccubefile\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\odcdatabasefile\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\ODCfile\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\odcnewfile\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\odctablefile\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\OPCFile\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\oqyfile\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\otffile\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\P7RFile\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\pbkfile\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\pfmfile\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\PFXFile\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\PingPlotter.SaveFile\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\PIPFile\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\pjpegfile\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\pnffile\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\pngfile\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\prffile\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\ratfile\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\RDP.File\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\regfile\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\rlogin\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\rnkfile\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\rqyfile\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\rtffile\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\SafeFiles.1\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\SavedDsQuery\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\scriptletfile\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\ShellScrap\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\ShockwaveFlash.ShockwaveFlash\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\snews\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\SoundRec\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\SPCFile\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\spsfile\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\STFFile\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\STLFile\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\telnet\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\themefile\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\tibfile\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\TIFImage.Document\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\tisfile\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\tn3270\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Trust.PolicyPackage\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Trust.PolicyPackage.1\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\ttcfile\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\ttffile\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\TuneUp.Utilities.2004.Unlock.Code\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\TuneUp.Utilities.2006.Unlock.Code\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\txtfile\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\unreal\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Unreal.Link\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Unreal.Map\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Unreal.Module\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\ut2004\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\UT2004.Link\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\UT2004.Map\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\UT2004.Module\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\UXDCFILE\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\VBEFile\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\VBSFile\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\vcard_wab_auto_file\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\wab_auto_file\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\WAXFile\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\webpnpFile\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Winamp.Playlist\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Winamp.SkinZip\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\WinImage\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\WinImageIso\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\WinRAR\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\WinRAR.7Z\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\WinRAR.ACE\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\WinRAR.REV\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\WinRAR.XPI\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\WinRAR.ZIP\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\wmafile\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\WMDFile\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\wmffile\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\WMP.DVR-MSFile\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\WMP.WMDBFile\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\WMSFile\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\WMVFile\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\WMZFile\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Word.Backup.8\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Word.Document.8\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Word.RTF.8\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Word.Template.8\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Word.Wizard.8\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\wordhtmlfile\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\wordhtmltemplate\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\wordmhtmlfile\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Wordpad.Document.1\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\wordxmlfile\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\WPLFile\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\wrifile\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\WSFFile\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\WSHFile\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\WVXFile\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\x-internet-signup\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\xbmfile\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\XEV.FailSafeApp\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\XEV.GenericApp\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\XEV.OriginalApp\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\xmlfile\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\xslfile\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\zapfile\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\ZPAVIFile\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\ZPMPEGFile\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\ZPMPGFile\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\ZPWMAFile\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\ZPWMVFile\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\ZPZPLFile\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Applications\wmplayer.exe\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{00020803-0000-0000-C000-000000000046}\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{00020810-0000-0000-C000-000000000046}\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{00020811-0000-0000-C000-000000000046}\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{00020820-0000-0000-C000-000000000046}\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{00020821-0000-0000-C000-000000000046}\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{00020900-0000-0000-C000-000000000046}\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{00020901-0000-0000-C000-000000000046}\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{00020906-0000-0000-C000-000000000046}\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{00020907-0000-0000-C000-000000000046}\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{00022601-0000-0000-C000-000000000046}\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{00022602-0000-0000-C000-000000000046}\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{00022603-0000-0000-C000-000000000046}\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{0002CE02-0000-0000-C000-000000000046}\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{00030000-0000-0000-C000-000000000046}\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{00030001-0000-0000-C000-000000000046}\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{00030002-0000-0000-C000-000000000046}\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{008FD5DD-6DBB-48e3-991B-2D3ED658516A}\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{0CD7A5C0-9F37-11CE-AE65-08002B2E1262}\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{0DF44EAA-FF21-4412-828E-260A8728E7F1}\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{148BD520-A2AB-11CE-B11F-00AA00530503}\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{148BD52A-A2AB-11CE-B11F-00AA00530503}\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{14E8BBD8-1D1C-4D56-A4DA-D20B75EB814E}\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{1CDB2949-8F65-4355-8456-263E7C208A5D}\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{1f4de370-d627-11d1-ba4f-00a0c91eedba}\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{208D2C60-3AEA-1069-A2D7-08002B30309D}\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{20D04FE0-3AEA-1069-A2D8-08002B30309D}\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{21EC2020-3AEA-1069-A2DD-08002B30309D}\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{2227A280-3AEA-1069-A2DE-08002B30309D}\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{233A9692-667E-11d1-9DFB-006097D50408}\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{233A9694-667E-11d1-9DFB-006097D50408}\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{25336920-03F9-11CF-8FD0-00AA00686F13}\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{2559a1f0-21d7-11d4-bdaf-00c04f60b9f0}\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{2559a1f1-21d7-11d4-bdaf-00c04f60b9f0}\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{2559a1f2-21d7-11d4-bdaf-00c04f60b9f0}\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{2559a1f3-21d7-11d4-bdaf-00c04f60b9f0}\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{2559a1f4-21d7-11d4-bdaf-00c04f60b9f0}\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{2559a1f5-21d7-11d4-bdaf-00c04f60b9f0}\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{2559a1f7-21d7-11d4-bdaf-00c04f60b9f0}\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{2728520d-1ec8-4c68-a551-316b684c4ea7}\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{2E17C0EF-2851-459b-A3C8-27A41D4BC9F7}\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{3050F3D9-98B5-11CF-BB82-00AA00BDCE0B}\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{3050f4d8-98B5-11CF-BB82-00AA00BDCE0B}\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{30D02401-6A81-11d0-8274-00C04FD5AE38}\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{3c5c43a3-9ce9-4a9b-9699-2ac0cf6cc4bf}\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{3DAB30ED-8132-40bf-A8BA-7B5057F0CD10}\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{450D8FBA-AD25-11D0-98A8-0800361B1103}\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{46E31370-3F7A-11CE-BED6-00AA00611080}\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{48123bc4-99d9-11d1-a6b3-00c04fd91555}\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{4C599241-6926-101B-9992-00000B65C6F9}\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{4c892621-6757-4fe0-ad8c-a6301be7fba2}\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{5512D110-5CC6-11CF-8D67-00AA00BDCE1D}\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{5512D112-5CC6-11CF-8D67-00AA00BDCE1D}\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{5512D114-5CC6-11CF-8D67-00AA00BDCE1D}\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{5512D116-5CC6-11CF-8D67-00AA00BDCE1D}\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{5512D118-5CC6-11CF-8D67-00AA00BDCE1D}\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{5512D11A-5CC6-11CF-8D67-00AA00BDCE1D}\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{5512D11C-5CC6-11CF-8D67-00AA00BDCE1D}\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{5512D11E-5CC6-11CF-8D67-00AA00BDCE1D}\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{5512D122-5CC6-11CF-8D67-00AA00BDCE1D}\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{5512D124-5CC6-11CF-8D67-00AA00BDCE1D}\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{56197BB9-FBA0-4CFB-802B-129A9674D7C1}\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{5a3d988e-820d-4aaf-ba87-440081768a17}\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{5A79987F-5D0A-425C-B70D-E49AD5B6BF23}\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{5ef4af3a-f726-11d0-b8a2-00c04fc309a4}\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{63da6ec0-2e98-11cf-8d82-444553540000}\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{645FF040-5081-101B-9F08-00AA002F954E}\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{65014010-9F62-11d1-A651-00600811D5CE}\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{67cf8cbd-e5c0-44f7-9de5-e1d599d626d8}\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{692F0339-CBAA-47e6-B5B5-3B84DB604E87}\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{6DFD7C5C-2451-11d3-A299-00C04F8EF6AF}\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{6E182020-F460-11CE-9BCD-00AA00608E01}\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{7007ACC7-3202-11D1-AAD2-00805FC1270E}\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{7325c922-bb81-47b0-8b2f-a5f8605e242f}\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{73FDDC80-AEA9-101A-98A7-00AA00374959}\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{750fdf0f-2a26-11d1-a3ea-080036587f03}\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{79176FB0-B7F2-11CE-97EF-00AA006D2776}\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{7A9D77BD-5403-11d2-8785-2E0420524153}\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{7BD29E00-76C1-11CF-9DD0-00A0C9034933}\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{7CBCC347-0EDA-40D1-B30B-ECB5BD6C8E11}\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{8369AB20-56C9-11D0-94E8-00AA0059CE02}\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{85BBD920-42A0-1069-A2E4-08002B30309D}\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{871C5380-42A0-1069-A2EA-08002B30309D}\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{88C6C381-2E85-11D0-94DE-444553540000}\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{8BD21D10-EC42-11CE-9E0D-00AA006002F3}\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{8BD21D20-EC42-11CE-9E0D-00AA006002F3}\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{8BD21D30-EC42-11CE-9E0D-00AA006002F3}\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{8BD21D40-EC42-11CE-9E0D-00AA006002F3}\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{8BD21D50-EC42-11CE-9E0D-00AA006002F3}\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{8BD21D60-EC42-11CE-9E0D-00AA006002F3}\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{8E6E6079-0CB7-11d2-8F10-0000F87ABD16}\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{978C9E23-D4B0-11CE-BF2D-00AA003F40D0}\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{992CFFA0-F557-101A-88EC-00DD010CCC48}\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{9B0EFD60-F7B0-11D0-BAEF-00C04FC308C9}\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{9DB7A13C-F208-4981-8353-73CC61AE2783}\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{9E56BE60-C50F-11CF-9A2C-00A0C90A90CE}\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{9E56BE61-C50F-11CF-9A2C-00A0C90A90CE}\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{A9B48EAC-3ED8-11d2-8216-00C04FB687DA}\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{ADB9F5A4-E73E-49b8-99B6-2FA317EF9DBC}\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{AFDB1F70-2A4C-11d2-9039-00C04F8EEB3E}\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{B005E690-678D-11d1-B758-00A0C90564FE}\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{B12AE898-D056-4378-A844-6D393FE37956}\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{B50F5260-0C21-11D2-AB56-00A0C9082678}\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{B7BBD408-F09C-4aa8-B65E-A00B8FE0F0B9}\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{B96D2802-4B41-4bc7-A6A4-55C5A12268CA}\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{BD84B380-8CA2-1069-AB1D-08000948F534}\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{BDEADF00-C265-11d0-BCED-00A0C90AB50F}\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{C4EE31F3-4768-11D2-BE5C-00A0C9A83DA1}\DefaultIcon]
@='%SystemRoot%\system32\SHELL32.dll,-135'

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{C62A69F0-16DC-11CE-9E98-00AA00574A4F}\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{c79d1575-b8c6-4862-a284-788836518b97}\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{CE682BA0-C554-43f7-99C6-2F00FE46C8BC}\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{D20EA4E1-3957-11d2-A40B-0C5020524152}\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{D20EA4E1-3957-11d2-A40B-0C5020524153}\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{D4480A50-BA28-11d1-8E75-00C04FA31A86}\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{D6277990-4C6A-11CF-8D87-00AA0060F5BF}\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{D7053240-CE69-11CD-A777-00DD01143C57}\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{DFD181E0-5E2F-11CE-A449-00AA004A803D}\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{e17d4fc0-5564-11d1-83f2-00a0c90dc849}\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{E211B736-43FD-11D1-9EFB-0000F8757FCD}\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{EAE50EB0-4A62-11CE-BED6-00AA00611080}\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{ecabaebd-7f19-11d2-978E-0000f8757e2a}\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{ECF03A32-103D-11d2-854D-006008059367}\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{EFA24E61-B078-11d0-89E4-00C04FC9E26E}\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{EFA24E62-B078-11d0-89E4-00C04FC9E26E}\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{EFA24E63-B078-11d0-89E4-00C04FC9E26E}\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{effc2928-37b1-11d2-a3c1-00c04fb1782a}\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{f5078f28-c551-11d3-89b9-0000f81fe221}\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{F5078F40-C551-11D3-89B9-0000F81FE221}\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{F5175861-2688-11d0-9C5E-00AA00A45957}\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{FB0C9C8A-6C50-11D1-9F1D-0000F8757FCD}\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{FBF23B42-E3F0-101B-8488-00AA003E56F8}\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{FF393560-C2A7-11CF-BFF4-444553540000}\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\SystemFileAssociations\.doc\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\SystemFileAssociations\.rtf\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\SystemFileAssociations\.wri\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\SystemFileAssociations\audio\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\SystemFileAssociations\system\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\SystemFileAssociations\text\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\SystemFileAssociations\video\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Clients\StartMenuInternet\IEXPLORE.EXE\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows Scripting Host\Script Extensions\.JS\DefaultIcon]
@='%SystemRoot%\System32\wscript.exe,3'

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows Scripting Host\Script Extensions\.VBS\DefaultIcon]
@='%SystemRoot%\System32\wscript.exe,2'

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{42042206-2D85-11D3-8CFF-005004838597}\Old Icon\htmlfile\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{42042206-2D85-11D3-8CFF-005004838597}\Old Icon\mhtmlfile\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Clients\Contacts\Address Book\Protocols\certificate_wab_auto_file\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Clients\Contacts\Address Book\Protocols\ldap\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Clients\Contacts\Address Book\Protocols\vcard_wab_auto_file\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Clients\Mail\Becky! ver.2 deutsch\Protocols\mailto\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Clients\Mail\Outlook Express\Protocols\mailto\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Clients\News\Outlook Express\Protocols\news\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Clients\News\Outlook Express\Protocols\nntp\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Clients\News\Outlook Express\Protocols\snews\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Multimedia\WMPlayer\Devices\AudioCD\DefaultIcon]
@='C:\WINDOWS\system32\shell32.dll,40'

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Multimedia\WMPlayer\Devices\DVD\DefaultIcon]
@='shell32.dll,40'

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Outlook Express\Outlook NewsReader\Protocols\news\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Outlook Express\Outlook NewsReader\Protocols\nntp\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Outlook Express\Outlook NewsReader\Protocols\snews\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\PublishingWizard\InternetPhotoPrinting\DefaultIcon]
@='shell32.dll,-251'

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\AutoplayHandlers\ContentTypeHandlers\MusicFilesContentHandler\DefaultIcon]
@='%SystemRoot%\system32\SHELL32.dll,-225'

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\AutoplayHandlers\ContentTypeHandlers\PicturesContentHandler\DefaultIcon]
@='shimgvw.dll,3'

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\AutoplayHandlers\ContentTypeHandlers\VideoFilesContentHandler\DefaultIcon]
@='%SystemRoot%\system32\SHELL32.dll,-224'

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\AutoplayHandlers\Handlers\MSCDBurningOnArrival\DefaultIcon]
@='%SystemRoot%\system32\SHELL32.dll,-5'

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\AutoplayHandlers\Handlers\MSOpenFolder\DefaultIcon]
@='%SystemRoot%\system32\SHELL32.dll,-5'

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\AutoplayHandlers\Handlers\MSPlayCDAudioOnArrival\DefaultIcon]
@='%ProgramFiles%\Windows Media Player\wmplayer.exe,0'

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\AutoplayHandlers\Handlers\MSPlayDVDMovieOnArrival\DefaultIcon]
@='%ProgramFiles%\Windows Media Player\wmplayer.exe,0'

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\AutoplayHandlers\Handlers\MSPlayMediaOnArrival\DefaultIcon]
@='C:\Programme\Windows Media Player\wmplayer.exe,0'

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\AutoplayHandlers\Handlers\MSPrintPicturesOnArrival\DefaultIcon]
@='%SystemRoot%\system32\SHELL32.dll,-17'

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\AutoplayHandlers\Handlers\MSPromptEachTime\DefaultIcon]
@='%SystemRoot%\system32\SHELL32.dll,-3'

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\AutoplayHandlers\Handlers\MSPromptEachTimeNoContent\DefaultIcon]
@='%SystemRoot%\system32\SHELL32.dll,-3'

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\AutoplayHandlers\Handlers\MSRipCDAudioOnArrival\DefaultIcon]
@='%ProgramFiles%\Windows Media Player\wmplayer.exe,0'

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\AutoplayHandlers\Handlers\MSShowPicturesOnArrival\DefaultIcon]
@='%SystemRoot%\system32\SHELL32.dll,-249'

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\AutoplayHandlers\Handlers\MSTakeNoAction\DefaultIcon]
@='%SystemRoot%\system32\SHELL32.dll,-338'

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\AutoplayHandlers\Handlers\MSWiaEventHandler\DefaultIcon]
@='%systemroot%\System32\wiaacmgr.exe,-2'

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\AutoplayHandlers\Handlers\MSWMDMHandler\DefaultIcon]
@='%ProgramFiles%\Windows Media Player\wmplayer.exe,0'

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\AutoplayHandlers\Handlers\MSWMPBurnCDOnArrival\DefaultIcon]
@='%ProgramFiles%\Windows Media Player\wmplayer.exe,0'

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FindExtensions\Static\ShellSearch\0\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FindExtensions\Static\ShellSearch\1\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FindExtensions\Static\ShellSearch\2\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FindExtensions\Static\SrExt\0\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FindExtensions\Static\WabFind\0\DefaultIcon]
@=''

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FindExtensions\Static\WebSearch\0\DefaultIcon]
@=''

Instructor
23rd August 2005, 10:39
Registry keys always have default values and you ask why when plugin found key it not return default value. I answer
API RegEnumKeyEx isn't return default value, so it must be readed MANUALY. Its not readed by plugin, because it'll reduce plugin perfomance.

If our purpose save all default values of keys "DefaultIcon" in file in REGEDIT4 format then options is "/K=1 /V=0 /S=0" not "/K=1 /V=1 /S=1", because first we search for key "DefaultIcon", when we have found it we read default value in this key and then save key and string in file.

For example:
Our script found key ($0="SOFTWARE\Classes\.nsc", $1="DefaultIcon", $2="", $3="REG_KEY") then we read default value of this key ($4="$0\$1", $5="", $6="dxmasf.dll,-502", $7="REG_SZ")

Please test the script below and you'll see that all working ok.


Name "DefaultIcon"
OutFile "DefaultIcon.exe"
AutoCloseWindow true

!include "WordFunc.nsh"
!insertmacro WordReplace

Section
StrCpy $R0 HKEY_LOCAL_MACHINE
FileOpen $R1 "DefaultIcon.reg" w
FileWrite $R1 "REGEDIT4$\r$\n$\r$\n"

registry::Open /NOUNLOAD "$R0" "/K=1 /V=0 /S=0 /B=1 /N='DefaultIcon'" .r0
StrCmp $0 -1 end

loop:
registry::Find /NOUNLOAD .r0 .r1 .r2 .r3
StrCmp $3 "" end

registry::Read /NOUNLOAD "$R0\$0\$1" "" .r4 .r5 .r6 .r7
StrCmp $6 "" loop

${WordReplace} "$6" "\" "\\" "+" $6
${WordReplace} "$6" '"' '\"' "+" $6
FileWrite $R1 '[$R0\$0\$1]$\r$\n'
FileWrite $R1 '@="$6"$\r$\n$\r$\n'
Goto loop

end:
registry::Close
FileClose $R1
SectionEnd
Script used header (http://forums.winamp.com/attachment.php?s=&postid=1734108)

Instructor
29th August 2005, 07:41
Changes:
-Fixed: registry::Find and registry::Read does not swap 2 bytes in REG_DWORD_BIG_ENDIAN number
-Fixed: registry::SaveKey saves REG_DWORD_BIG_ENDIAN not as binary
-Added missing types to write:
   REG_DWORD_BIG_ENDIAN
   REG_NONE
   REG_LINK
   REG_RESOURCE_LIST
   REG_FULL_RESOURCE_DESCRIPTOR
   REG_RESOURCE_REQUIREMENTS_LIST
   REG_QWORD
-Source updated to use new StackFunc.h (v1.4)


"Registry" plugin v1.4

Brummelchen
29th August 2005, 17:40
Im a bit confused, pls tell me
Name "DefaultIcon"
OutFile "DefaultIcon.exe"
AutoCloseWindow true

Section
SectionEnd

Function .onInit
IfFileExists "DefaultIcon.reg" 0 noreg
Delete DefaultIcon.reg
noreg:

FileOpen $R1 "DefaultIcon.reg" w
FileWrite $R1 "REGEDIT4"
FileWriteByte $R1 "13"
FileWriteByte $R1 "10"
FileWriteByte $R1 "13"
FileWriteByte $R1 "10"

registry::Open /NOUNLOAD "HKEY_LOCAL_MACHINE" "/K=1 /V=1 /S=1 /B=1 /N='DefaultIcon'" .r0
StrCmp $0 -1 end

loop:
registry::Find /NOUNLOAD .r1 .r2 .r3 .r4
;IfErrors end
StrCmp $1 "" end
StrCmp $2 "" end
;StrCmp $3 "" loop
;StrCmp $4 "" loop

ReadRegStr $R2 HKLM "$1\$2" ""

;MessageBox MB_OKCANCEL "'$1\$2'$\n'$R2'$\n'$3''" IDCANCEL end

FileWrite $R1 "[HKEY_LOCAL_MACHINE\$1\$2]"
FileWriteByte $R1 "13"
FileWriteByte $R1 "10"

StrCmp $3 "" write_reg1
FileWrite $R1 "@='$3'"
Goto write_reg2
write_reg1:
FileWrite $R1 "@='$R2'"
write_reg2:
FileWriteByte $R1 "13"
FileWriteByte $R1 "10"
FileWriteByte $R1 "13"
FileWriteByte $R1 "10"

Goto loop

end:
registry::Close

FileClose $R1
FunctionEnd

With
IfErrors end
the reg-file is about 2k, w/o 55k.
so what error happend ? thx

Instructor
30th August 2005, 08:28
Registry plugin doesn't change IfErrors flag, I see what it changed by ReadRegStr, when it try to read unexisted value. You can use ClearErrors after it.

Brummelchen
31st August 2005, 11:57
sure, i see - the following ReadRegStr causes that and it is not cleared.

thx, never thought this way.

Instructor
3rd September 2005, 09:34
Changes:
-GlobalAlloc replaced with static variables
-registry::Write create key if necessary.
-Fixed: When reading long binary data odd number appeared (1023 + NULL character). Now string length: 1022 + NULL character.
-New: registry::ReadExtra, registry::WriteExtra
   now possible to read and/or write registry string up to 64Kb (65536) (thanks for idea Iceman_K, RegBin plugin (http://nsis.sourceforge.net/wiki/Write_arbitrary_sized%2C_runtime_assigned_binary_data_to_Registry))


"Registry" plugin v1.5

Instructor
12th September 2005, 14:44
Changes:
-registry::CreateKey reduce number of parameters (registry::CreateKey "[fullpath]" .r0)
-Fixed: registry::Write accepted only uppercase registry type


"Registry" plugin v1.6

Instructor
26th November 2005, 09:49
New: registry::CopyValue
New: registry::MoveValue
New: registry::CopyKey
New: registry::MoveKey
New: registry::KeyExists


"Registry" plugin v1.7

Instructor
14th December 2005, 08:21
Fixed: mixed MAX_STRLEN and MAX_PATH defines, maximum registry string length was 256+32 (appeared in v1.7)
Updated: StrFunc.h to v1.4


"Registry" plugin v1.8

Instructor
21st December 2005, 00:13
New: registry::DeleteKeyEmpty delete empty key (if no values and subkeys in it)


"Registry" plugin v1.9

Instructor
6th January 2006, 22:34
If anyone can test this version of the registry plugin for Pocket PC?

XPero
7th January 2006, 01:12
Can you please add support for version 5 of Windows Registry?

Instructor
8th January 2006, 03:24
For what you need Windows Registry 5?

XPero
8th January 2006, 14:04
For exporting reg keys data containing paths. For example, if the Data of a REG_SZ is "E:\My Things\My Thing.myext", the exported reg key won't work with your Registry Plugin. At least, it didnt for me. The hex conversion isn't right.

Instructor
8th January 2006, 18:29
Registry plugin was successfully tested with all my registry in Windows 95/Me/XP. There few paths in it :)
the exported reg key won't work with your Registry PluginWhat the plugin call, what the errorlevel, what the output file, what your key contents when you exporting it with the regedit.exe?

XPero
8th January 2006, 20:15
I will post later next week (busy at the moment) the reg file created by your plugin and the one created using Regedit.exe so you can compare them.

Instructor
8th January 2006, 20:21
OK. And I hope you use the latest version.

XPero
13th January 2006, 07:50
Works now with latest version. Thanks

Instructor
11th February 2006, 10:22
New: "PPC-Registry" plugin - registry plugin for Pocket PC. All thanks to Thomas Bednarz (Smart Solutions AG)

Changed: registry::Read reduce number of parameters

Fixed: registry::SaveKey does not convert short roots to long (HKLM->HKEY_LOCAL_MACHINE)

Updated: "ConvFunc.h" to v1.5

Updated: "StrFunc.h" to v1.6

Changed: Now plugin used header "Registry.nsh" ("PPC-Registry.nsh") for custom user variables and
              better compile errors check.

Update from previous versions:
         - Insert line in script:
            !include "Registry.nsh"
         - Replace:
            registry::Open -> ${registry::Open} ...
         - Replace:
            .r0 -> $0, .r1 -> $1 ... .R0 -> $R0, .R1 -> $R1 ...


"Registry" plugin v2.0

Brummelchen
20th February 2006, 23:41
This reg_multi_sz is not working

HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Session Manager:PendingFileRenameOperations

variable only contains the first line - values are seperated by an empty line eg:

\??\C:\DOKUME~1\user\LOKALE~1\Temp\~nsu.tmp\Au_.exe

\??\C:\DOKUME~1\user\LOKALE~1\Temp\~nsu.tmp\Au_.exe

\??\C:\DOKUME~1\user\LOKALE~1\Temp\nse274.tmp\registry.dll

Instructor
21st February 2006, 07:08
"PendingFileRenameOperations" value has two NULL characters normally this means that value ended (one NULL character - end of line)

"PendingFileRenameOperations"=hex(7):5c,3f,3f,5c,43,3a,5c,57,49,4e,4e,54,5c,73,\
79,73,74,65,6d,33,32,5c,73,70,6f,6f,6c,5c,44,52,49,56,45,52,53,5c,43,4f,4c,\
4f,52,5c,4e,65,77,00,00,5c,3f,3f,5c,43,3a,5c,44,4f,43,55,4d,45,7e,31,5c,73,\
61,61,5c,4c,4f,43,41,4c,53,7e,31,5c,54,65,6d,70,5c,6e,73,61,31,42,38,42,2e,\
74,6d,70,5c,52,65,67,69,73,74,72,79,2e,64,6c,6c,00,00,5c,3f,3f,5c,43,3a,5c ...

I'll see what I can do.

Instructor
21st February 2006, 07:57
Fixed: registry::Read interpret empty line of REG_MULTI_SZ value as end of value.
Updated: "ConvFunc.h" to v1.6


"Registry" plugin v2.1

[deleted]

Brummelchen
21st February 2006, 09:43
Thank you much :) top da man ^^

erks, sorry - nearly.

when i empty that key manually this remains

"PendingFileRenameOperations"=hex(7):00

registry::read shows me a blank value.

maybe you can fix this too ?


some nasty code to avoid it:
;pending operations ?
ClearErrors
${registry::Read} "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager" "PendingFileRenameOperations" $R9 $R8
StrCmp $R9 "" no_pending
StrLen $R8 $R9
StrCmp $R8 1 no_pending
${registry::Unload}
;your action here
Quit
no_pending:
${registry::Unload}

Instructor
21st February 2006, 10:03
Please download v2.1 again, I forgot one thing in fix.

Brummelchen
21st February 2006, 10:16
somethings really going bad now - the installer quits on starting the plugin and remains the temp folder

Instructor
21st February 2006, 10:27
I'm looking at it now.

Instructor
21st February 2006, 10:51
Fixed: registry::Read REG_MULTI_SZ value problems ( take two :) ).


"Registry" plugin v2.2

Brummelchen
21st February 2006, 10:57
crash - fixed

zero value - not fixed
"PendingFileRenameOperations"=hex(7):00
(i get my message)

but no worry so far i use my nasty code above as long it cannot be fixed

Instructor
21st February 2006, 11:09
zero value - not fixed
"PendingFileRenameOperations"=hex(7):00
(i get my message)REG_MULTI_SZ value requeres two NULL characters at the end (howbeit plugin read any REG_MULTI_SZ value).
"PendingFileRenameOperations"=hex(7):00,00

Brummelchen
21st February 2006, 11:21
well - here it has only one zero ;)
can you code it that if reg_multi_sz starts with zero it returns empty ?

Instructor
21st February 2006, 11:39
Done. Reuploaded.

Brummelchen
21st February 2006, 12:38
perfect http://people.freenet.de/brummelchen2003a/smilies/icon_applaus.gif

Instructor
3rd March 2006, 07:47
-deleted-

P.S. I will try later

WebMatze
3rd March 2006, 07:56
Zip is damaged... :(

Brummelchen
3rd March 2006, 16:50
No, try again

Instructor
3rd March 2006, 21:01
Fixed: registry::WriteExtra append REG_MULTI_SZ value only after new line.


"Registry" plugin v2.3

Instructor
10th April 2006, 19:10
Fixed: improved PPC-registry plugin code, many bugs fixed (thanks Peter Beedell)


"Registry" plugin v2.4

rmccue
20th April 2006, 03:52
Is it possible to allow the appending of registry keys to an already created file and exporting more than one key at a time?

Instructor
20th April 2006, 07:56
Is it possible to allow the appending of registry keys to an already created file and exporting more than one key at a time? Probably I can add this possibility.

rxs2k5
20th April 2006, 08:25
Instructor excellent plugin, thanks for your contributions.

This could at least worked out a bit to find the correct keys to change a setoutpath

btw

Section /o "Search and write founded in text file" SearchAndWriteInFile
GetTempFileName $R0
FileOpen $R1 $R0 w
FileWrite $R1 'HKEY_CURRENT_CONFIG$\r$\n$\r$\n'

${registry::Open} "HKEY_CURRENT_CONFIG" "/B=1" $0
StrCmp $0 -1 0 loop
MessageBox MB_OK "Error" IDOK close

loop:
${registry::Find} $1 $2 $3 $4

StrCmp $4 '' close
StrCmp $4 'REG_KEY' 0 +3
FileWrite $R1 '$4:"$1\$2"$\r$\n'
goto +2
FileWrite $R1 '$4:"$1" "$2"="$3"$\r$\n'
goto loop

close:
${registry::Close}
${registry::Unload}
FileClose $R1

Exec '"notepad.exe" "$R0"'
SectionEnd


In the example u provided, about the search and write found, how can I able to make it search and write the searched registry into a filename.ini

Instructor
20th April 2006, 08:57
Like this?Section /o "Search and write founded in text file" SearchAndWriteInFile
StrCpy $R0 HKEY_CURRENT_CONFIG

${registry::Open} "$R0" "/K=0 /B=1" $0
StrCmp $0 -1 0 loop
MessageBox MB_OK "Error" IDOK close

loop:
${registry::Find} $1 $2 $3 $4

StrCmp $4 '' close
WriteINIStr 'C:\filename.ini' '$R0\$1\$2' '$2' '$3'
goto loop

close:
${registry::Close}
${registry::Unload}
FileClose $R1

Exec '"notepad.exe" "C:\filename.ini"'
SectionEnd

rxs2k5
20th April 2006, 09:36
nice nice thanks
but how do I extent the search beside this
HKEY_CURRENT_CONFIG

like

HKEY_LOCAL_MACHINE " name of software " "the value" "data"
HKEY CURRENT USERS " Name of software " " the value" "data"

Section /o "Search and write founded in text file" SearchAndWriteInFile
StrCpy $R0 HKEY_CURRENT_CONFIG

${registry::Open} "$R0" "/K=0 /B=1" $0
StrCmp $0 -1 0 loop
MessageBox MB_OK "Error" IDOK close

loop:
${registry::Find} $1 $2 $3 $4

StrCmp $4 '' close
WriteINIStr 'C:\filename.ini' '$R0\$1\$2' '$2' '$3'
goto loop

close:
${registry::Close}
${registry::Unload}
FileClose $R1

Exec '"notepad.exe" "C:\filename.ini"'
SectionEnd

Instructor
20th April 2006, 10:01
but how do I extent the search beside this
HKEY_CURRENT_CONFIG

like

HKEY_LOCAL_MACHINE " name of software " "the value" "data"
HKEY CURRENT USERS " Name of software " " the value" "data"Don't understand. What your situation (what you trying to do)?

rxs2k5
20th April 2006, 11:19
Section /o "Search and write founded in text file" SearchAndWriteInFile
StrCpy $R0 HKEY_CURRENT_User
StrCpy $R1 HKEY_Local_ Machine

${registry::Open} "$R0" "/K=0 /B=1" $0
StrCmp $0 -1 0 loop
MessageBox MB_OK "Error" IDOK close

loop:
${registry::Find} $1 $2 $3 $4

StrCmp $4 '' close
WriteINIStr 'C:\filename.ini' '$R0\$1\$2' '$2' '$3'
goto loop

close:
${registry::Close}
${registry::Unload}
FileClose $R1

Exec '"notepad.exe" "C:\filename.ini"'
SectionEnd
1.
If u look at the example above the HKEY_CURRENT_User which will be written into the filename.ini takes a long time to search since it will scan the entire registry on HKEY_CURRENT_User is there anyway to define it to search the material much faster and direct.

2. HKEY_CURRENT_User "Software\blah" "search string value" " string value data " is this possible to direct a search rather than a full scan of the HKEY_CURRENT_User.

3. this will be read by ReadINIStr afterwards when the search is being done since ReadINIStr requires section_name entry_name. Is there a possibility that your registry plugin can arrange this to fit into the search in ReadINIStr like this
ReadINIStr $0 $Temp\filename.ini example1 cool on the later part.


thanks again for replying

Instructor
20th April 2006, 11:35
is this possible to direct a search rather than a full scan of the HKEY_CURRENT_UserDirect search for what? For key "blah"?

rxs2k5
20th April 2006, 11:39
yes

Instructor
20th April 2006, 11:48
I'll answer little later

rxs2k5
20th April 2006, 11:58
ok I will be waiting when ur ready

Instructor
20th April 2006, 14:00
ok. I need to understand what you trying to do.
1. You know that registry key name is "blah"
2. You know that this key located somewhere in the "HKEY_CURRENT_USER\Software" (it can be "HKEY_CURRENT_USER\Software\123\blah" or "HKEY_CURRENT_USER\Software\Microsoft\blah" ...)
3. You need to find all this variants and write them to the ini file
Is this correct?

rxs2k5
20th April 2006, 14:44
yes !

Instructor
20th April 2006, 15:15
Section /o "Search and write founded in text file" SearchAndWriteInFile
StrCpy $R0 "HKEY_CURRENT_USER" #Root
StrCpy $R1 "Software" #Subkey "Key1\Ke2\Key3"
StrCpy $R2 0

${registry::Open} "$R0\$R1" "/K=1 V=0 /S=0 /N='blah' /B=1" $0
StrCmp $0 -1 0 loop
MessageBox MB_OK "Error" IDOK close

loop:
${registry::Find} $1 $2 $3 $4

StrCmp $4 '' close
WriteINIStr 'C:\filename.ini' 'Example1' '$R2' '$R0\$1\$2'
IntOp $R2 $R2 + 1
goto loop

close:
${registry::Close}
${registry::Unload}

Exec '"notepad.exe" "C:\filename.ini"'
SectionEnd

Instructor
20th April 2006, 19:26
Added:    registry::SaveKey option /A=[0|1], /A=1 append data to the file
Changed: registry::RestoreKey some clean-up


"Registry" plugin v2.5

Instructor
20th April 2006, 20:19
Fast fix: registry::Open does not reset variables (more then one call)


"Registry" plugin v2.6

Deuce199
10th May 2006, 20:07
I am using a search function in my registry program using your plugin. I am now using your append switch of savekey to append the found keys to a reg file and it works like a charm. This is my problem:

Say I search for Key1 in HKEY_Local_MAchine, so it find key1 and writes it to the reg file, i then have it loop back and search again. The problem is it will refind the first instance of key1 and keep going, never getting past that key, because it does not remember it did that. How or can you add function that will cause the search to continue from the point it stopped to write the information to a file. So it would continue from the first instance of key1 and go to the next instance? Is that possible?

Thanks,
Deuce199

Instructor
11th May 2006, 09:35
registry::Find and registry::SaveKey uses the same stack I'll try to separate them.

Instructor
14th May 2006, 21:27
With v2.7:
Name "Output"
OutFile "Output.exe"

!include "Registry.nsh"

Section
StrCpy $R0 "HKEY_LOCAL_MACHINE" #Root
StrCpy $R1 "SOFTWARE\Microsoft" #Subkey

${registry::Open} "$R0\$R1" "/K=1 V=0 /S=0 /N='Key1' /B=1" $0
StrCmp $0 -1 0 loop
MessageBox MB_OK "Error" IDOK close

loop:
${registry::Find} $1 $2 $3 $4

StrCmp $4 '' close
${registry::SaveKey} "$R0\$1\$2" "C:\keys.reg" "/A=1 /B=1" $0
goto loop

close:
${registry::Close}
${registry::Unload}

Exec '"notepad.exe" C:\keys.reg'
SectionEnd

Instructor
14th May 2006, 21:31
Fixed: separate registry::Find and registry::SaveKey stacks. Now possible use them
          together.


"Registry" plugin v2.7

Instructor
17th May 2006, 00:59
Updated: "StackFunc.h" to v1.8
Added: handles for search


"Registry" plugin v2.8

Red Wine
17th May 2006, 17:45
Cool! Awesome plugin, and getting even better,
thanks Instructor.
BTW a more detailed documentation would be great :-)

Instructor
28th May 2006, 09:14
Updated: "StrFunc.h" to v1.7
Updated: "StackFunc.h" to v1.9
Updated: "ConvFunc.h" to v1.7


"Registry" plugin v2.9

Instructor
3rd July 2006, 16:44
Added: registry::Open options
            "/NS=[name]" - sensitive search for a part of name
            "/NI=[name]" - insensitive search for a part of name


"Registry" plugin v3.0

Deuce199
17th August 2006, 19:52
Instructor,

First thanks for the help, I am sorry it took so long to get back to you.

Second, I am having the same problem, What I need is for my search algorithm to search the registry for a specific keyword. If found save the key to a reg file, then from that point, the regkey it just wrote, continue to search the rest of the registry for that keyword. If another is found then save, start from that point and continue, and so on until it hits the end of the registry.

Here is my search function:


!define RegSearch `!insertmacro RegSearch`

!macro RegSearch rootKey searchWord

${registry::Open} "${rootKey}" "/K=1 /V=0 /S=0 /B=0 /N='${searchWord}'" $0
StrCmp $0 0 0 +2
MessageBox MB_OK "Error" IDOK +9
${registry::Find} "$0" $1 $2 $3 $4
StrCmp $4 '' +7
StrCmp $4 'REG_KEY' 0 +4
StrCpy $REGKEY "${rootKey}\$1\$2\$3"
${Registry::SaveKey} "$REGKEY" "${SETDIR}\Settings.reg" "/A=1 /G=1" $R0
StrCpy $RC "1"
goto -7

${registry::Close} "$0"
${registry::Unload}
!macroend


After the 'StrCpy $RC "1"' line it should jump back to the registry::find line and continue to search the registry for the next key.

What it is doing it going back to the beginning of the opened root key and starting again, So it hits the already saved key and appends it to the regfile.

Basically it creates a loop that creates a file that will keep writing the same info over and over again, until I kill it in the task manager.

Is it possible for me to do this with your plugin? If so, how should I change the code above to make it work?

thanks for all your help with this.

Deuce

Instructor
18th August 2006, 10:13
You use relative jumps through macros.

Deuce199
18th August 2006, 12:25
How would I go about coding something like that?

Right now, That is my macro. I call that macro from within my main prog script. It is my regsearch function pretty much.

Instructor
18th August 2006, 23:41
Something like this:
Function RegSearch
!define RegSearch `!insertmacro RegSearchCall`

!macro RegSearchCall rootKey searchWord
Push `${rootKey}`
Push `${searchWord}`
Call RegSearch
!macroend

Exch $R1
Exch
Exch $R0
Exch
Push $0
Push $1
Push $2
Push $3
Push $4
Push $5

${registry::Open} "$R0" "/K=1 /V=0 /S=0 /B=0 /N='$R1'" $0
StrCmp $0 0 0 +2
MessageBox MB_OK "Error" IDOK end

find:
${registry::Find} "$0" $1 $2 $3 $4
StrCmp $4 '' end
StrCpy $REGKEY "$R0\$1\$2\$3"
${registry::SaveKey} "$REGKEY" "${SETDIR}\Settings.reg" "/A=1 /G=1" $5
StrCpy $RC "1"
goto find

end:
${registry::Close} "$0"
${registry::Unload}

Pop $5
Pop $4
Pop $3
Pop $2
Pop $1
Pop $0
Pop $R1
Pop $R0
FunctionEnd

Deuce199
12th September 2006, 20:34
I noticed while using your plugin in some of my code, that after the registry plugin is copied to the temp directory, it still is there even after the program is shutdown.

My point is, after running the program ten times say, I have ten temp folders all containing the registry.dll file. They add up after a time.

Is this something that can be fixed?

Thanks, Deuce.

PS. thanks for the help on the above function, I am still trying to find the time to try it out.

bholliger
10th November 2006, 11:49
Hi Deuce199!

It seems that you don't execute the 'unload'-function by the time you've finished using the plugin.

Have a look at the excellent readme.txt for further information.


; **** Unload plugin ****

${registry::Unload}


Cheers

Bruno

makutaku
4th December 2006, 00:52
Both Registry.dll and PPC-Registry.dll were copied to NSIS plugin directory, but when I try to use them in my nsi file I get compilation errors:

When I call either Registry::Open or PC-Registry::CeRapiInit
both generate an invalid command error.

I am able to use other plugins, such as nsislog.dll, so I don't undesrtand what's different with Registry.dll and PPC-Registry.dll. Does anybody know what I am missing ? Do I need to include anything in my nsi code to use these plugins?

Comperio
4th December 2006, 04:03
You have to:
[list=1]
Get the DLLs moved to the plugins folder (which sounds like you have)
Move REGISTRY.NSH to the include folder
Add !Include 'REGISTRY.NSH' to the top of your script.
Make your calls using the built-in defines rather than regular plugin calls. (Example: Use ${registry::Open}, not Registry::Open)
[/list=1]
See the README.TXT file included with the plugin along with the included sample script. :cool:

makutaku
4th December 2006, 17:56
Thank you very much ! It's working now !

ossi01
7th February 2007, 08:11
Hi,

whe i create a new Key in HKLM\Software with Regedit.exe than i cant read this key with ${registry::Read} (returns empty String) or ${registry::Exist} (returns -1). Also ${registry::Find} doesnt enumerate this new Key.
This only happens on Windows XP x64 or Vista x64.

What can i do?

JamesKiller
3rd April 2007, 19:57
seems like i have same issue. cause under 64 bit windows, the rigstry keys go to win6432node ....

Comperio
4th April 2007, 03:08
Have a look at this thread (http://forums.winamp.com/showthread.php?threadid=264834)...

edit
also look at my comments in this thread (http://forums.winamp.com/showthread.php?s=&threadid=268880)

Ehtyar
18th May 2007, 06:37
Hi all.
I've been using this plugin to help create portable applications (most portable apps use this plugin). A problem is that if you have many and/or very large registry keys, not all of the data is inserted into the registry before the application starts. I modified the source code myself to fix this problem by adding a call to WaitForSingleObject on the handle returned by CreateProcess in the _RestoreKey function thus:
if (CreateProcess(NULL, szBuf, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi))
{
WaitForSingleObject(pi.hProcess, INFINITE);
CloseHandle(pi.hProcess);

but it crashed my compiler (msvc6) when i tried to build it. If anyone wouldn't mind rebuilding this project with that modification, I'd really appreciate it.

Thanks very much, Ehtyar.

Instructor
18th May 2007, 20:45
Ehtyar

Instructor
18th May 2007, 20:47
Changed: small optimization.


"Registry" plugin v3.1

Ehtyar
18th May 2007, 21:40
Oh thank you so much instructor, it works perfectly. I'm sorry i could not accomplish that without bugging you, i guess i need to check for updates :S.

Thanks again, Ehtyar.

Instructor
10th July 2007, 14:22
Fixed: possible memory overflow (changed lstrcpy to lstrcpyn).


"Registry" plugin v3.2

wraithdu
20th August 2007, 05:06
I was curious which functions in your plugin should be followed by a Sleep command, and for how long? I've noticed that some like RestoreKey perform more reliably with a Sleep 50 or 100.

So basically, which functions execute and continue on the script immediately (without waiting for the actual registry operation to finish), and which wait for the registry operation to finish before moving on in the script?

Great plugin, thanks!

wraithdu
21st August 2007, 03:02
I found a bug in v3.2 (big one unfortunately).

The ${registry::SaveKey} function is saving keys in HKCU as

[HKCU\<whatever>]

in the REG file. Obviously this will not import back into the registry. I checked back to v3.1 and this bug was not present.

HKLM seems to work fine and is expanded to HKEY_LOCAL_MACHINE. I'm not sure if other short names are affected or not.

Instructor
21st August 2007, 13:57
Fixed: registry::SaveKey short root name didn't translated to a long name.


"Registry" plugin v3.3

wraithdu
21st August 2007, 15:44
Thanks for the quick update!

Any comment on my post above about using Sleep times with your plugin?

Instructor
21st August 2007, 19:22
wraithdu
No comments. I don't understand your post.

wraithdu
21st August 2007, 19:43
Sorry, I'll try to be more clear.

I use NSIS to make portable app launchers. I've been in the habit of placing a 'Sleep 50' or 'Sleep 100' command after a call to your registry plugin to allow the the operation to finish before moving on in my script.

The best example is what is described above by Ehtyr. It seems the RestoreKey function does not wait for the registry information to be fully imported before moving on in the script and launching the application. He modified the DLL to fix this problem. I have just added some Sleep time.

So my question is, what other functions in your plugin behave in the same way (ie do not wait for the registry operation to finish)? Should I then keep adding the Sleep commands to compensate for this? And would it be possible to modify all the registry commands as Ehtyr did?

I hope that makes more sense.

Instructor
22nd August 2007, 02:59
So my question is, what other functions in your plugin behave in the same way (ie do not wait for the registry operation to finish)?registry::RestoreKey is the only one.

To import all registry information before continue, you could use the following code:
ExecWait 'regedit /s "[file]"' $var

Quib
26th August 2007, 21:40
So, just confirming, all registry operations except restore wait for the operation to complete before continuing? If so, this is awesome, I get to cut a ton of sleeps out of my scripts!

Also, thank you so much for this plugin Instructor, it's wonderful.

QM

Instructor
26th August 2007, 21:43
So, just confirming, all registry operations except restore wait for the operation to complete before continuing?Yes

JCD29
26th September 2007, 13:56
just a question : if I want to find a value in a specified root , after the method find, i have to compare the $var2 with the value I want to find ? is it exact...
i want to use your "wonderful" source code given above to test... I did this kind of algorith in my installer to check the presence of key in the registry base but it was long; with this one it is "SUPER".....

JCD29
26th September 2007, 14:25
is it possible to have a error code return in $4 for the method find... if error so , doesn't find if not so seems to be good....
thks

JCD29
26th September 2007, 15:51
an other question :
in the method you described above,
can we use the method read and ifkeyexist before the method close andunload ?

I try and it doesn't work.... i search a value in a root by using the find method and just after i wanted to use the values returned by the find method to read a value in a fullpath

call ${registry::Open}.... /B=0 $0
call : ${registry::Find} "$0" $1 $2 $3 $4
...ok i found the value..
call {registry::read} "$1" "$2" $R0 $R1..
call ${registry::close}

but read doesn't work...

can you help me..

didava
31st January 2008, 14:52
Hi

How do you delete the HKLM\SYSTEM\WPA\key- (WXP-Pro)

I can one a make program with Nsis

What do you use or do to delete these extra keys

HKEY_LOCAL_MACHINE\SYSTEM\WPA\Key-XXXXXXXXXXXXXXXXXXXXX

Doing it the normal right click and delete it kicks out and says you can't do that BEEP )(&(^^%$%$###

Don't need the bloody extra ones

I even tried to change the permission still no go!!!!!!

plz example show me

didava
1st February 2008, 06:57
plz example show me

didava
1st February 2008, 09:57
Can you Help!?

didava
1st February 2008, 18:41
Hi

How do you delete the HKLM\SYSTEM\WPA\key- (WXP-Pro)

I can one a make program with Nsis

What do you use or do to delete these extra keys

HKEY_LOCAL_MACHINE\SYSTEM\WPA\Key-XXXXXXXXXXXXXXXXXXXXX

Doing it the normal right click and delete it kicks out and says you can't do that BEEP )(&(^^%$%$###

Don't need the bloody extra ones

I even tried to change the permission still no go!!!!!!

plz example show me

didava
3rd February 2008, 18:34
what ??

rahulsubramanya
10th March 2008, 11:06
Hi,

I am a newbie to NSIS. Currently I am in a situation where my installer need to identify a software whether already installed or not and If installed, uninstal it and continue with my installer.
This software is under .../Uninstall of registry and it does not have a fixed key. The key depends on its GUID and package. But, there is one string called "Display string" which is constant and based on which we can search for. Can I search this string and get the key from registry and then get the UninstallString with help of key.

I tried with out using Registry.dll, but looks like not possible.

I tried using Registry.dll but unable to get it working I am gettting compilation error in registry.nsh at this line
registry::_Open /NOUNLOAD `${_PATH}` `${_OPTIONS}`

I am using registry like this
${registry::Open} "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall" "/K=0 /V=1 /S=1" $0

The error is "Error in macro registry::open on macroline 1"

Help much appreciated

Cheers
Rahul

Instructor
10th March 2008, 16:41
rahulsubramanya
Probably there is something with the nsh file codepage. It must be not in Unicode (or maybe you are using Unicode build).

rahulsubramanya
10th March 2008, 16:43
Hi,
Thanks for the reply
How to check these compatibities? Any readme file tells this? or any source code?

Can I build my self?

Cheers
Rahul

Instructor
10th March 2008, 16:49
:) OK
Are you using Unicode build (http://forums.winamp.com/showthread.php?s=&threadid=277381)?

Instructor
10th March 2008, 17:52
Fixed: ${registry::WriteExtra} with REG_MULTI_SZ (thanks David Irwin).

Added: now plugin can be compiled with GCC.


"Registry" plugin v3.4

grobigou
16th April 2008, 11:37
Hello

I don't if you also have the same problem, but with the version 3.4 of the registry plugin, the program I have made does not work anymore. It's craching every time I try to launch it.
If I put the version 3.3 of the plugin back, my program works fine.
Does anyone have the same issue ?

Antoine.

Instructor
16th April 2008, 14:27
What code cause crashing?

grobigou
17th April 2008, 10:21
Hello !

Here is the code.
It is like a cleaner for the registry
It is looking for some value and delete them.

; Un nettoyeur de Registre pour la HLU
; C'est le BON
; 4 itérations pour Safenet, une seule pour les autres
; V1.0 : safenet, ireike, cosine, ipsecdrv et ipsecmon
; V1.1 : safenet, ireike, cosine, ipsecdrv, ipsecmon et ipsec dial client
; V1.2 : Av ec le nouvel environnement
;--------------------------------

; Ne fonctionne pas avec la V3.4 de Registry
; Donc c'est la v3.3 qu'il faut mettre pour le moment

!include "UMUI.nsh"
!include "Registry.nsh"
!include "Sections.nsh"
VAR Reg
VAR Chemin
VAR Motclef
VAR Iteration
VAR Go

XPStyle on

; The name of the installer
Name "Registry Cleaner v1.2"

; The file to write
OutFile "Registry.Cleaner.v1.2.exe"
BrandingText "NSIS - Créé par Antoine SOUBIGOU"

;--------------------------------
; Show details
ShowInstDetails show

;--------------------------------
;Interface Settings
!define MUI_ABORTWARNING
; !define MUI_HEADERIMAGE
;!define MUI_HEADERIMAGE_BITMAP "${NSISDIR}\Contrib\Graphics\Header\orange.bmp" ; optional


;--------------------------------
;--------------------------------
;--------------------------------
; Pages
;--------------------------------
;--------------------------------
;--------------------------------

; D:\Program Files\NSIS\Contrib\Modern UI\ioSpecial.ini
; Fichier modifié pour voir tout le titre
; ligne 1235 pour espacer les lignes

!insertmacro MUI_PAGE_COMPONENTS
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_PAGE_FINISH


;--------------------------------
;Languages

!insertmacro MUI_LANGUAGE "French"
; !insertmacro MUI_LANGUAGE "English"

;--------------------------------
;--------------------------------
; Installation de drivers cartes 3G
;--------------------------------
;--------------------------------

Section "Suppression des répertoires" Info1

; Cette option permet de griser une case pour obliger l'installation
SectionIn RO
ReadRegStr $9 HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\" "ProgramFilesDir"
DetailPrint "Suppression des répertoires sous $9"
RMDir /r "$9\Cosine Communication"
RMDir /r "$9\Safenet"

SectionEnd

Section "Recherche des mots clef dans le Registre" Info2

StrCpy $Go "1"
; Cette option permet de griser une case pour obliger l'installation
SectionIn RO

GetTempFileName $R0
FileOpen $R1 $R0 w

; On Commencera avec le mot Safenet
StrCpy $Motclef "safenet"
; On fera la vérification sur Safenet QUATRE fois ! ... On l'initialise Ã_ 1
StrCpy $Iteration "1"

Depart:
FileWrite $R1 'Liste des clés de registre incluant la chaîne $Motclef$\r$\n'
; Si on est sur safenet, Alors on a une chaine de caractères différente
StrCmp $Motclef "safenet" +1 +3
DetailPrint "Lancement du nettoyage de $Motclef dans la base de Registre..... Itération $Iteration sur 4....."
Goto Suite
DetailPrint "Lancement du nettoyage de $Motclef dans la base de Registre....."

Suite:
FileWrite $R1 '$\r$\nHKEY_CLASSES_ROOT$\r$\n$\r$\n'
StrCpy $Chemin "HKCR"
StrCpy $Reg "1"
${registry::Open} "HKEY_CLASSES_ROOT" "/K=1 /V=1 /S=1 /B=1 /NI='$Motclef'" $0
; Si c'est bon, on commence la loop, sinon on arrete tout
StrCmp $0 0 +1 loop
MessageBox MB_OK "Error" IDOK close

Coin2:
FileWrite $R1 '$\r$\nHKEY_CURRENT_USER$\r$\n$\r$\n'
StrCpy $Chemin "HKCU"
StrCpy $Reg "2"
${registry::Open} "HKEY_CURRENT_USER" "/K=1 /V=1 /S=1 /B=1 /NI='$Motclef'" $0
StrCmp $0 0 0 loop
MessageBox MB_OK "Error" IDOK close

Coin3:
FileWrite $R1 '$\r$\nHKEY_LOCAL_MACHINE$\r$\n$\r$\n'
StrCpy $Chemin "HKLM"
StrCpy $Reg "3"
${registry::Open} "HKEY_LOCAL_MACHINE" "/K=1 /V=1 /S=1 /B=1 /NI='$Motclef'" $0
StrCmp $0 0 0 loop
MessageBox MB_OK "Error" IDOK close

Coin4:
FileWrite $R1 '$\r$\nHKEY_USERS$\r$\n$\r$\n'
StrCpy $Chemin "HKU"
StrCpy $Reg "4"
${registry::Open} "HKEY_USERS" "/K=1 /V=1 /S=1 /B=1 /NI='$Motclef'" $0
StrCmp $0 0 0 loop
MessageBox MB_OK "Error" IDOK close

Coin5:
FileWrite $R1 '$\r$\nHKEY_CURRENT_CONFIG$\r$\n$\r$\n'
StrCpy $Chemin "HKCC"
StrCpy $Reg "5"
${registry::Open} "HKEY_CURRENT_CONFIG" "/K=1 /V=1 /S=1 /B=1 /NI='$Motclef'" $0
StrCmp $0 0 0 loop
MessageBox MB_OK "Error" IDOK close

loop:
${registry::Find} "$0" $1 $2 $3 $4
StrCmp $4 '' check
StrCmp $Chemin 'HKCR' HKCRloop +1
StrCmp $Chemin 'HKCU' HKCUloop +1
StrCmp $Chemin 'HKLM' HKLMloop +1
StrCmp $Chemin 'HKU' HKUloop +1
StrCmp $Chemin 'HKCC' HKCCloop

HKCRloop:
StrCmp $4 'REG_KEY' 0 Value1
StrCmp $Go "0" +4
DeleteRegKey HKCR "$1\$2"
DetailPrint "Key HKCR\$1\$2 detected"
FileWrite $R1 'Delete Key : "$Chemin - $1\$2" $\r$\n'
goto loop
Value1:
StrCmp $Go "0" +4
DeleteRegValue HKCR "$1" "$2"
DetailPrint "Value HKCR\$1 '$2' detected"
FileWrite $R1 'Delete Value. Chemin : "$Chemin\$1" et la valeur : "$2" $\r$\n'
goto loop

HKCUloop:
StrCmp $4 'REG_KEY' 0 Value2
StrCmp $Go "0" +4
DeleteRegKey HKCU "$1\$2"
DetailPrint "Key HKCU\$1\$2 detected"
FileWrite $R1 'Delete Key : "$Chemin - $1\$2" $\r$\n'
goto loop
Value2:
StrCmp $Go "0" +4
DeleteRegValue HKCU "$1" "$2"
DetailPrint "Value HKCU\$1 '$2' detected"
FileWrite $R1 'Delete Value. Chemin : "$Chemin\$1" et la valeur : "$2" $\r$\n'
goto loop

HKLMloop:
StrCmp $4 'REG_KEY' 0 Value3
StrCmp $Go "0" +4
DeleteRegKey HKLM "$1\$2"
DetailPrint "Key HKLM\$1\$2 detected"
FileWrite $R1 'Delete Key : "$Chemin - $1\$2" $\r$\n'
goto loop
Value3:
StrCmp $Go "0" +4
DeleteRegValue HKLM "$1" "$2"
DetailPrint "Value HKLM\$1 '$2' detected"
FileWrite $R1 'Delete Value. Chemin : "$Chemin\$1" et la valeur : "$2" $\r$\n'
goto loop

HKUloop:
StrCmp $4 'REG_KEY' 0 Value4
StrCmp $Go "0" +4
DeleteRegKey HKU "$1\$2"
DetailPrint "Key HKU\$1\$2 detected"
FileWrite $R1 'Delete Key : "$Chemin - $1\$2" $\r$\n'
goto loop
Value4:
StrCmp $Go "0" +4
DeleteRegValue HKU "$1" "$2"
DetailPrint "Value HKU\$1 '$2' detected"
FileWrite $R1 'Delete Value. Chemin : "$Chemin\$1" et la valeur : "$2" $\r$\n'
goto loop

HKCCloop:
StrCmp $4 'REG_KEY' 0 Value5
StrCmp $Go "0" +4
DeleteRegKey HKCC "$1\$2"
DetailPrint "Key HKCC\$1\$2 detected"
FileWrite $R1 'Delete Key : "$Chemin - $1\$2" $\r$\n'
goto loop
Value5:
StrCmp $Go "0" +4
DeleteRegValue HKCC "$1" "$2"
DetailPrint "Value HKCC\$1 '$2' detected"
FileWrite $R1 'Delete Value. Chemin : "$Chemin\$1" et la valeur : "$2" $\r$\n'
goto loop

Check:
StrCmp $Reg "1" +5
StrCmp $Reg "2" +5
StrCmp $Reg "3" +5
StrCmp $Reg "4" +5
StrCmp $Reg "5" check2
goto Coin2
goto Coin3
goto Coin4
goto Coin5

Check2:
StrCmp $Motclef "safenet" Safenetiteration
StrCmp $Motclef "ireike" Ireikechange
StrCmp $Motclef "cosine" Cosinechange
StrCmp $Motclef "ipsecdrv" Ipsecdrvchange
StrCmp $Motclef "ipsecmon" Ipsecmonchange
StrCmp $Motclef "ipsec dial client" Iteration
Safenetiteration:
StrCmp $Iteration "2" Iteration
StrCmp $Iteration "3" Iteration
StrCmp $Iteration "4" close
StrCpy $Motclef "ireike"
Goto Depart
Ireikechange:
StrCpy $Motclef "cosine"
Goto Depart
Cosinechange:
StrCpy $Motclef "ipsecdrv"
Goto Depart
Ipsecdrvchange:
StrCpy $Motclef "ipsecmon"
Goto Depart
Ipsecmonchange:
StrCpy $Motclef "ipsec dial client"
Goto Depart
Iteration:
IntOp $Iteration $Iteration + 1
StrCpy $Motclef "safenet"
Goto Depart

close:
${registry::Close} "$0"
${registry::Unload}

FileClose $R1
DetailPrint "Le fichier de LOG se trouve Ã_ $R0"

;Exec '"notepad.exe" "$R0"'

MessageBox MB_YESNO "Pour finaliser le nettoyage, voulez vous redémarrer votre Ordinateur ?\
$\n$\nSi OUI, fermer toutes vos applications et cliquez sur OUI .\
$\nSi NON, vous pourrez redémarrer votre ordinateur manuellement"\
IDNO Fin IDYES Redemarre
Redemarre:
Reboot
Fin:
SectionEnd


;Descriptions
;Language strings
LangString DESC_Info1 ${LANG_FRENCH} "Cette section supprime les répertoires 'SafeNet' et 'Cosine Communication' du répertoire 'Program Files'"
; LangString DESC_efface ${LANG_ENGLISH} "This mandatory section erase all the mobile card drivers saved under the temp folder"
LangString DESC_Info2 ${LANG_FRENCH} "Cette section supprime, de la base de registre, toutes clefs ou valeurs comprenant les mots Safenet, ipsecdrv, ipsecmon, cosine et ireike"
; LangString DESC_copie ${LANG_ENGLISH} "This mandatory section save all the mobile card drivers under a temp folder"
!insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN
!insertmacro MUI_DESCRIPTION_TEXT ${Info1} $(DESC_Info1)
!insertmacro MUI_DESCRIPTION_TEXT ${Info2} $(DESC_Info2)
!insertmacro MUI_FUNCTION_DESCRIPTION_END


Function .onInit
Call admin
MessageBox MB_YESNO "Vous êtes sur le point de lancer un nettoyage de votre base de registre. $\nVeuillez SVP vous assurer que tout kit de connexion et SafeNet sont effectivement fermés ou désinstallés\
$\n$\nYou are about to clean you registry data base. $\nPlease ensure that any connection kit or SafeNet is completely closed or uninstalled" IDYES gogogo
Abort
gogogo:
FunctionEnd

; Une fonction Admin pour empecher l'installation en Single User
Function admin
ClearErrors
UserInfo::GetName
ifErrors Win9x
Pop $0
UserInfo::GetAccountType
Pop $1
UserInfo::GetOriginalAccountType
Pop $2
StrCmp $1 "Admin" 0 +3
Goto done
StrCmp $1 "User" 0 +3
MessageBox MB_OK 'Administrator Rights requiered'
Abort
StrCmp $1 "Guest" 0 +3
MessageBox MB_OK 'Administrator Rights requiered'
Abort
MessageBox MB_OK "Unknown error"
Abort

Win9x:
MessageBox MB_OK "Error! This DLL can't run under Windows 9x!"
done:
FunctionEnd

I hope it can help you !

Antoine.

Instructor
17th April 2008, 21:36
Fixed: search with /NI option.


"Registry" plugin v3.5

rixor
5th May 2008, 21:07
Hello Instructor,

Forgive me if this was answered somewhere, but I never saw it explicitly detailed in this thread: Does your plugin work for the Unicode branch of NSIS (after converting the NSH to Unicode format)?

The reason I ask is because I am having trouble using the CopyValue function. It doesn't seem to be working, and when I check the error code with a message box (just like you do in the example), I get a square instead of a number (check the attachment).

The lines that use the function are as follows:

${registry::CopyValue} "HKEY_LOCAL_MACHINE\SOFTWARE\Texas Instruments\CCS_C:|CCStudio_v3.3|" "CC_APP" "HKEY_LOCAL_MACHINE\SOFTWARE\FireSync5\CCS_Backup\CCS_C:|CCStudio_v3.3|" "CC_APP" $R0
MessageBox MB_OK "registry::CopyValue$\n$\n\
Errorlevel: [$R0]"

mrdamm
28th June 2008, 02:22
Hello folks.

Can anyone explain how to use WriteRegMultiStr to write a registry value of data type REG_MULTI_SZ?

For example, I have these registry entries taken from a .REG file. How can I use the values using WriteRegMultiStr?


[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\MUI\UILanguages\pt-BR]
"en-US"=hex(7):00,00,00,00

Instructor
30th June 2008, 06:46
mrdamm
${registry::Write} "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\MUI\UILanguages\pt-BR" "en-US" "" "REG_MULTI_SZ" $0

vc6
1st July 2008, 19:34
The documentation for Registry Export (save to the file in REGEDIT4 format) includes:

/D=[0|1|2]
/D=0 - Don't delete any keys (default)
/D=1 - Delete only root key before restoring
/D=2 - Delete keys before restoring

I understand option /D=0 in the context of ${registry::SaveKey}, but what does /D=2 mean in this context?

AFAIK ${registry::SaveKey} does not have any restore side effect, so what does "Delete keys before restoring" mean?

Thanks,
Victor

P.S. BTW, ${registry::RestoreKey} doesn't work for me for some reason.
ExecWait 'regedit /s "$INSTDIR\${regedit4file}"' works very well.

mrdamm
9th July 2008, 23:56
Originally posted by Instructor
${registry::Write} "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\MUI\UILanguages\pt-BR" "en-US" "" "REG_MULTI_SZ" $0

Hey, wait. Am I doing something wrong or what? I tried to compile the program with MakeNSISW and it stops compiling when the compiler reaches the code provided by you.
In fact, all codes that I use in the script, regarded to registry entries are like the following:

WriteRegDWORD HKEY_LOCAL_MACHINE SYSTEM\CurrentControlSet\Control\MUI\UILanguages\pt-BR LCID 1046
WriteRegStr HKEY_LOCAL_MACHINE SYSTEM\CurrentControlSet\Control\MUI\UILanguages\pt-BR DefaultFallback en-US
WriteRegDWORD HKEY_LOCAL_MACHINE SYSTEM\CurrentControlSet\Control\MUI\UILanguages\pt-BR Type 274
WriteRegStr HKLM "${REGKEY}\Components" "Registry Section" 1

Any clues?

ovatsus
29th August 2008, 19:41
Unfortunately the plugin doesn't work correctly when reading REG_MULTI_SZ values on 64-bit. It always goes to the Wow6432 node, even after SetRegView 64. Can you please help?

Best Regards,
Gustavo Guerra

mtconleyuk
12th November 2008, 11:58
You might consider adding a

!ifndef REGISTRY_LIB
[...]
!endif ; REGISTRY_LIB

around the contents of registry.nsh to allow scripts to include it more than once (e.g., in two different .nsi files, one of which is included in the other). See LogicLib.nsh for an example.

Otherwise, great library!

mtconleyuk
12th November 2008, 12:01
... Obviously, there has to be a !define REGISTRY_LIB in there, too.

groove1963
15th January 2009, 17:45
Hi,

I have a strange problem with a "registry::find" in an installer which at the moment only seems to occur when the installer is used on an iMac (running Windows XP).

The "registry::find" is using 100% CPU, memory consumption is going up to 1 GB, then back down to about 15 MB, but the call never returns to the main code.

The parameters of the failing call to "registry::find" are:

2190896
SOFTWARE\Microsoft\Cryptography\Defaults\Provider Types\Type 024 Name microsoft enhanced rsa and aes cryptographic provider (prototype)
REG_SZ


Here is the code fragment using the registry find (it is scanning the registry for USB 2.0 high speed controllers):

${registry::Open} "HKEY_LOCAL_MACHINE" "/K=0 /V=1 /S=1 /NI='enhanced' /T=REG_SZ" $0
${registry::Find} $0 $1 $2 $3 $4
${While} $4 != ""
${StrCase} $3 "$3" "L"
${StrLoc} $5 $3 "controller" ">"
${If} $5 != ""
${StrLoc} $5 $3 "usb" ">"
${If} $5 != ""
StrCpy $UsbEnhancedController $3
${ExitWhile}
${EndIf}
${EndIf}
${registry::Find} $0 $1 $2 $3 $4
${EndWhile}

${registry::Close} $0
${registry::Unload}


Any suggestions?

- Chris

Instructor
16th January 2009, 14:24
groove1963
Try "RegistryTest.nsi" and "Search and write founded in text file" with "HKEY_LOCAL_MACHINE". It may help to find where is the problem.

mguenette
6th February 2009, 14:18
I have a situation where I have to read and write a binary registry value a more than 1024 caracters.
Is there a way to do this???
Please.

Thanks.

The plugin is great by the way!

Anders
6th February 2009, 15:04
If the plugin is coded correctly, you could use the large nsis string build ( http://nsis.sourceforge.net/Special_Builds ) if not, you might have to use some external tool, regedit.exe or reg.exe or something custom.

NOTE: you are NOT really supposed to store large things in the registry ( > 1024b )

from MSDN:
"Generally, data consisting of more than one or two kilobytes (K) should be stored as a file and referred to by using a key in the registry rather than being stored as a value. Instead of duplicating large pieces of data in the registry, an application should save the data as a file and refer to the file. Executable binary code should never be stored in the registry."

mguenette
6th February 2009, 15:24
I Know I'm not supposed to do that, but a software that we use does that and I'm want to implement an automation to configure that application.

Any other ideas???

Anders
6th February 2009, 15:36
I already said, try the large string build, if the plugin can't handle that, you must use a external tool

mguenette
6th February 2009, 15:43
Guess I will be using an external tool then.

Anders
7th February 2009, 14:23
so you tested, and the large string build does not work? if so, its a bug in the registry plugin...

Instructor
8th February 2009, 14:07
mguenette
See ${registry::ReadExtra} and ${registry::WriteExtra}.

nsnb
8th February 2009, 17:01
I am trying to build the registry plugin (v3.5) using VC2005 on XP and I get the following link errors: Creating library .\Release/registry.lib and object .\Release/registry.exp
registry.obj : error LNK2019: unresolved external symbol ___security_cookie referenced in function _xitoaA
registry.obj : error LNK2019: unresolved external symbol @__security_check_cookie@4 referenced in function _xitoaA
registry.obj : error LNK2019: unresolved external symbol _memset referenced in function _xitoaA
registry.obj : error LNK2019: unresolved external symbol _memcpy referenced in function __WriteExtra

If I change the default project setting (as came with the plugin) to *not* ignore all default libraries (i.e. remove /NODEFAULTLIB), then it builds OK.

However, it seems to me that removing /NODEFAULTLIB will create problems down the road (see http://forums.winamp.com/showthread.php?threadid=302413 ).

What is the proper way to build Registry Plugin v3.5? What am I missing?

Thanks!

Anders
8th February 2009, 17:05
The post you are already linking to tells you what to do:

"So I manually defined the entry point and disabled "Buffer Security Check" (/GS-)."

"Got rid of the last errors by setting "Basic Runtime Checks" to "Default" in the project properties."

nsnb
8th February 2009, 17:29
Originally posted by Anders
The post you are already linking to tells you what to do:

"So I manually defined the entry point and disabled "Buffer Security Check" (/GS-)."

"Got rid of the last errors by setting "Basic Runtime Checks" to "Default" in the project properties."
Sorry, I failed to mention that I already verified that "Basic Runtime Checks" is set to "Default".

With "Buffer Security Check" disabled (/GS-), I still receive the following errors (yes, DllMain is set as the entry point):
registry.obj : error LNK2019: unresolved external symbol _memset referenced in function _xitoaA
registry.obj : error LNK2019: unresolved external symbol _memcpy referenced in function __WriteExtra


Other ideas?

Thanks!

nsnb
8th February 2009, 21:03
Originally posted by nsnb

With "Buffer Security Check" disabled (/GS-), I still receive the following errors (yes, DllMain is set as the entry point):

Other ideas?I solved the problem. :)

I simply downloaded the NSIS source code and copied memset.c and memcpy.c from the SCons\Config directory. The plugin now builds perfectly. I can now proceed to modifying it. :)

Niko49
9th February 2009, 10:54
Hello everybody,

I tested the plugin's with WIN CE 5.0.

It can read and open key register but not write.

Has you seen this problem on this OS?

nsnb
10th February 2009, 19:31
Originally posted by Niko49
I tested the plugin's with WIN CE 5.0.

It can read and open key register but not write.

Has you seen this problem on this OS?
I haven't tried NSIS on WinCE but you may want to look at the numerous #ifdef POCKETPC in registry.c - some code is compiled conditionally and registry::RestoreKey, for example, is disabled for POCKETPC.

BTW, I have added one function to the plugin, named registry::SaveValue. You can find it in the following thread:

http://forums.winamp.com/showthread.php?postid=2484404#post2484404

It would be nice if Instructor could add it officially to his plugin. :)

Niko49
12th February 2009, 12:24
I use "Registry NSIS plugin v3.5 for Pocket PC"

Yes please Instructor, add it officially to his plugin!!!!

I prefer use the plugin official.

Thank you a lot!

groove1963
3rd March 2009, 19:09
Originally posted by Instructor
groove1963
Try "RegistryTest.nsi" and "Search and write founded in text file" with "HKEY_LOCAL_MACHINE". It may help to find where is the problem.

Finally found time for some more testing, I was able to narrow down the problem (tested with latest versiion of the NSIS registry plugin).

This is my test program - scans the HKLM path for entries containing the string "enhanced":


!include Library.nsh
!include "Registry.nsh"

Name "MyRegistryTest"
OutFile "MyRegistryTest.exe"
InstallDir $PROGRAMFILES\MyRegistryTest

RequestExecutionLevel admin
AllowRootDirInstall false

ShowInstDetails show

Section MySection

${registry::Open} "HKEY_LOCAL_MACHINE" "/B=1 /K=0 /V=1 /S=1 /NI='enhanced' /T=REG_SZ" $0

StrCmp $0 0 0 loop
MessageBox MB_OK "Error" IDOK close

loop:
${registry::Find} "$0" $1 $2 $3 $4

StrCmp $4 '' close
DetailPrint "$1 $2 $3 $4"
goto loop

close:
${registry::Close} "$0"
${registry::Unload}

SectionEnd


Works fine on my development machine and on a couple of other machines.

If I add the key below to the registry (taken from the registry of a machine where my installer gets stuck), then registry::Find will go to an infinite internal loop using 100% CPU:


Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\DeviceClasses\{6994AD04-93EF-11D0-A3CC-00A0C9223196}]

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\DeviceClasses\{6994AD04-93EF-11D0-A3CC-00A0C9223196}\##?#HDAUDIO#FUNC_01&VEN_10EC&DEV_0885&SUBSYS_106B3E00&REV_1001#4&1D21CA73&0&0001#{6994ad04-93ef-11d0-a3cc-00a0c9223196}\#DigitalInputWave\Device Parameters\Mixer\0\Controls\0]
"Control Type"=dword:70010001
"Multiple Items"=dword:00000001
"Item0"=dword:00000001


I suspect that it is the length or depth of the registry path, because if I shorten some parts of the registry entry, the registry::Find works again.

(test program and registry file attached as a zip file)

Any suggestions?

Best regards
Chris

Instructor
4th March 2009, 08:10
Added: ${SaveKey} "/N=[name]" option to save only specified value.

Fixed: processing 260 characters path.


"Registry" plugin v3.6

groove1963
9th March 2009, 05:47
Hello "Instructor",

I just tested the 3.6 version you posted a couple of days ago.

Fixed: processing 260 characters path.
"Registry" plugin v3.6

Unfortunately, the problem described in my posting is not fixed - although the errors are now a bit different:

When I now search with the example code and registry entry posted above, I get an access violation "... encountered a problem and needs to close", error description is:

AppName: myregistrytest.exe AppVer: 0.0.0.0 ModName: user32.dll
ModVer: 5.1.2600.5512 Offset: 00008d4e

By the way, when testing this, I made one test run with /N instead of /NI to make a case sensitive search. In this test run, the code did not crash but now again got stuck in the infinite loop on the long registry key described above.

Any suggestions?

Regards
Chris

Instructor
9th March 2009, 19:18
groove1963
Problem isn't reproduced.

groove1963
17th March 2009, 10:18
Problem isn't reproduced

Well, the test program I posted which does nothing except the registry search crashes when I build it with the 3.6 version. When build with the 3.5 version it gets stuck in an infinite loop as described before when, so there seems to be some problem related to the registry plugin.

Can you give me any hint how I could help to narrow down the problem if you cannot reproduce it?

Regards
Chris

groove1963
23rd March 2009, 08:28
Did some more testing today, same behaviour with the 3.6 DLL after upgrading to NSIS 2.44 (I was using 2.37 before):


Access violation with the /NI search
Infinite loop on the {6994AD04-93EF-11D0-A3CC-00A0C9223196} registry key quoted above with the /N or /NS search


Then I did another test with the large string build of NSIS 2.44, same behaviour, no difference.

Then I coded a test scan of HKLM without using the search option:


${registry::Open} "HKEY_LOCAL_MACHINE" "/B=1 /T=REG_SZ" $0

StrCmp $0 0 0 loop
MessageBox MB_OK "Error" IDOK close

loop:
${registry::Find} "$0" $1 $2 $3 $4
StrCmp $4 '' close
goto loop

close:
${registry::Close} "$0"
${registry::Unload}


This got stuck again in an infinite loop on the {6994AD04-93EF-11D0-A3CC-00A0C9223196} registry key (like the /N or /NS searches).

I have downloaded the 3.6 version another time to make sure I was really using the right version, same results.

Unfortunately no version is visible in the DLL attributes and the 3.5 and 3.6 versions DLL size is 16.384. However the source comment in the header of the registry.c file included in the 3.6 version says "v3.4" ...

Any suggestions? If I don't find a solution for this quickly, I'll have to hand-code a plugin to search for this specific registry string :(

Regards
Chris

Instructor
23rd March 2009, 12:21
See "registry.zip\Desktop\Readme.txt" version it must be 3.6.

groove1963
23rd March 2009, 13:54
See "registry.zip\Desktop\Readme.txt" version it must be 3.6.

OK, just checked this, the text in the readme.txt was 3.4.

I checked the download date of the file, was after the 3.6 fix, so I cleared the browser cache, re-downloaded the 3.6 version, now the readme.txt is 3.6 ...

... and the bug is fixed! Thanks a lot!

Best regards
Chris

RajaW
8th September 2009, 19:23
Thank you for writing this plugin. I have found it very useful. I seem so have found a small bug. The registry::Read function does not appear to work on Windows 7 (RTM) for GUID keys under the Uninstall section.

Example:


${registry::Read} "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{B7643B11-A60E-4A33-A465-263FEB32113A}" "UninstallString" $R0 $R1
MessageBox MB_OK 'registry::Read$\n$\n\
$$R0 "string" =[$R0]$\n\
$$R1 "type" =[$R1]$\n'


I used the code from your example provided. The above code does work properly on Windows Server 2003. The above code pulls blank values on Windows 7. The data retrieved on Windows Server 2003 is:

string = MsiExec.exe /X{B7643B11-A60E-4A33-A465-263FEB32113A}
type = REG_EXPAND_SZ

I hope this helps.

Kind regards,
-=Raj=-

glab
14th September 2009, 23:40
I also have an issue with Windows 7 (64 bit).

The following operation results in an unsuccessful open.


;Open registry for search
${registry::Open} "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData" "/K=0 /V=0 /S=1 /N='Application X' /T=REG_SZ" $0

;If open successful, find the entry we are interested in.
StrCmp $0 0 0 find

;If open unsuccessful, abort with error
Goto error


Through RegEdit I have checked the registry entry I am attempting to open and confirmed its existence. The issue only appears with the 64 bit version of windows 7, this works for the 32 bit version of Windows 7.

Having 'Application X' installed under C:\Program Files\ instead of C:\Program Files (x86)\ doesn't solve the problem in opening its registry entry.

Thoughts?

Thanks and regards.

ChocJunkie
26th October 2009, 12:28
Hi

I'm kind of struggeling using the RestoreKey functionality. I'm using:${registry::RestoreKey} "$PLUGINSDIR\myReg.reg" $0 The variable $0 contains '0' after the execution, but the registry key doesn't show up in the registry editor.
If I'm executing the file by hand, the registry value shows up.

Any ideas?

Thanks :)

CJ

Brewster333
26th October 2009, 15:47
Hello! I need to delete keys from HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\USB key. Standard NSIS function can't do this. May be this plugin helps me?

MSG
26th October 2009, 15:57
Originally posted by Brewster333
Hello! I need to delete keys from HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\USB key. Standard NSIS function can't do this.
Yes it can. You probably need administrative priviledges.

Brewster333
26th October 2009, 16:28
Originally posted by MSG
Yes it can. You probably need administrative priviledges.

I've test it (on Windows Vista). But user with administrative rights can't delete nodes in HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\USB\. Using RegSetKeySecurity (WinAPI) is needed to do this I suppose...

ChocJunkie
27th October 2009, 10:52
No ideas about my problem?

--- EDIT ---

I've found accidently found the problem.

I'm executing RestoreKey, logging a related status message and deleting the file used by the plug-in. If I don't delete the file or Sleep some ms, everything works fine.

ChocJunkie
29th October 2009, 10:16
I came to notice no flag/constant indicates if the header file has already been included.
What's about include the !ifndef...!define comands in the plugin? Or does no one else need it?

CJ

gringoloco023
14th December 2009, 12:13
Would there be any chance to get an update of Registry.dll what works with Unicode NSIS ?

Thanx !

carillan
16th December 2009, 16:16
I'm trying to create a REG_MULTI_SZ key with several values, but i have no way to give it more than one value. How should I give the values? I've tried separating with "\n" and "\0" but it didn't work.

I use this instruction:
${registry::Write} "HKCU\${COMPANY_REGKEY}\Settings" "Name" "Generic Value" "REG_MULTI_SZ" $R0
Thaks in advance!
carillan

gringoloco023
19th December 2009, 14:19
I've included some scripts which should do the job !

The reader I've used myself and works fine, but you'll have to make some modifications to store the value into a string !

The writer I haven't tried jet !

ChocJunkie
5th January 2010, 08:05
Has the 64bit problem been solved? Or are there any ideas for a workaround?

CJ

gringoloco023
30th January 2010, 23:41
I recompiled it my self in the end !

Although I tested it thoroughly, there could still be some minor issues.
Let me know if there is any behavior difference compared with the ansi version.

portableapps.com/node/21879

By the way: MULTI_SZ needs '$\n'

mj_blue
20th December 2010, 09:47
Hi,

I am trying to clean up the registry from some previous bad installations and have about 30 entries registry keys called:

HKEY_LOCAL_MACHINE\SOFTWARE\MozillaPlugins\@antixlabs.com/npagp,version={VERSION}

where version varies.

I wanted to loop through and delete all these but currently when I do this it seems to find 9 entries and then find returns blank entry. If I run it again it find more entries until another blank entry is returned.

My code is below, am I doing something wrong?

${registry::Open} "HKLM\SOFTWARE\MozillaPlugins" '/K=1 /V=0 /S=0 /NS="@antixlabs"' $0
StrCmp $0 0 0 loopkey
MessageBox MB_OK "Error" IDOK closemozillakeyfind
goto closemozillakeyfind

loopkey:
${registry::Find} "$0" $1 $2 $3 $4
StrCmp $4 '' closemozillakeyfind 0
${registry::DeleteKey} "HKEY_LOCAL_MACHINE\$1\$2" $R1
goto loopkey

closemozillakeyfind:
${registry::Close} "$0"
${registry::Unload}

Thanks for any help in this

Mark

sentromed
6th February 2011, 12:02
Instructor,

Please add support of "SetRegView 64" or something similar to it. I used v3.6.
I am running 32-bit installer on 64-bit Windows system. My issue is that value is wirtten to "Software\Wow6432Node\" instead of "Software\"

Thanks,
Valery.

Afrow UK
6th February 2011, 23:11
This plug-in needs updating.For NSIS plug-ins, the extra_parameters->g_exec_flags->alter_reg_view field will be set to KEY_WOW64_64KEY if the calling script used SetRegView 64. The plug-in would need to use this field accordingly. I do not know if the Registry plug-in does this, but if not it needs to be modified to do so.Stu

isawen
31st July 2011, 22:14
Did any of you used this plugin with the Unicode version of NSIS?
I don't know why but it doesn't work. Could someone give me a clue in this?

Thanks,
Isawen

gringoloco023
1st August 2011, 10:14
... to use in Unicode Nsis

On the following web page their are a few converted plug-ins, including the Registry one:
http://portableapps.com/node/21879

isawen
1st August 2011, 16:50
... to use in Unicode Nsis

On the following web page their are a few converted plug-ins, including the Registry one:
http://portableapps.com/node/21879

Thanks gringoloco023, you did a good job with it.
At a first try the plugin methods are working. Is there any drawback in this unicode plugin?

gringoloco023
2nd August 2011, 08:32
I done a basic test on every function after I converted it.

That said, we only used it in the portableapps.com launchers.
The launchers basically only use the following functions:

CopyKey
MoveKey
SaveKey
RestoreKey

And that on Windows XP to Windows 7 and Wine.

So using any other function you'd wanna be a little bit more carefull, but it should be fine.

regards

Instructor
7th August 2011, 13:02
Added: full unicode support on NSIS Unicode.
Added: support for SetRegView 64.
Added: export key contents to the file in unicode "Windows Registry Editor Version 5.00" format.


Registry plugin v4.0 (http://nsis.sourceforge.net/Registry_plug-in)

vicokoby
11th August 2011, 23:26
The version 4 convert string to hex different to version 3.5, this is a bug?

Instructor
12th August 2011, 20:06
Added: separate functions:

${registry::StrToHexA} - convert string to ansi hex values;
${registry::StrToHexW} - convert string to unicode hex values.
For backward compatibility: ${registry::StrToHex} is the same as ${registry::StrToHexA}.

Added: separate functions:

${registry::HexToStrA} - convert ansi hex values to string;
${registry::HexToStrW} - convert unicode hex values to string.
For backward compatibility: ${registry::HexToStr} is the same as ${registry::HexToStrA}.


Registry plugin v4.1 (http://nsis.sourceforge.net/Registry_plug-in)

vicokoby
12th August 2011, 21:11
Thanks!

vicokoby
13th August 2011, 19:04
The Version 4 always need elevation?, The gringoloco modified version allow make changes in hkcu root key without elevation, the new version 4.x not allow make changes in any key without elevation.

Instructor
14th August 2011, 08:44
vicokoby
Note:
${registry::RestoreKey} simply exec regedit: regedit /s "[file]"gringoloco023 wrote own "registry::RestoreKey" implementation without regedit execution.

gringoloco023
14th August 2011, 10:08
gringoloco023 wrote own "registry::RestoreKey" implementation without regedit execution.

We had a few reasons for that.
In the ANSI days we never used ${registry::RestoreKey} cause it doesn't wait for regedit to finish it's job and somehow (I can't remember now) it was preferable to use Reg.exe.
Like this:
nsExec::ExecToStack `"$SYSDIR\reg.exe" import "${_FILE}"`

The main reason I rewrote the ${registry::RestoreKey} was that Wine has a bug in regedit / Reg.exe with Windows Registry Editor Version 5.00 files. It crashes Wine.

Still, I'm not really certain that vicokoby was refering to the ${registry::RestoreKey} function.

Ps. : Do not be to impressed by the code, it was basically my first C project ;).

Edit: another bug we found was, when trying to MoveKey from HKLM to HKCU without the needed privileges, MoveKey returned an error, but copied the whole key to HKCU anyway while not being able to delete the HKLM key.
We made a quick fix for it in our launcher code. see: http://portableapps.hg.sourceforge.net/hgweb/portableapps/launcher/rev/162fff2d5a0f#l1.130

regards

DraGula0
26th August 2011, 10:25
Hello !
This script is amazing for registry manipulation.

But on the research I can not process the results.
I would find keys "Desktop Integration" in many places (in the hive Key Users), and then modify a String value that can be found here "\Desktop Integration \ 1 \ URL"
How can I get the result of "Desktop Integration" and then add the key "1" to finally fulfill my pre-field "URL"?
Is it possible?

Thank you ... I'm lost!

highend
16th September 2011, 01:17
@gringoloco023

So your modified version of the registry plugin automatically waits until a command (savekey, restorekey, etc.) is fully executed (and I don't have to use sleep commands after such a command)?

Apart from that, thanks for providing it, I just stumbled upon the issue (with the original plugin) that I can't use restorekey with RequestExecutionLevel user. It won't import a .reg file even if it contains only hkcu entries and because I use NSIS to make portable setups this is a big showstopper...

Instructor
11th October 2011, 13:37
Delete

ChristianGeek
18th October 2011, 04:06
I'm attempting the following but just getting blank strings for the value and type:

${registry::Read} "HKLM\SOFTWARE\Microsoft\Cryptography" "MachineGuid" $MACHGUID $1

However the following returns 0, indicating the key exists:

${registry::KeyExists} "HKLM\SOFTWARE\Microsoft\Cryptography" $2

Is this key not readable for some reason?

TIA.

David Pi
17th November 2011, 16:39
Hi Instructor! I love your plugin! Would you add support of 64-bit keys? 'SetRegView 64' don't work. I need to use ${registry::movekey} on some 64-bit keys.

Thanks!

Regards,
David Pi

Add: I've just download the version 4.1. And found it works perfect with 'SetRegView 64'. I've been using an old version before. Sorry for this post!

Brummelchen
8th January 2012, 23:20
solved

PoRtAbLe_StEaLtH
8th August 2012, 11:55
Hi Instructor! I love your plugin! Would you add support of 64-bit keys? 'SetRegView 64' don't work. I need to use ${registry::movekey} on some 64-bit keys.

Thanks!

Regards,
David Pi

Add: I've just download the version 4.1. And found it works perfect with 'SetRegView 64'. I've been using an old version before. Sorry for this post!


thank you.. i hadn't noticed there was a newer version...
works great under 64-bit..

however.. now it's incompatible with XP?
i have to make two separate launchers for my portableapps :(

Afrow UK
8th August 2012, 12:21
What have you found that suggests that it isn't compatible with XP? The flag that is set by SetRegView 64 is ignored on non 64-bit OS's.

Stu

PoRtAbLe_StEaLtH
8th August 2012, 13:06
What have you found that suggests that it isn't compatible with XP? The flag that is set by SetRegView 64 is ignored on non 64-bit OS's.

Stu

i was just logging in to edit my comment..
it's not the registry plugin..
it was my fault..
the portableapp was already installed on the host machine i was testing and didn't realize.

Sorry about that..

Setregview 64 works great with 4.1.. :)
no complaints here.

PoRtAbLe_StEaLtH
8th January 2013, 05:41
anyone know why i can't save hex from the registry?

[HKEY_CURRENT_USER\Software\App\Preferences]
"Language"="en_US"
"Preferences"=hex:01
"Version"=hex:03,00,00,00
"Window"=hex(7):62,00,72,00,69,00,64,00,67,00,65,00,3a,00,6c,00,69,00,62,00,\
72,00,61,00,72,00,79,00,3a,00,2f,00,00,00,62,00,72,00,69,00,64,00,67,00,65,\
00,3a,00,66,00,73,00,3a,00,66,00,69,00,6c,00,65,00,3a,00,2f,00,2f,00,2f,00,\
3a,00,3a,00,7b,00,32,00,30,00,44,00,30,00,34,00,46,00,45,00,30,00,2d,00,33,\
00,41,00,45,00,41,00,2d,00,31,00,30,00,36,00,39,00,2d,00,41,00,32,00,44,00,\
38,00,2d,00,30,00,38,00,30,00,30,00,32,00,42,00,33,00,30,00,33,00,30,00,39,\
00,44,00,7d,00,00,00,62,00,72,00,69,00,64,00,67,00,65,00,3a,00,66,00,73,00,\
3a,00,66,00,69,00,6c,00,65,00,3a,00,2f,00,2f,00,2f,00,43,00,3a,00,2f,00,55,\
00,73,00,65,00,72,00,73,00,2f,00,44,00,4a,00,25,00,32,00,30,00,52,00,55,00,\
44,00,45,00,42,00,4f,00,59,00,53,00,45,00,53,00,00,00,62,00,72,00,69,00,64,\
00,67,00,65,00,3a,00,73,00,70,00,65,00,63,00,69,00,61,00,6c,00,3a,00,64,00,\
65,00,73,00,6b,00,74,00,6f,00,70,00,00,00,62,00,72,00,69,00,64,00,67,00,65,\
00,3a,00,66,00,73,00,3a,00,66,00,69,00,6c,00,65,00,3a,00,2f,00,2f,00,2f,00,\
43,00,3a,00,2f,00,55,00,73,00,65,00,72,00,73,00,2f,00,44,00,4a,00,25,00,32,\
00,30,00,52,00,55,00,44,00,45,00,42,00,4f,00,59,00,53,00,45,00,53,00,2f,00,\
44,00,6f,00,63,00,75,00,6d,00,65,00,6e,00,74,00,73,00,00,00,62,00,72,00,69,\
00,64,00,67,00,65,00,3a,00,66,00,73,00,3a,00,66,00,69,00,6c,00,65,00,3a,00,\
2f,00,2f,00,2f,00,43,00,3a,00,2f,00,55,00,73,00,65,00,72,00,73,00,2f,00,44,\
00,4a,00,25,00,32,00,30,00,52,00,55,00,44,00,45,00,42,00,4f,00,59,00,53,00,\
45,00,53,00,2f,00,50,00,69,00,63,00,74,00,75,00,72,00,65,00,73,00,00,00,00,\
00


but there is more in the registry..
no matter what i try. .. it refuses to save the rest..?

is this a glitch or am i missing something?

What's werid.. is if i import first.. it saves correctly..


By the way.. here's my code:
StrCpy $R0 0
${Do}
EnumRegKey $R1 `${_ROOT}` `${_KEY}` $R0
;MessageBox MB_OK `DEBUG: $R1`
${If} $R1 != ""
registry::_SaveKey /NOUNLOAD `${_ROOT}\${_KEY}\$R1` `$SETTINGSDIRECTORY\${APPNAME}.reg` `/A=1`
Pop $0
IntOp $R0 $R0 + 1
${EndIf}
${LoopWhile} $R1 != ""

MSG
8th January 2013, 06:59
Maybe related to NSIS_MAX_STRLEN?

PoRtAbLe_StEaLtH
8th January 2013, 07:09
Maybe related to NSIS_MAX_STRLEN?

thank you.. im starting to believe this is the case.

i believe it's due to "null terminating strings".

As you can see in the example above..
Each Value has multiple "null terminating strings".
NSIS stops at the first "null".

is it possible to bypass this restriction ?

PoRtAbLe_StEaLtH
8th January 2013, 14:04
just tried RegOpen:

${registry::Open} "HKCU\SOFTWARE\App\Preferences" "/K=0 /V=1 /S=1" $0
StrCmp $0 0 0 loop
MessageBox MB_OK "Error" IDOK close

loop:
${registry::Find} "$0" $1 $2 $3 $4

MessageBox MB_OKCANCEL '$$1 "path" =[$1]$\n\
$$2 "value" =[$2]$\n\
$$3 "string" =[$3]$\n\
$$4 "type" =[$4]$\n\
$\n\
Find next?' IDOK loop
close:

http://i46.tinypic.com/10pr1b8.png
the first value is read correctly..
but the rest are shown as [] for value, string, and type.


from my research.. MULTI_SZ seems to be very hard for NSIS to handle.
I've found reading & writing MULTI_SZ routines..
but those are for specific keys.

PoRtAbLe_StEaLtH
12th January 2013, 07:17
unbelievably.. using MS-DOS is the solution for MULTI_SZ that exceed MaxLengthStr

To export/save:
ExpandEnvStrings `$0` %COMSPEC%
nsExec::Exec `"$0" /c reg export "HKCU\Software\App\Preferences" "$SETTINGSDIRECTORY\settings.reg"`

To import file:
ExpandEnvStrings `$0` %COMSPEC%
nsExec::Exec `"$0" /c reg import "$SETTINGSDIRECTORY\settings.reg"`

To import specific values:
@reg.exe add "HKCU\Software\App\Preferences" /v "MySoftware" /d "Software1"\0"Software2"\0"Software3"\0 /t REG_MULTI_SZ /f

highend
25th October 2013, 11:09
Is there any chance that the bug (at least I call it a bug...) that it's unable to import .reg files to HKEY_CURRENT_USER without elevation will get fixed?

Apart from that it's a perfect addon!

rvintonyak
16th July 2014, 17:05
Hi Instructor,

Does this plugin support unicode or it is for ANSI only?

Anders
16th July 2014, 17:33
Does this plugin support unicode or it is for ANSI only?

If there is only one .dll in the .zip file then it is most likely ANSI only...

TrifonovS
11th November 2014, 09:30
Hi!

I had the following problem. In my script I delete a registry key (with NSIS commands), then later in my script I check if the key exists, using registry::_KeyExists. Normally the check comes very near after the deletion. The problem is that the result from _KeyExists is 0 that means the key exists, but it doesn't exist anymore (I can see this with Regedit). But if I put "sleep 5000" before the check the results is correct, the plug-in returns -1. What is the explanation about this?

[edit #1]
I see that the information from me is not good enough. Actually I delete the registry key in separate installer, called in silent mode. I call it with ExecWait command and when it exists, I check if the registry key exists. Only in this situation I have a problem.

[edit #2]
Some additional information. I call the integrated installer (this one that I call in silent mode) several times. I saw that once (probably, because it opens some cmd-windows for short time) that the script runs after ExecWait, but my integrated installer is still working... This can explain the behavior that I mentioned before, but how I can be sure that the installer, called in silent mode (also compiled with NSIS) is finished? I thought that it is enough to call it with ExecWait...

TrifonovS
11th November 2014, 15:51
I understood what is the reason. The integrated installer/uninstaller is copied to temp-folder and started from there (typical behavior). ExecWait exist after the started of the second executable. If I already know the problem, Google can help me to fin a solution.

JaysonPrichard
16th November 2014, 22:49
Just downloaded the NSIS registry plugin (http://nsis.sourceforge.net/Registry_plug-in). Tried to install it, and AVG alerted it was infected with a virus (Trojan horse Generic_s.CNY).

Anybody else have this?

Anders
17th November 2014, 00:06
Just downloaded the NSIS registry plugin (http://nsis.sourceforge.net/Registry_plug-in). Tried to install it, and AVG alerted it was infected with a virus (Trojan horse Generic_s.CNY).

Anybody else have this?

"Generic" means it is probably a false positive. Try uploading the plugin to VirusTotal to ease your mind...