<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://nsis.sourceforge.io/mediawiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Intersol</id>
	<title>NSIS Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://nsis.sourceforge.io/mediawiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Intersol"/>
	<link rel="alternate" type="text/html" href="https://nsis.sourceforge.io/Special:Contributions/Intersol"/>
	<updated>2026-05-27T19:12:45Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.39.17</generator>
	<entry>
		<id>https://nsis.sourceforge.io/mediawiki/index.php?title=Unicode_plug-in&amp;diff=14296</id>
		<title>Unicode plug-in</title>
		<link rel="alternate" type="text/html" href="https://nsis.sourceforge.io/mediawiki/index.php?title=Unicode_plug-in&amp;diff=14296"/>
		<updated>2007-11-28T09:59:41Z</updated>

		<summary type="html">&lt;p&gt;Intersol: /* Description */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{PageAuthor|Instructor}}&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
Download v1.0:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;attach&amp;gt;Unicode.zip&amp;lt;/attach&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Discussion:&amp;lt;br&amp;gt;&lt;br /&gt;
[http://forums.winamp.com/showthread.php?s=&amp;amp;threadid=218714 Forum thread]&lt;br /&gt;
&lt;br /&gt;
== Description ==&lt;br /&gt;
&lt;br /&gt;
This is NSIS plug-in for Unicode files conversion.&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Features:&#039;&#039;&#039;&lt;br /&gt;
*Convert file from Unicode to ANSI&lt;br /&gt;
*Convert file from ANSI to Unicode&lt;br /&gt;
**Conversions supported:&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;quot;UTF-8&amp;quot;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;-&amp;gt; ANSI&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;quot;UTF-16LE&amp;quot; &amp;lt;-&amp;gt; ANSI&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;quot;UTF-16BE&amp;quot; &amp;lt;-&amp;gt; ANSI&lt;br /&gt;
*Get file unicode type:&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;quot;NONE&amp;quot;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;- None Unicode&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;quot;UTF-8&amp;quot;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;- 8-bit Variable Width (Web)&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;quot;UTF-16LE|UCS-2LE&amp;quot; - 16-bit Little Endian (Default for Windows)&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;quot;UTF-16BE|UCS-2BE&amp;quot; - 16-bit Big Endian (Default for Linux)&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;quot;UTF-32LE|UCS-4LE&amp;quot; - 32-bit Little Endian&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;quot;UTF-32BE|UCS-4BE&amp;quot; - 32-bit Big Endian&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Related ==&lt;br /&gt;
* [http://sourceforge.net/projects/nsisu/ NSIS Unicode build] - a branch of NSIS for building unicode installers&lt;br /&gt;
[[Category:Plugins]]&lt;/div&gt;</summary>
		<author><name>Intersol</name></author>
	</entry>
	<entry>
		<id>https://nsis.sourceforge.io/mediawiki/index.php?title=Talk:Check_if_the_current_user_is_an_Administrator&amp;diff=14270</id>
		<title>Talk:Check if the current user is an Administrator</title>
		<link rel="alternate" type="text/html" href="https://nsis.sourceforge.io/mediawiki/index.php?title=Talk:Check_if_the_current_user_is_an_Administrator&amp;diff=14270"/>
		<updated>2007-11-24T13:27:21Z</updated>

		<summary type="html">&lt;p&gt;Intersol: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Macro 2 crashed.&lt;br /&gt;
&lt;br /&gt;
Since some users still use NT4, I tried the second version first. When testing as an administrator, it worked. When testing as plain user, the installer crashed on a WinXPSP2-system.&lt;br /&gt;
&lt;br /&gt;
Solution: Macro 1 works, so I use that one instead, and assume that all NT4-users are administrators.&lt;br /&gt;
&lt;br /&gt;
How about Vista? Does it work in Vista? We need to specify this.&lt;/div&gt;</summary>
		<author><name>Intersol</name></author>
	</entry>
	<entry>
		<id>https://nsis.sourceforge.io/mediawiki/index.php?title=Check_if_the_current_user_is_an_Administrator&amp;diff=14269</id>
		<title>Check if the current user is an Administrator</title>
		<link rel="alternate" type="text/html" href="https://nsis.sourceforge.io/mediawiki/index.php?title=Check_if_the_current_user_is_an_Administrator&amp;diff=14269"/>
		<updated>2007-11-24T13:26:38Z</updated>

		<summary type="html">&lt;p&gt;Intersol: /* Macro 2 (NT/2k/XP/2k3) - doen&amp;#039;t work! */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{PageAuthor|CancerFace}}&lt;br /&gt;
&lt;br /&gt;
NSIS forum [http://forums.winamp.com/showthread.php?s=&amp;amp;threadid=253904 thread]&lt;br /&gt;
&lt;br /&gt;
== Description ==&lt;br /&gt;
I wanted to have the option of checking if a user belongs to the adminisrator&#039;s group without using a special plugin. This can be achieved using API calls with the System plugin. &lt;br /&gt;
&lt;br /&gt;
== Macros ==&lt;br /&gt;
The first macro works only in Windows 2000, XP and 2003 while the second one also works in NT&lt;br /&gt;
=== Usage ===&lt;br /&gt;
Use the following code in your NSIS installer to find out if the user invoking it belongs to the administrator&#039;s group:&lt;br /&gt;
&amp;lt;highlight-nsis&amp;gt;&lt;br /&gt;
!insertmacro IsUserAdmin $0&lt;br /&gt;
; $0 = 1 if the user belongs to the administrator&#039;s group&lt;br /&gt;
; $0 = 0 if not&lt;br /&gt;
; $0 = -1 if there was an error (only for the 1st Macro)&lt;br /&gt;
&amp;lt;/highlight-nsis&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Macro 1 (2k/XP/2k3)===&lt;br /&gt;
&amp;lt;highlight-nsis&amp;gt;&lt;br /&gt;
!macro IsUserAdmin RESULT&lt;br /&gt;
 !define Index &amp;quot;Line${__LINE__}&amp;quot;&lt;br /&gt;
   StrCpy ${RESULT} 0&lt;br /&gt;
   System::Call &#039;*(&amp;amp;i1 0,&amp;amp;i4 0,&amp;amp;i1 5)i.r0&#039;&lt;br /&gt;
   System::Call &#039;advapi32::AllocateAndInitializeSid(i r0,i 2,i 32,i 544,i 0,i 0,i 0,i 0,i 0, \&lt;br /&gt;
   i 0,*i .R0)i.r5&#039;&lt;br /&gt;
   System::Free $0&lt;br /&gt;
   System::Call &#039;advapi32::CheckTokenMembership(i n,i R0,*i .R1)i.r5&#039;&lt;br /&gt;
   StrCmp $5 0 ${Index}_Error&lt;br /&gt;
   StrCpy ${RESULT} $R1&lt;br /&gt;
   Goto ${Index}_End&lt;br /&gt;
 ${Index}_Error:&lt;br /&gt;
   StrCpy ${RESULT} -1&lt;br /&gt;
 ${Index}_End:&lt;br /&gt;
   System::Call &#039;advapi32::FreeSid(i R0)i.r5&#039;&lt;br /&gt;
 !undef Index&lt;br /&gt;
!macroend&lt;br /&gt;
&amp;lt;/highlight-nsis&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Macro 2 (NT/2k/XP/2k3) - doesn&#039;t work! ===&lt;br /&gt;
&amp;lt;highlight-nsis&amp;gt;&lt;br /&gt;
!define TOKEN_READ   0x00020008&lt;br /&gt;
!define TokenGroups  2&lt;br /&gt;
&lt;br /&gt;
!macro IsUserAdmin RESULT&lt;br /&gt;
 !define Index &amp;quot;Line${__LINE__}&amp;quot;&lt;br /&gt;
 StrCpy ${RESULT} 0&lt;br /&gt;
&lt;br /&gt;
 # Construct the SID for the Admin group - (S-1-5-32-544 for administrators) put in $R4&lt;br /&gt;
  System::Call &amp;quot;*(&amp;amp;i1 0,&amp;amp;i4 0,&amp;amp;i1 5)i.r0&amp;quot;&lt;br /&gt;
  System::Call  &amp;quot;advapi32::AllocateAndInitializeSid(i r0,i 2,i 32,i 544,i 0,i 0,i 0,i 0,i 0,\&lt;br /&gt;
  i 0,*i .R4)i.r5&amp;quot;&lt;br /&gt;
  System::Free $0&lt;br /&gt;
&lt;br /&gt;
 # Get a psuedo-handle of the current process and place it on R0&lt;br /&gt;
  System::Call &#039;kernel32::GetCurrentProcess()i.R0&#039;&lt;br /&gt;
&lt;br /&gt;
 # Open the Token from the psuedo process and place the handle on R1&lt;br /&gt;
  System::Call &#039;advapi32::OpenProcessToken(i R0,i ${TOKEN_READ},*i .R1)i.R9&#039;&lt;br /&gt;
&lt;br /&gt;
 # Get info from the token and place it in $R2 (the size goes to $R3)&lt;br /&gt;
  System::Call &#039;advapi32::GetTokenInformation(i R1,i ${TokenGroups},*i .R2,i 0,*i .R3)i.R9&#039;&lt;br /&gt;
  System::Alloc $R3&lt;br /&gt;
   Pop $R2&lt;br /&gt;
  System::Call &#039;advapi32::GetTokenInformation(i R1,i ${TokenGroups},i R2,i $R3,*i .R3)i.R9&#039;&lt;br /&gt;
&lt;br /&gt;
 # Check how many TOKEN_GROUPS elements are in $R2 (place the number in $R5)&lt;br /&gt;
  System::Call &#039;*$R2(i.R5,i.R6)&#039;&lt;br /&gt;
&lt;br /&gt;
 # Compare the SID structures&lt;br /&gt;
  StrCpy $1 0&lt;br /&gt;
	&lt;br /&gt;
 ${Index}_Start:&lt;br /&gt;
  StrCmp $1 $R5 ${Index}_Stop&lt;br /&gt;
  System::Call &#039;advapi32::EqualSid(i R4,i R6)i.R9&#039;&lt;br /&gt;
  StrCmp $R9 &amp;quot;&amp;quot; ${Index}_Increment&lt;br /&gt;
  StrCmp $R9 0 +1 +3&lt;br /&gt;
  StrCpy ${RESULT} 0&lt;br /&gt;
   Goto ${Index}_Increment&lt;br /&gt;
  StrCpy ${RESULT} 1&lt;br /&gt;
  System::Call &#039;advapi32::FreeSid(i R6)i.R8&#039;&lt;br /&gt;
   Goto ${Index}_Stop&lt;br /&gt;
 ${Index}_Increment:&lt;br /&gt;
  System::Call &#039;advapi32::GetLengthSid(i R6)i.R9&#039;&lt;br /&gt;
  System::Call &#039;advapi32::FreeSid(i R6)i.R8&#039;&lt;br /&gt;
  IntOp $R6 $R6 + $R9&lt;br /&gt;
  IntOp $1 $1 + 1&lt;br /&gt;
  Goto ${Index}_Start&lt;br /&gt;
&lt;br /&gt;
 ${Index}_Stop:&lt;br /&gt;
 # Close the token handle&lt;br /&gt;
  System::Call &#039;kernel32::CloseHandle(i R1)i.R9&#039;&lt;br /&gt;
&lt;br /&gt;
 # cleanup&lt;br /&gt;
  System::Call &#039;advapi32::FreeSid(i R4)i.r5&#039;&lt;br /&gt;
  System::Free $R2&lt;br /&gt;
  System::Free 0&lt;br /&gt;
&lt;br /&gt;
 !undef Index&lt;br /&gt;
!macroend&lt;br /&gt;
&amp;lt;/highlight-nsis&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Resources and Links ==&lt;br /&gt;
* NSIS forum [http://forums.winamp.com/showthread.php?s=&amp;amp;threadid=253904 thread]&lt;br /&gt;
* [http://nsis.sourceforge.net/XtInfoPlugin_plug-in XtInfo Plugin]&lt;br /&gt;
&lt;br /&gt;
API Functions used:&lt;br /&gt;
* [http://msdn.microsoft.com/library/default.asp?url=/library/en-us/netmgmt/netmgmt/netuseradd.asp AllocateAndInitializeSid]&lt;br /&gt;
* [http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/getcurrentprocess.asp GetCurrentProcess]&lt;br /&gt;
* [http://msdn.microsoft.com/library/default.asp?url=/library/en-us/secauthz/security/openprocesstoken.asp OpenProcessToken]&lt;br /&gt;
* [http://msdn.microsoft.com/library/default.asp?url=/library/en-us/secauthz/security/gettokeninformation.asp GetTokenInformation]&lt;br /&gt;
* [http://msdn.microsoft.com/library/default.asp?url=/library/en-us/secauthz/security/equalsid.asp EqualSid]&lt;br /&gt;
* [http://msdn.microsoft.com/library/default.asp?url=/library/en-us/secauthz/security/freesid.asp FreeSid]&lt;br /&gt;
* [http://msdn.microsoft.com/library/default.asp?url=/library/en-us/secauthz/security/getlengthsid.asp GetLengthSid]&lt;br /&gt;
* [http://msdn.microsoft.com/library/default.asp?url=/library/en-us/sysinfo/base/closehandle.asp CloseHandle]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:User Accounts Related Functions]]&lt;/div&gt;</summary>
		<author><name>Intersol</name></author>
	</entry>
	<entry>
		<id>https://nsis.sourceforge.io/mediawiki/index.php?title=Check_if_the_current_user_is_an_Administrator&amp;diff=14268</id>
		<title>Check if the current user is an Administrator</title>
		<link rel="alternate" type="text/html" href="https://nsis.sourceforge.io/mediawiki/index.php?title=Check_if_the_current_user_is_an_Administrator&amp;diff=14268"/>
		<updated>2007-11-24T13:26:17Z</updated>

		<summary type="html">&lt;p&gt;Intersol: /* Macro 2 (NT/2k/XP/2k3) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{PageAuthor|CancerFace}}&lt;br /&gt;
&lt;br /&gt;
NSIS forum [http://forums.winamp.com/showthread.php?s=&amp;amp;threadid=253904 thread]&lt;br /&gt;
&lt;br /&gt;
== Description ==&lt;br /&gt;
I wanted to have the option of checking if a user belongs to the adminisrator&#039;s group without using a special plugin. This can be achieved using API calls with the System plugin. &lt;br /&gt;
&lt;br /&gt;
== Macros ==&lt;br /&gt;
The first macro works only in Windows 2000, XP and 2003 while the second one also works in NT&lt;br /&gt;
=== Usage ===&lt;br /&gt;
Use the following code in your NSIS installer to find out if the user invoking it belongs to the administrator&#039;s group:&lt;br /&gt;
&amp;lt;highlight-nsis&amp;gt;&lt;br /&gt;
!insertmacro IsUserAdmin $0&lt;br /&gt;
; $0 = 1 if the user belongs to the administrator&#039;s group&lt;br /&gt;
; $0 = 0 if not&lt;br /&gt;
; $0 = -1 if there was an error (only for the 1st Macro)&lt;br /&gt;
&amp;lt;/highlight-nsis&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Macro 1 (2k/XP/2k3)===&lt;br /&gt;
&amp;lt;highlight-nsis&amp;gt;&lt;br /&gt;
!macro IsUserAdmin RESULT&lt;br /&gt;
 !define Index &amp;quot;Line${__LINE__}&amp;quot;&lt;br /&gt;
   StrCpy ${RESULT} 0&lt;br /&gt;
   System::Call &#039;*(&amp;amp;i1 0,&amp;amp;i4 0,&amp;amp;i1 5)i.r0&#039;&lt;br /&gt;
   System::Call &#039;advapi32::AllocateAndInitializeSid(i r0,i 2,i 32,i 544,i 0,i 0,i 0,i 0,i 0, \&lt;br /&gt;
   i 0,*i .R0)i.r5&#039;&lt;br /&gt;
   System::Free $0&lt;br /&gt;
   System::Call &#039;advapi32::CheckTokenMembership(i n,i R0,*i .R1)i.r5&#039;&lt;br /&gt;
   StrCmp $5 0 ${Index}_Error&lt;br /&gt;
   StrCpy ${RESULT} $R1&lt;br /&gt;
   Goto ${Index}_End&lt;br /&gt;
 ${Index}_Error:&lt;br /&gt;
   StrCpy ${RESULT} -1&lt;br /&gt;
 ${Index}_End:&lt;br /&gt;
   System::Call &#039;advapi32::FreeSid(i R0)i.r5&#039;&lt;br /&gt;
 !undef Index&lt;br /&gt;
!macroend&lt;br /&gt;
&amp;lt;/highlight-nsis&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Macro 2 (NT/2k/XP/2k3) - doen&#039;t work! ===&lt;br /&gt;
&amp;lt;highlight-nsis&amp;gt;&lt;br /&gt;
!define TOKEN_READ   0x00020008&lt;br /&gt;
!define TokenGroups  2&lt;br /&gt;
&lt;br /&gt;
!macro IsUserAdmin RESULT&lt;br /&gt;
 !define Index &amp;quot;Line${__LINE__}&amp;quot;&lt;br /&gt;
 StrCpy ${RESULT} 0&lt;br /&gt;
&lt;br /&gt;
 # Construct the SID for the Admin group - (S-1-5-32-544 for administrators) put in $R4&lt;br /&gt;
  System::Call &amp;quot;*(&amp;amp;i1 0,&amp;amp;i4 0,&amp;amp;i1 5)i.r0&amp;quot;&lt;br /&gt;
  System::Call  &amp;quot;advapi32::AllocateAndInitializeSid(i r0,i 2,i 32,i 544,i 0,i 0,i 0,i 0,i 0,\&lt;br /&gt;
  i 0,*i .R4)i.r5&amp;quot;&lt;br /&gt;
  System::Free $0&lt;br /&gt;
&lt;br /&gt;
 # Get a psuedo-handle of the current process and place it on R0&lt;br /&gt;
  System::Call &#039;kernel32::GetCurrentProcess()i.R0&#039;&lt;br /&gt;
&lt;br /&gt;
 # Open the Token from the psuedo process and place the handle on R1&lt;br /&gt;
  System::Call &#039;advapi32::OpenProcessToken(i R0,i ${TOKEN_READ},*i .R1)i.R9&#039;&lt;br /&gt;
&lt;br /&gt;
 # Get info from the token and place it in $R2 (the size goes to $R3)&lt;br /&gt;
  System::Call &#039;advapi32::GetTokenInformation(i R1,i ${TokenGroups},*i .R2,i 0,*i .R3)i.R9&#039;&lt;br /&gt;
  System::Alloc $R3&lt;br /&gt;
   Pop $R2&lt;br /&gt;
  System::Call &#039;advapi32::GetTokenInformation(i R1,i ${TokenGroups},i R2,i $R3,*i .R3)i.R9&#039;&lt;br /&gt;
&lt;br /&gt;
 # Check how many TOKEN_GROUPS elements are in $R2 (place the number in $R5)&lt;br /&gt;
  System::Call &#039;*$R2(i.R5,i.R6)&#039;&lt;br /&gt;
&lt;br /&gt;
 # Compare the SID structures&lt;br /&gt;
  StrCpy $1 0&lt;br /&gt;
	&lt;br /&gt;
 ${Index}_Start:&lt;br /&gt;
  StrCmp $1 $R5 ${Index}_Stop&lt;br /&gt;
  System::Call &#039;advapi32::EqualSid(i R4,i R6)i.R9&#039;&lt;br /&gt;
  StrCmp $R9 &amp;quot;&amp;quot; ${Index}_Increment&lt;br /&gt;
  StrCmp $R9 0 +1 +3&lt;br /&gt;
  StrCpy ${RESULT} 0&lt;br /&gt;
   Goto ${Index}_Increment&lt;br /&gt;
  StrCpy ${RESULT} 1&lt;br /&gt;
  System::Call &#039;advapi32::FreeSid(i R6)i.R8&#039;&lt;br /&gt;
   Goto ${Index}_Stop&lt;br /&gt;
 ${Index}_Increment:&lt;br /&gt;
  System::Call &#039;advapi32::GetLengthSid(i R6)i.R9&#039;&lt;br /&gt;
  System::Call &#039;advapi32::FreeSid(i R6)i.R8&#039;&lt;br /&gt;
  IntOp $R6 $R6 + $R9&lt;br /&gt;
  IntOp $1 $1 + 1&lt;br /&gt;
  Goto ${Index}_Start&lt;br /&gt;
&lt;br /&gt;
 ${Index}_Stop:&lt;br /&gt;
 # Close the token handle&lt;br /&gt;
  System::Call &#039;kernel32::CloseHandle(i R1)i.R9&#039;&lt;br /&gt;
&lt;br /&gt;
 # cleanup&lt;br /&gt;
  System::Call &#039;advapi32::FreeSid(i R4)i.r5&#039;&lt;br /&gt;
  System::Free $R2&lt;br /&gt;
  System::Free 0&lt;br /&gt;
&lt;br /&gt;
 !undef Index&lt;br /&gt;
!macroend&lt;br /&gt;
&amp;lt;/highlight-nsis&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Resources and Links ==&lt;br /&gt;
* NSIS forum [http://forums.winamp.com/showthread.php?s=&amp;amp;threadid=253904 thread]&lt;br /&gt;
* [http://nsis.sourceforge.net/XtInfoPlugin_plug-in XtInfo Plugin]&lt;br /&gt;
&lt;br /&gt;
API Functions used:&lt;br /&gt;
* [http://msdn.microsoft.com/library/default.asp?url=/library/en-us/netmgmt/netmgmt/netuseradd.asp AllocateAndInitializeSid]&lt;br /&gt;
* [http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/getcurrentprocess.asp GetCurrentProcess]&lt;br /&gt;
* [http://msdn.microsoft.com/library/default.asp?url=/library/en-us/secauthz/security/openprocesstoken.asp OpenProcessToken]&lt;br /&gt;
* [http://msdn.microsoft.com/library/default.asp?url=/library/en-us/secauthz/security/gettokeninformation.asp GetTokenInformation]&lt;br /&gt;
* [http://msdn.microsoft.com/library/default.asp?url=/library/en-us/secauthz/security/equalsid.asp EqualSid]&lt;br /&gt;
* [http://msdn.microsoft.com/library/default.asp?url=/library/en-us/secauthz/security/freesid.asp FreeSid]&lt;br /&gt;
* [http://msdn.microsoft.com/library/default.asp?url=/library/en-us/secauthz/security/getlengthsid.asp GetLengthSid]&lt;br /&gt;
* [http://msdn.microsoft.com/library/default.asp?url=/library/en-us/sysinfo/base/closehandle.asp CloseHandle]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:User Accounts Related Functions]]&lt;/div&gt;</summary>
		<author><name>Intersol</name></author>
	</entry>
	<entry>
		<id>https://nsis.sourceforge.io/mediawiki/index.php?title=File_Association&amp;diff=14266</id>
		<title>File Association</title>
		<link rel="alternate" type="text/html" href="https://nsis.sourceforge.io/mediawiki/index.php?title=File_Association&amp;diff=14266"/>
		<updated>2007-11-24T11:26:32Z</updated>

		<summary type="html">&lt;p&gt;Intersol: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{PageAuthor|Vytautas}}&lt;br /&gt;
{{PageAuthor|intersol}}&lt;br /&gt;
&lt;br /&gt;
== Description ==&lt;br /&gt;
Macro for registering and unregistering file extensions in NSIS scripts. &lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
&amp;lt;highlight-nsis&amp;gt;&lt;br /&gt;
!include &amp;quot;registerExtension.nsh&amp;quot;&lt;br /&gt;
...&lt;br /&gt;
# later, inside a section:&lt;br /&gt;
${registerExtension} &amp;quot;c:\myplayer.exe&amp;quot; &amp;quot;.mkv&amp;quot; &amp;quot;MKV File&amp;quot;&lt;br /&gt;
&lt;br /&gt;
${unregisterExtension} &amp;quot;.mkv&amp;quot; &amp;quot;MKV File&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/highlight-nsis&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== registerExtension.nsh ==&lt;br /&gt;
&amp;lt;highlight-nsis&amp;gt;&lt;br /&gt;
!define registerExtension &amp;quot;!insertmacro registerExtension&amp;quot;&lt;br /&gt;
!define unregisterExtension &amp;quot;!insertmacro unregisterExtension&amp;quot;&lt;br /&gt;
&lt;br /&gt;
!macro registerExtension executable extension description&lt;br /&gt;
       Push &amp;quot;${executable}&amp;quot;  ; &amp;quot;full path to my.exe&amp;quot;&lt;br /&gt;
       Push &amp;quot;${extension}&amp;quot;   ;  &amp;quot;.mkv&amp;quot;&lt;br /&gt;
       Push &amp;quot;${description}&amp;quot; ;  &amp;quot;MKV File&amp;quot;&lt;br /&gt;
       Call registerExtension&lt;br /&gt;
!macroend&lt;br /&gt;
&lt;br /&gt;
; back up old value of .opt&lt;br /&gt;
Function registerExtension&lt;br /&gt;
!define Index &amp;quot;Line${__LINE__}&amp;quot;&lt;br /&gt;
  pop $R0 ; ext name&lt;br /&gt;
  pop $R1&lt;br /&gt;
  pop $R2&lt;br /&gt;
  push $1&lt;br /&gt;
  push $0&lt;br /&gt;
  ReadRegStr $1 HKCR $R1 &amp;quot;&amp;quot;&lt;br /&gt;
  StrCmp $1 &amp;quot;&amp;quot; &amp;quot;${Index}-NoBackup&amp;quot;&lt;br /&gt;
    StrCmp $1 &amp;quot;OptionsFile&amp;quot; &amp;quot;${Index}-NoBackup&amp;quot;&lt;br /&gt;
    WriteRegStr HKCR $R1 &amp;quot;backup_val&amp;quot; $1&lt;br /&gt;
&amp;quot;${Index}-NoBackup:&amp;quot;&lt;br /&gt;
  WriteRegStr HKCR $R1 &amp;quot;&amp;quot; $R0&lt;br /&gt;
  ReadRegStr $0 HKCR $R0 &amp;quot;&amp;quot;&lt;br /&gt;
  StrCmp $0 &amp;quot;&amp;quot; 0 &amp;quot;${Index}-Skip&amp;quot;&lt;br /&gt;
	WriteRegStr HKCR $R0 &amp;quot;&amp;quot; $R0&lt;br /&gt;
	WriteRegStr HKCR &amp;quot;$R0\shell&amp;quot; &amp;quot;&amp;quot; &amp;quot;open&amp;quot;&lt;br /&gt;
	WriteRegStr HKCR &amp;quot;$R0\DefaultIcon&amp;quot; &amp;quot;&amp;quot; &amp;quot;$R2,0&amp;quot;&lt;br /&gt;
&amp;quot;${Index}-Skip:&amp;quot;&lt;br /&gt;
  WriteRegStr HKCR &amp;quot;$R0\shell\open\command&amp;quot; &amp;quot;&amp;quot; &#039;$R2 &amp;quot;%1&amp;quot;&#039;&lt;br /&gt;
  WriteRegStr HKCR &amp;quot;$R0\shell\edit&amp;quot; &amp;quot;&amp;quot; &amp;quot;Edit $R0&amp;quot;&lt;br /&gt;
  WriteRegStr HKCR &amp;quot;$R0\shell\edit\command&amp;quot; &amp;quot;&amp;quot; &#039;$R2 &amp;quot;%1&amp;quot;&#039;&lt;br /&gt;
  pop $0&lt;br /&gt;
  pop $1&lt;br /&gt;
!undef Index&lt;br /&gt;
FunctionEnd&lt;br /&gt;
&lt;br /&gt;
!macro unregisterExtension extension description&lt;br /&gt;
       Push ${extension}   ;  &amp;quot;.mkv&amp;quot;&lt;br /&gt;
       Push ${description}   ;  &amp;quot;MKV File&amp;quot;&lt;br /&gt;
       Call unregisterExtension&lt;br /&gt;
!macroend&lt;br /&gt;
&lt;br /&gt;
Function unregisterExtension&lt;br /&gt;
  pop $R1 ; description&lt;br /&gt;
  pop $R0 ; extension&lt;br /&gt;
!define Index &amp;quot;Line${__LINE__}&amp;quot;&lt;br /&gt;
  ReadRegStr $1 HKCR $R0 &amp;quot;&amp;quot;&lt;br /&gt;
  StrCmp $1 $R1 0 &amp;quot;${Index}-NoOwn&amp;quot; ; only do this if we own it&lt;br /&gt;
  ReadRegStr $1 HKCR $R0 &amp;quot;backup_val&amp;quot;&lt;br /&gt;
  StrCmp $1 &amp;quot;&amp;quot; 0 &amp;quot;${Index}-Restore&amp;quot; ; if backup=&amp;quot;&amp;quot; then delete the whole key&lt;br /&gt;
  DeleteRegKey HKCR $R0&lt;br /&gt;
  Goto &amp;quot;${Index}-NoOwn&amp;quot;&lt;br /&gt;
&amp;quot;${Index}-Restore:&amp;quot;&lt;br /&gt;
  WriteRegStr HKCR $R0 &amp;quot;&amp;quot; $1&lt;br /&gt;
  DeleteRegValue HKCR $R0 &amp;quot;backup_val&amp;quot;&lt;br /&gt;
  DeleteRegKey HKCR $R1 ;Delete key with association name settings&lt;br /&gt;
&amp;quot;${Index}-NoOwn:&amp;quot;&lt;br /&gt;
!undef Index&lt;br /&gt;
FunctionEnd&lt;br /&gt;
&amp;lt;/highlight-nsis&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Info ==&lt;br /&gt;
Any refereces to execute.exe should be replaced with the appropriate command to perform the specified action.&lt;br /&gt;
&lt;br /&gt;
This page was based on information provided in &amp;quot;Examples\makensis.nsi&amp;quot; and this thread: [http://forums.winamp.com/showthread.php?s=&amp;amp;threadid=140254 http://forums.winamp.com/showthread.php?s=&amp;amp;threadid=140254]&lt;br /&gt;
&lt;br /&gt;
Vytautas&lt;br /&gt;
&lt;br /&gt;
[[Category:System Related Functions]]&lt;br /&gt;
[[Category:Scripting FAQ|How can I associate a file extension with my application?]]&lt;/div&gt;</summary>
		<author><name>Intersol</name></author>
	</entry>
	<entry>
		<id>https://nsis.sourceforge.io/mediawiki/index.php?title=File_Association&amp;diff=14265</id>
		<title>File Association</title>
		<link rel="alternate" type="text/html" href="https://nsis.sourceforge.io/mediawiki/index.php?title=File_Association&amp;diff=14265"/>
		<updated>2007-11-24T11:25:44Z</updated>

		<summary type="html">&lt;p&gt;Intersol: Replaced the register/unregister file extension macro/function&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{PageAuthor|Vytautas}}&lt;br /&gt;
{{PageAuthor|intersol}}&lt;br /&gt;
&lt;br /&gt;
== Description ==&lt;br /&gt;
Macro for registering and unregistering file extensions in NSIS scripts. &lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
&amp;lt;highlight-nsis&amp;gt;&lt;br /&gt;
!include &amp;quot;registerExtension.nsh&amp;quot;&lt;br /&gt;
...&lt;br /&gt;
# later, inside a section:&lt;br /&gt;
${registerExtension} &amp;quot;c:\myplayer.exe&amp;quot; &amp;quot;.mkv&amp;quot; &amp;quot;MKV File&amp;quot;&lt;br /&gt;
&lt;br /&gt;
${unregisterExtension} &amp;quot;.mkv&amp;quot; &amp;quot;MKV File&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/highlight-nsis&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| border=1 cellspacing=0&lt;br /&gt;
|-&lt;br /&gt;
! Token&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;.opt&amp;quot;&lt;br /&gt;
| Is the extention of your choice&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;OptionsFile&amp;quot;&lt;br /&gt;
| Is the general description of the file. Make sure NOT TO USE GENERIC DESCRIPTIONS or descriptions IN USE BY OTHER APPLICATIONS. Use a format like ApplicationName.FileType. If the application name is too generic add for example the company name.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;Program Options File&amp;quot;&lt;br /&gt;
| Is the windows description of the file&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;open&amp;quot; &amp;amp; &amp;quot;Edit Options File&amp;quot;&lt;br /&gt;
| Are descriptions of the action performed by the following commands&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== registerExtension.nsh ==&lt;br /&gt;
&amp;lt;highlight-nsis&amp;gt;&lt;br /&gt;
!define registerExtension &amp;quot;!insertmacro registerExtension&amp;quot;&lt;br /&gt;
!define unregisterExtension &amp;quot;!insertmacro unregisterExtension&amp;quot;&lt;br /&gt;
&lt;br /&gt;
!macro registerExtension executable extension description&lt;br /&gt;
       Push &amp;quot;${executable}&amp;quot;  ; &amp;quot;full path to my.exe&amp;quot;&lt;br /&gt;
       Push &amp;quot;${extension}&amp;quot;   ;  &amp;quot;.mkv&amp;quot;&lt;br /&gt;
       Push &amp;quot;${description}&amp;quot; ;  &amp;quot;MKV File&amp;quot;&lt;br /&gt;
       Call registerExtension&lt;br /&gt;
!macroend&lt;br /&gt;
&lt;br /&gt;
; back up old value of .opt&lt;br /&gt;
Function registerExtension&lt;br /&gt;
!define Index &amp;quot;Line${__LINE__}&amp;quot;&lt;br /&gt;
  pop $R0 ; ext name&lt;br /&gt;
  pop $R1&lt;br /&gt;
  pop $R2&lt;br /&gt;
  push $1&lt;br /&gt;
  push $0&lt;br /&gt;
  ReadRegStr $1 HKCR $R1 &amp;quot;&amp;quot;&lt;br /&gt;
  StrCmp $1 &amp;quot;&amp;quot; &amp;quot;${Index}-NoBackup&amp;quot;&lt;br /&gt;
    StrCmp $1 &amp;quot;OptionsFile&amp;quot; &amp;quot;${Index}-NoBackup&amp;quot;&lt;br /&gt;
    WriteRegStr HKCR $R1 &amp;quot;backup_val&amp;quot; $1&lt;br /&gt;
&amp;quot;${Index}-NoBackup:&amp;quot;&lt;br /&gt;
  WriteRegStr HKCR $R1 &amp;quot;&amp;quot; $R0&lt;br /&gt;
  ReadRegStr $0 HKCR $R0 &amp;quot;&amp;quot;&lt;br /&gt;
  StrCmp $0 &amp;quot;&amp;quot; 0 &amp;quot;${Index}-Skip&amp;quot;&lt;br /&gt;
	WriteRegStr HKCR $R0 &amp;quot;&amp;quot; $R0&lt;br /&gt;
	WriteRegStr HKCR &amp;quot;$R0\shell&amp;quot; &amp;quot;&amp;quot; &amp;quot;open&amp;quot;&lt;br /&gt;
	WriteRegStr HKCR &amp;quot;$R0\DefaultIcon&amp;quot; &amp;quot;&amp;quot; &amp;quot;$R2,0&amp;quot;&lt;br /&gt;
&amp;quot;${Index}-Skip:&amp;quot;&lt;br /&gt;
  WriteRegStr HKCR &amp;quot;$R0\shell\open\command&amp;quot; &amp;quot;&amp;quot; &#039;$R2 &amp;quot;%1&amp;quot;&#039;&lt;br /&gt;
  WriteRegStr HKCR &amp;quot;$R0\shell\edit&amp;quot; &amp;quot;&amp;quot; &amp;quot;Edit $R0&amp;quot;&lt;br /&gt;
  WriteRegStr HKCR &amp;quot;$R0\shell\edit\command&amp;quot; &amp;quot;&amp;quot; &#039;$R2 &amp;quot;%1&amp;quot;&#039;&lt;br /&gt;
  pop $0&lt;br /&gt;
  pop $1&lt;br /&gt;
!undef Index&lt;br /&gt;
FunctionEnd&lt;br /&gt;
&lt;br /&gt;
!macro unregisterExtension extension description&lt;br /&gt;
       Push ${extension}   ;  &amp;quot;.mkv&amp;quot;&lt;br /&gt;
       Push ${description}   ;  &amp;quot;MKV File&amp;quot;&lt;br /&gt;
       Call unregisterExtension&lt;br /&gt;
!macroend&lt;br /&gt;
&lt;br /&gt;
Function unregisterExtension&lt;br /&gt;
  pop $R1 ; description&lt;br /&gt;
  pop $R0 ; extension&lt;br /&gt;
!define Index &amp;quot;Line${__LINE__}&amp;quot;&lt;br /&gt;
  ReadRegStr $1 HKCR $R0 &amp;quot;&amp;quot;&lt;br /&gt;
  StrCmp $1 $R1 0 &amp;quot;${Index}-NoOwn&amp;quot; ; only do this if we own it&lt;br /&gt;
  ReadRegStr $1 HKCR $R0 &amp;quot;backup_val&amp;quot;&lt;br /&gt;
  StrCmp $1 &amp;quot;&amp;quot; 0 &amp;quot;${Index}-Restore&amp;quot; ; if backup=&amp;quot;&amp;quot; then delete the whole key&lt;br /&gt;
  DeleteRegKey HKCR $R0&lt;br /&gt;
  Goto &amp;quot;${Index}-NoOwn&amp;quot;&lt;br /&gt;
&amp;quot;${Index}-Restore:&amp;quot;&lt;br /&gt;
  WriteRegStr HKCR $R0 &amp;quot;&amp;quot; $1&lt;br /&gt;
  DeleteRegValue HKCR $R0 &amp;quot;backup_val&amp;quot;&lt;br /&gt;
  DeleteRegKey HKCR $R1 ;Delete key with association name settings&lt;br /&gt;
&amp;quot;${Index}-NoOwn:&amp;quot;&lt;br /&gt;
!undef Index&lt;br /&gt;
FunctionEnd&lt;br /&gt;
&amp;lt;/highlight-nsis&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Info ==&lt;br /&gt;
Any refereces to execute.exe should be replaced with the appropriate command to perform the specified action.&lt;br /&gt;
&lt;br /&gt;
This page was based on information provided in &amp;quot;Examples\makensis.nsi&amp;quot; and this thread: [http://forums.winamp.com/showthread.php?s=&amp;amp;threadid=140254 http://forums.winamp.com/showthread.php?s=&amp;amp;threadid=140254]&lt;br /&gt;
&lt;br /&gt;
Vytautas&lt;br /&gt;
&lt;br /&gt;
[[Category:System Related Functions]]&lt;br /&gt;
[[Category:Scripting FAQ|How can I associate a file extension with my application?]]&lt;/div&gt;</summary>
		<author><name>Intersol</name></author>
	</entry>
</feed>