<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Серый форум &mdash; JS:WMI работа с реестром]]></title>
	<link rel="self" href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=7786&amp;type=atom" />
	<updated>2012-11-21T10:40:54Z</updated>
	<generator>PunBB</generator>
	<id>https://forum.script-coding.com/viewtopic.php?id=7786</id>
		<entry>
			<title type="html"><![CDATA[Re: JS:WMI работа с реестром]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=65919#p65919" />
			<content type="html"><![CDATA[<p><strong>Наконец-то получилось, то что хотел!!!</strong><br /></p><div class="codebox"><pre><code>strLoc = &quot;.&quot;;                    
strName = &quot;root\\default:StdRegProv&quot;;         
SWbemServices = GetObject(&quot;WinMgmts:{impersonationLevel=Impersonate, authenticationLevel=pktPrivacy}!\\\\&quot; + strLoc + &quot;\\&quot; + strName);
objwbemInParams = SWbemServices.Methods_(&quot;CheckAccess&quot;).InParameters.SpawnInstance_();
                                    
// попытка определить входные параметры для применения метода &quot;ExecMethod_&quot;

objwbemInParams.hDefKey = HKEY_CURRENT_USER;
objwbemInParams.sSubKeyName = &quot;my\\my_param&quot;;
//objwbemInParams.lRequired = KEY_CREATE_SUB_KEY;            [b]// выдаёт ошибку, что метод не поддерживается, единственно, что непонятно[/b]

objOutParams = SWbemServices.ExecMethod_(&quot;CheckAccess&quot;, objwbemInParams);    
                                    
if(objOutParams.ReturnValue == 0)
    {
       WScript.echo(&quot;Метод \&quot;CheckAccess\&quot; исполнен успешно.&quot;);
    try
        {
        if(objOutParams.bGranted == true)
                     {
              WScript.Echo(&quot;Редактирование разрешено&quot;);
                     }
                else
                    {
                     WScript.Echo(&quot;Редактирование НЕ разрешено&quot;);
                    }
        }
    catch(e)
        {
        WScript.Echo(&quot;Ошибка определения выходного параметра&quot;);
        }
    }
else
    {
        if(objOutParams.ReturnValue == null)
        {
            WScript.echo(&quot;Не удалось исполнить метод \&quot;CheckAccess\&quot;&quot;);
        }
        else
        {
        WScript.echo(&quot;Метод \&quot;CheckAccess\&quot; исполнен с ошибкой =  &quot; + (objOutParams.ReturnValue));
        }
    }</code></pre></div>]]></content>
			<author>
				<name><![CDATA[im2002]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=28063</uri>
			</author>
			<updated>2012-11-21T10:40:54Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=65919#p65919</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: JS:WMI работа с реестром]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=65745#p65745" />
			<content type="html"><![CDATA[<p><strong>im2002</strong>, ну, да — разрешения в реестре назначаются на уровне разделов в целом, а не отдельных параметров.</p>]]></content>
			<author>
				<name><![CDATA[alexii]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=1844</uri>
			</author>
			<updated>2012-11-18T15:57:30Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=65745#p65745</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: JS:WMI работа с реестром]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=65737#p65737" />
			<content type="html"><![CDATA[<p>разобрался...<br />у меня my_param это был параметр типа DWORD, а не раздел, как я и писал в первом посте....<br />в этом всё дело, если это подраздел в разделе my, то всё работает. Спасибо всем</p>]]></content>
			<author>
				<name><![CDATA[im2002]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=28063</uri>
			</author>
			<updated>2012-11-18T13:31:19Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=65737#p65737</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: JS:WMI работа с реестром]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=65734#p65734" />
			<content type="html"><![CDATA[<div class="codebox"><pre><code>Option Explicit

Const HKEY_CURRENT_USER  = &amp;H80000001
Const KEY_CREATE_SUB_KEY = &amp;H4

Dim objSWbemObjectEx
Dim boolGranted


Set objSWbemObjectEx = GetObject(&quot;winmgmts:{impersonationLevel=impersonate}!\\.\root\default:StdRegProv&quot;)

If objSWbemObjectEx.CheckAccess(HKEY_CURRENT_USER, &quot;my\my_param&quot;, KEY_CREATE_SUB_KEY, boolGranted) = 0 Then
    If boolGranted Then
        WScript.Echo &quot;Право на создание подразделов в &quot;&quot;HKEY_CURRENT_USER\my\my_param&quot;&quot; есть.&quot;
    Else
        WScript.Echo &quot;Права на создание подразделов в &quot;&quot;HKEY_CURRENT_USER\my\my_param&quot;&quot; нет.&quot;
    End If
Else
    WScript.Echo intRes &amp; &quot;: не удалась проверка прав на создание подразделов &quot;&quot;HKEY_CURRENT_USER\my\my_param&quot;&quot;&quot;
End If

Set objSWbemObjectEx = Nothing

WScript.Quit 0</code></pre></div><div class="quotebox"><blockquote><div class="codebox"><pre><code>Право на создание подразделов в &quot;HKEY_CURRENT_USER\my\my_param&quot; есть.</code></pre></div></blockquote></div><p>Что я делаю не так?</p>]]></content>
			<author>
				<name><![CDATA[alexii]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=1844</uri>
			</author>
			<updated>2012-11-18T12:14:51Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=65734#p65734</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: JS:WMI работа с реестром]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=65733#p65733" />
			<content type="html"><![CDATA[<p>Пробовал, как советовали, с исп. метода <strong> ExecMethod_</strong></p><div class="codebox"><pre><code>strLoc = &quot;.&quot;;                            // для локального компьютера
strNet = &quot;192.168.7.2&quot;;                // для компьютера в сети
strName = &quot;root\\default:StdRegProv&quot;;     // строка для связи с классом StdRegProv пространства имён \\root\default


SWbemServices = GetObject(&quot;WinMgmts:{impersonationLevel=Impersonate, authenticationLevel=pktPrivacy}!\\\\&quot; + strNet + &quot;\\&quot; + strName);
                                       // ссылка на связь с классом StdRegProv в пространстве &quot;root\\default&quot;


objwbemInParams = SWbemServices.Methods_(&quot;CheckAccess&quot;).InParameters.SpawnInstance_();
                                    // получение объекта, содержащего входные параметры 
                                    // метода &quot;CheckAccess&quot; класса &quot;StdRegProv&quot;

// попытка определить входные параметры для применения метода &quot;ExecMethod_&quot;

objwbemInParams.hDefKey = HKEY_CURRENT_USER;
objwbemInParams.sSubKeyName = &quot;my\\my_param&quot;;

//objwbemInParams.lRequired = KEY_SET_VALUE;                 // выдаёт ошибку, что метод объектом не поддерживается
//objwbemInParams.bGranted = &quot;&quot;;                                     // выдаёт ошибку, что метод объектом не поддерживается

objOutParams = SWbemServices.ExecMethod_(&quot;CheckAccess&quot;, objwbemInParams);    // запуск 


if(objOutParams.ReturnValue == 0)
    {
        WScript.echo(&quot;Метод \&quot;CheckAccess\&quot; исполнен успешно.&quot;);
    }
else
    {
        if(objOutParams.ReturnValue == null)
        {
            WScript.echo(&quot;Не удалось исполнить метод \&quot;CheckAccess\&quot;&quot;);
        }
        else
        {
        WScript.echo(&quot;Метод \&quot;CheckAccess\&quot; исполнен с ошибкой =  &quot; + (objOutParams.ReturnValue));
        }
    }</code></pre></div><p>В итоге результат: <strong>Метод &quot;CheckAccess&quot; исполнен с ошибкой = 2</strong></p>]]></content>
			<author>
				<name><![CDATA[im2002]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=28063</uri>
			</author>
			<updated>2012-11-18T12:11:02Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=65733#p65733</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: JS:WMI работа с реестром]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=65726#p65726" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>alexii пишет:</cite><blockquote><p>Не факт, но… JScript не поддерживает передачу параметров по ссылке. Соответственно, не может вернуть изменённое значение параметра. Попробуйте использовать такой подход: <a href="http://forum.script-coding.com/viewtopic.php?id=625">JScript: вызов методов WMI с выходными параметрами</a>.</p></blockquote></div><p>Не очень разобрался в Вашей ссылке, но скопировал из статьи &quot;Рецепты WMI: работа с реестром Windows&quot; готовый код на vbs, заменив в нём свои значения:</p><div class="codebox"><pre><code>On Error Resume Next
const HKEY_CURRENT_USER = &amp;H80000001
const KEY_CREATE_SUB_KEY = &amp;H4
&#039;подключение к WMI
Set objReg = GetObject(&quot;winmgmts:{impersonationLevel=impersonate}!\\.\root\default:StdRegProv&quot;)
If Err.Number &lt;&gt; 0 Then
    WScript.Echo Err.Number &amp; &quot;: &quot; &amp; Err.Description
    WScript.Quit
End If
&#039;проверка прав на создание подразделов
intRes = objReg.CheckAccess(HKEY_CURRENT_USER, &quot;my\my_param&quot;, KEY_CREATE_SUB_KEY, bGranted)
If intRes &lt;&gt; 0 Then
    WScript.Echo intRes &amp; &quot;: не удалась проверка прав на создание подразделов &quot;&quot;HKEY_CURRENT_USER\my\my_param&quot;&quot;&quot;
    WScript.Quit
End If
&#039;вывод сообщений
If bGranted Then
    WScript.Echo &quot;Право на создание подразделов в &quot;&quot;HKEY_CURRENT_USER\my\my_param&quot;&quot; есть.&quot;
Else
    WScript.Echo &quot;Права на создание подразделов в &quot;&quot;HKEY_CURRENT_USER\my\my_param&quot;&quot; нет.&quot;
End If</code></pre></div><p>После отработки сообшение:<br /><strong>2: не удалась проверка прав на создание подразделов &quot;HKEY_CURRENT_USER\my\my_param&quot;</strong></p><p>т.е. тоже что и у меня на JS было</p>]]></content>
			<author>
				<name><![CDATA[im2002]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=28063</uri>
			</author>
			<updated>2012-11-18T09:06:30Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=65726#p65726</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: JS:WMI работа с реестром]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=65712#p65712" />
			<content type="html"><![CDATA[<div class="quotebox"><blockquote><p>Подскажите где ошибка...</p></blockquote></div><p>Не факт, но… JScript не поддерживает передачу параметров по ссылке. Соответственно, не может вернуть изменённое значение параметра. Попробуйте использовать такой подход: <a href="http://forum.script-coding.com/viewtopic.php?id=625">JScript: вызов методов WMI с выходными параметрами</a>.</p>]]></content>
			<author>
				<name><![CDATA[alexii]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=1844</uri>
			</author>
			<updated>2012-11-17T20:10:06Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=65712#p65712</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[JS:WMI работа с реестром]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=65706#p65706" />
			<content type="html"><![CDATA[<p>По материалам статьи: &quot;Рецепты WMI: работа с реестром Windows&quot; попытался написать маленький скрипт, проверяющий, можно ли изменять значения раздела реестра. Проверял и на локальной и на удалённой машине. В обоих случаях ошибка: <br /><strong>&quot;Метод &quot;CheckAccess&quot; отработал НЕ корректно. Код возврата = 2&quot;. </strong><br />в HKCU мной предварительно создан раздел &quot;my&quot; в котором создан параметр &quot;my_param&quot; типа REG_DWORD, со значением FF. </p><p>Подскажите где ошибка...</p><div class="codebox"><pre><code>KEY_SET_VALUE = 0x2;                
HKEY_CURRENT_USER = 0x80000001;

strLoc = &quot;.&quot;;                            // для локального компьютера
strNet = &quot;192.168.7.2&quot;;                // для компьютера в сети
strName = &quot;root\\default:StdRegProv&quot;;     // строка для связи с классом StdRegProv пространства имён \\root\default

bGranted = &quot;&quot;;                            // установка значения bGranted на самом деле не знаю как его определить

SWbemServices = GetObject(&quot;WinMgmts:{impersonationLevel=Impersonate, authenticationLevel=pktPrivacy}!\\\\&quot; + strNet + &quot;\\&quot; + strName);
                                      // связь с классом

ret = SWbemServices.CheckAccess(HKEY_CURRENT_USER, &quot;my\\my_param&quot;, KEY_SET_VALUE, bGranted);

if(ret == 0)
    {
    WScript.Echo(&quot;Метод \&quot;CheckAccess\&quot; отработал корректно&quot;);
    if(bGranted == true)
        {
        WScript.Echo(&quot;Значения раздела МОЖНО изменять, устанавливать или удалять&quot;);
        }
    else
        {
        WScript.Echo(&quot;Значения раздела НЕЛЬЗЯ изменять, устанавливать или удалять&quot;);
        }
    }
else
    {
    WScript.Echo(&quot;Метод \&quot;CheckAccess\&quot; отработал НЕ корректно.\nКод возврата = &quot; + ret);
    }</code></pre></div>]]></content>
			<author>
				<name><![CDATA[im2002]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=28063</uri>
			</author>
			<updated>2012-11-17T10:05:41Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=65706#p65706</id>
		</entry>
</feed>
