<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Серый форум &mdash; VBS: WMI & UAC (определение прав)]]></title>
	<link rel="self" href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=5892&amp;type=atom" />
	<updated>2011-06-28T19:25:07Z</updated>
	<generator>PunBB</generator>
	<id>https://forum.script-coding.com/viewtopic.php?id=5892</id>
		<entry>
			<title type="html"><![CDATA[Re: VBS: WMI & UAC (определение прав)]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=49500#p49500" />
			<content type="html"><![CDATA[<p>Одним из простых вариантов проверки на наличие повышенных прав&nbsp; является попытка создать текстовый файл в корне системного раздела.</p><div class="codebox"><pre><code>function isElevated()
{
  var e, f=GetSystemDrive()+RandomFileName();
  try{ CreateTextFile(f); FSO.DeleteFile(f);}
  catch (e) {return false;}
  return true;
}</code></pre></div>]]></content>
			<author>
				<name><![CDATA[JSmаn]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=24434</uri>
			</author>
			<updated>2011-06-28T19:25:07Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=49500#p49500</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBS: WMI & UAC (определение прав)]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=49083#p49083" />
			<content type="html"><![CDATA[<p>Я для себя&nbsp; делал через whoami без всплывающих окон</p><div class="codebox"><pre><code>
Function CheckPerms4(perms)
	on error resume next
	CheckPerms4=true
	Const admin=&quot;S-1-5-32-544&quot;
	Const elevated=&quot;S-1-16-12288&quot;
	Set fso = CreateObject(&quot;Scripting.Filesystemobject&quot;)
	Set WshShell = CreateObject(&quot;Wscript.Shell&quot;)
	Set RExp = CreateObject(&quot;VBScript.RegExp&quot;)
	temp_file=fso.GetSpecialFolder(0)&amp;&quot;\&quot;&amp;fso.GetTempName
	ret=WshShell.Run(&quot;cmd /c whoami /groups &gt;&quot;&quot;&quot;&amp;temp_file&amp;&quot;&quot;&quot;&quot;,0,true)
	RExp.Global=True
	Select Case UCase(perms)
	Case &quot;ADMIN&quot;
		RExp.Pattern=admin
	Case &quot;ELEVATED&quot;
		RExp.Pattern=elevated
	End Select
	CheckPerms4=RExp.Test(fso.OpenTextFile(temp_file).ReadAll)
	fso.DeleteFile temp_file
	Set fso = Nothing
	Set WshShell = Nothing
	Set RExp = Nothing
	on error goto 0
End Function</code></pre></div>]]></content>
			<author>
				<name><![CDATA[Alexey]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=2696</uri>
			</author>
			<updated>2011-06-11T05:27:25Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=49083#p49083</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBS: WMI & UAC (определение прав)]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=49076#p49076" />
			<content type="html"><![CDATA[<p><strong>Dmitrii</strong><br /></p><div class="quotebox"><cite>Dmitrii пишет:</cite><blockquote><p>Коль скоро механизм реализации Вам безразличен, то, возможно, имеет смысл задействовать (для решения исходной задачи) WinAPI.</p></blockquote></div><p>Нет нет, я рассматриваю только скриптовые варианты. API вызвать проблем нет и код я написать могу и с сишного кода в VB-ный конвертнуть могу, но просто не эстетично как то. ) Решил остановиться на проверке версии ОС и под Windows 7 и Vista просто проверять значение в реестре. Думаю этого вполне будет достаточно. ) </p><p><strong>Dmitrii</strong>, <strong>Rom5</strong> Благодарю за информацию. )</p>]]></content>
			<author>
				<name><![CDATA[Xameleon]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=8836</uri>
			</author>
			<updated>2011-06-10T20:07:03Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=49076#p49076</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBS: WMI & UAC (определение прав)]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=49075#p49075" />
			<content type="html"><![CDATA[<p><a href="http://www.itwriting.com/blog/198-c-code-to-detect-uac-elevation-on-vista.html">http://www.itwriting.com/blog/198-c-cod … vista.html</a> C# code to detect UAC elevation on Vista</p><p>Нагуглил пример на C#, мол, определяющего наличие повышения прав процесса. Может пригодится...</p>]]></content>
			<author>
				<name><![CDATA[Rom5]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=5724</uri>
			</author>
			<updated>2011-06-10T19:19:59Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=49075#p49075</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBS: WMI & UAC (определение прав)]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=49072#p49072" />
			<content type="html"><![CDATA[<p>Порывшись в MSDN нашёл следующее:<br /></p><div class="quotebox"><blockquote><p>Scripts <strong><span style="color: red">cannot determine programmatically</span> whether they are running under a standard user security token or an Administrator token</strong>. The script may fail with an access denied error. <strong>If the <span style="color: green">script</span> requires administrator privileges, then it <span style="color: green">must be run in the elevated mode</span></strong>.</p></blockquote></div><p>Иными словами, надо решать не задачу определения уровня привилегий, а задачу запуска процесса с заведомого достаточными привилегиями.<br />Впрочем, здесь речь о сценариях. Коль скоро механизм реализации Вам безразличен, то, возможно, имеет смысл задействовать (для решения исходной задачи) WinAPI.</p>]]></content>
			<author>
				<name><![CDATA[Dmitrii]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=13351</uri>
			</author>
			<updated>2011-06-10T18:38:47Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=49072#p49072</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBS: WMI & UAC (определение прав)]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=49065#p49065" />
			<content type="html"><![CDATA[<p><strong>Dmitrii</strong>, на самом деле для меня не столь важно каким способом, лишь бы не было посторонник моргающих окон. А уж WMI или не WMI особой роли не играет. В том примере о котором я говорил - <a href="http://csi-windows.com/toolkit/ifuserperms">http://csi-windows.com/toolkit/ifuserperms</a> появляется чёрное окно, т.к запускается консоль и выполняется программа <strong>whomai</strong>. Пробывал с невидимой консолью это делать. Неудобно.</p><p>Подумываю о том, чтобы в том же примере сделать Run с параметром скрытия приложения, вместо Exec, а из команды возвращать errorlevel. Или как то так. Но пока не особо получается.</p>]]></content>
			<author>
				<name><![CDATA[Xameleon]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=8836</uri>
			</author>
			<updated>2011-06-10T13:55:08Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=49065#p49065</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBS: WMI & UAC (определение прав)]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=49064#p49064" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>Xameleon пишет:</cite><blockquote><p>... Именно !..</p></blockquote></div><p>С этим проблемы имеются (речь, разумеется, о WMI-реализации)?</p>]]></content>
			<author>
				<name><![CDATA[Dmitrii]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=13351</uri>
			</author>
			<updated>2011-06-10T13:47:28Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=49064#p49064</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBS: WMI & UAC (определение прав)]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=49063#p49063" />
			<content type="html"><![CDATA[<p><strong>2 Dmitrii:</strong><br /></p><div class="quotebox"><cite>Dmitrii пишет:</cite><blockquote><p><strong>Xameleon</strong>, только с помощью WMI Вы, скорее всего, не сможете решить указанную задачу.</p></blockquote></div><p>А жаль..</p><div class="quotebox"><cite>Dmitrii пишет:</cite><blockquote><p>Кстати, думается, что надо интересоваться уровнем привилегий не текущего пользователя системы, а пользователя, от имени которого запущен процесс установки приложения.</p></blockquote></div><p>Именно ! <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" /></p><p>Я думал попробывать какими нибудь косвенными способами определить включеный UAC, но пока найденые варианты не устраивают.</p>]]></content>
			<author>
				<name><![CDATA[Xameleon]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=8836</uri>
			</author>
			<updated>2011-06-10T13:32:55Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=49063#p49063</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBS: WMI & UAC (определение прав)]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=49062#p49062" />
			<content type="html"><![CDATA[<p><strong>Xameleon</strong>, только с помощью WMI Вы, скорее всего, не сможете решить указанную задачу.<br />Кстати, думается, что надо интересоваться уровнем привилегий не текущего пользователя системы, а пользователя, от имени которого запущен процесс установки приложения.</p><p><strong>Felix Faria</strong>, вариант с использованием класса <span style="color: blue">Win32_NetworkLoginProfile</span> никак не подходит. Например, моя &quot;учётка&quot; входит в группу локальных администраторов, но уровень привилегий идентифицируется как пользовательский.</p>]]></content>
			<author>
				<name><![CDATA[Dmitrii]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=13351</uri>
			</author>
			<updated>2011-06-10T13:11:34Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=49062#p49062</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBS: WMI & UAC (определение прав)]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=49061#p49061" />
			<content type="html"><![CDATA[<p><strong>2 Felix Faria</strong> Вы не понимаете о чём я спрашиваю ? Я говорю об определении необходимости повышения прав запуска - UAC Elevation. Вы же упорно скидываете примеры и ссылки на определение пренадлежности пользователя разным группам ? Вы с Windows 7 знакомы ? Пользователь может быть администратором на компьютере, но при включенном UAC получать запрос на разрешение внесения изменений в компьютере при запуске приложения.</p>]]></content>
			<author>
				<name><![CDATA[Xameleon]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=8836</uri>
			</author>
			<updated>2011-06-10T13:03:08Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=49061#p49061</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBS: WMI & UAC (определение прав)]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=49060#p49060" />
			<content type="html"><![CDATA[<p><strong>2 Xameleon:</strong> Всё-таки есть решение через WMI. Надеюсь, это то, что вам нужно:<br /></p><div class="codebox"><pre><code>Set objService = GetObject(&quot;winmgmts:{impersonationLevel=impersonate}!\\.\root\CIMV2&quot;)
For Each objOS In objService.ExecQuery(&quot;SELECT * FROM Win32_NetworkLoginProfile&quot;)
	If (objOS.UserType=&quot;Normal Account&quot;) Then
		If (objOS.Privileges=2) Then
			WScript.Echo objOS.Caption&amp;&quot; is Administrator&quot;
		ElseIf (objOS.Privileges=1) Then 
			WScript.Echo objOS.Caption&amp;&quot; is User&quot;
		Else 
			WScript.Echo objOS.Caption&amp;&quot; is Guest&quot;
		End If 
	End If 
Next</code></pre></div><p>Справка <a href="http://msdn.microsoft.com/en-us/library/aa394221(v=vs.85).aspx">здесь</a>.</p>]]></content>
			<author>
				<name><![CDATA[Felix Faria]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=25783</uri>
			</author>
			<updated>2011-06-10T11:10:58Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=49060#p49060</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBS: WMI & UAC (определение прав)]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=49059#p49059" />
			<content type="html"><![CDATA[<p><strong>2 Felix Faria:</strong> Обе ссылки бесполезны. К UAC не имеют отношения. <br />1) На моей русскоязычной системе не выполняется скрипт, т.к у меня нет группы Administrators, а есть Администраторы. Но даже исправление не даёт определить - включен UAC или нет, а только лишь определить - входит ли user в группу администраторов или нет.<br />2) Вторая ссылка даёт информацию только о пренадлежности пользователя к группам. </p><p>Всё это я так же уже видел... И к сожалению ни чем это не помогло. Пробывал читать через реестр, но этот способ плох тем, что не чётко идентифицирует состояние UAC, т.к значение может быть заблокировано от чтения, либо изменено вручную, а перезагрузка системы не произведена.<br /></p><div class="codebox"><pre><code>
Function GetUACState()
    On Error Resume Next
    GetUACState = 0
    GetUACState = WshShell.RegRead(&quot;HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System\EnableLUA&quot;)
End Function</code></pre></div><p><strong>2 abasov:</strong> Вообще не понял смысл этих действий. <img src="//forum.script-coding.com/img/smilies/neutral.png" width="15" height="15" /> Что это даёт ?</p>]]></content>
			<author>
				<name><![CDATA[Xameleon]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=8836</uri>
			</author>
			<updated>2011-06-10T10:56:27Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=49059#p49059</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBS: WMI & UAC (определение прав)]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=49057#p49057" />
			<content type="html"><![CDATA[<p>Я так проверяю:</p><div class="codebox"><pre><code>regread(&quot;HKEY_USERS\S-1-5-19\Environment\TEMP&quot;)
If InStr(val,&quot;Temp&quot;) Then
&#039;...есть
Else 
&#039;...нет
End If</code></pre></div><p>батником:<br /></p><div class="codebox"><pre><code>@echo off
setlocal enableextensions enabledelayedexpansion

call :IsAdminTest IsAdmin

echo IsAdmin=%IsAdmin%

endlocal
exit /b 0

:IsAdminTest
    setlocal enableextensions enabledelayedexpansion
    
    &quot;%systemroot%\system32\reg.exe&quot; query &quot;HKU\S-1-5-19&quot; 1&gt;nul 2&gt;nul &amp;&amp; set IsAdmin=1 || set IsAdmin=0
    
    endlocal &amp; set /a %~1=%IsAdmin%
    exit /b 0</code></pre></div>]]></content>
			<author>
				<name><![CDATA[abasov]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=5104</uri>
			</author>
			<updated>2011-06-10T10:21:26Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=49057#p49057</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBS: WMI & UAC (определение прав)]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=49055#p49055" />
			<content type="html"><![CDATA[<p>Ещё вот нашёл, сам думал нечто подобное использовать. Вдруг сойдет:<br /><a href="http://stackoverflow.com/questions/301860/best-way-to-know-if-a-user-has-administrative-privileges-from-a-vbscript">http://stackoverflow.com/questions/3018 … a-vbscript</a></p><p>Из WMI про учётную запись нашёл только это: <a href="http://msdn.microsoft.com/en-us/library/aa394507(v=vs.85).aspx">http://msdn.microsoft.com/en-us/library … s.85).aspx</a>, хотя я не разобрался, есть ли тут в свойствах параметр, показывающий наличие соответствующих прав.</p>]]></content>
			<author>
				<name><![CDATA[Felix Faria]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=25783</uri>
			</author>
			<updated>2011-06-10T09:19:41Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=49055#p49055</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBS: WMI & UAC (определение прав)]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=49054#p49054" />
			<content type="html"><![CDATA[<p><strong>2 Felix Faria:</strong> Благодарю <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" />. Я про неё знаю, но мне всё же хотелось бы сделать это через WMI или какой либо другой объект, без появления посторонних окон. Вариант со скрытой консолью тоже не подошёл.</p>]]></content>
			<author>
				<name><![CDATA[Xameleon]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=8836</uri>
			</author>
			<updated>2011-06-10T09:17:17Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=49054#p49054</id>
		</entry>
</feed>
