<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Серый форум &mdash; JScript: Определить доступность папки - как?]]></title>
	<link rel="self" href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=8869&amp;type=atom" />
	<updated>2013-11-13T08:07:41Z</updated>
	<generator>PunBB</generator>
	<id>https://forum.script-coding.com/viewtopic.php?id=8869</id>
		<entry>
			<title type="html"><![CDATA[Re: JScript: Определить доступность папки - как?]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=77220#p77220" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>BeS Yara пишет:</cite><blockquote><p>если по науке три+ экрана кода, а костылём несколько строк</p></blockquote></div><p>Да, вынужден согласится. Костыль не устраивал по простой и дурацкой причине: одновременно работают несколько взаимосвязанных скриптов, один из которых мониторит некоторые папки. Если он фиксирует создание файла в любой из них - запускается цепочка всяких действий, в том числе и сотворяемый скрипт с проверкой папок. Т.е. рекурсия. Но, видимо, проще переписать чужой скрипт (чтобы не реагировал на создаваемые временные файлики), чем протезировать обходные пути...</p><p>Да, за пример и ссылку на xcacls - спасибо.</p>]]></content>
			<author>
				<name><![CDATA[Serge Yolkin]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27503</uri>
			</author>
			<updated>2013-11-13T08:07:41Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=77220#p77220</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: JScript: Определить доступность папки - как?]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=77215#p77215" />
			<content type="html"><![CDATA[<p>Раз с JScript плавно переключились на VBScript... <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" /><br />Можно взять за основу <a href="http://forum.script-coding.com/viewtopic.php?id=5142">Сценарий 2. Получение подробного (полного или частичного) списка управления доступом NTFS (DACL) указанного каталога текущего компьютера.</a>.<br />Дальше получаем имя пользователя и список групп в которых он состоит, и смотрим что разрешено/запрещено делать с папкой.</p><p>По быстрому соединил два в одно, правда только выводит записи из ACL по данной папке для пользователя и включающих его групп, код не полностью вычищен от оригинального текста. Но главное, это работает(как лабораторный образец), и под юзером тоже.<br /></p><div class="codebox"><pre><code>
option explicit
Dim Path
Path = &quot;c:\Windows&quot;

немного помогло и это: https://forum.sysadmins.su/index.php?showtopic=111#entry4624
Dim oNet, oUser, UserName, UserGroup
Set oNet = CreateObject(&quot;WScript.Network&quot;)
Set oUser = GetObject(&quot;WinNT://&quot; &amp; oNet.UserDomain &amp; &quot;/&quot; &amp; oNet.UserName &amp; &quot;,user&quot;)
UserName = oNet.UserName

Dim DicUsrGrp
Set DicUsrGrp = CreateObject(&quot;Scripting.Dictionary&quot;)
DicUsrGrp.CompareMode = vbTextCompare
DicUsrGrp.Add oNet.UserName, &quot;UserName&quot;

Dim oGroup
For Each oGroup In oUser.Groups
  DicUsrGrp.Add oGroup.Name, &quot;UserGroup&quot;
Next

Dim a, i
a = DicUsrGrp.Keys
For i = 0 to UBound(a)
  wscript.echo a(i)
  ChkUserRights Path, a(i)
Next

Sub ChkUserRights(Folder, UserOrGroup)
  &#039; http://forum.script-coding.com/viewtopic.php?id=5142
  Dim objShell, objFolder, strPath
  Dim objWsNet, strDomain, strComputer, blnIsDomain, intOSVersion
  Dim objWMI, objCollection, objItem, objSecSettings, objSD
  Dim strAccount, strSID, strList
  Dim intHasAccount &#039;Флаг-признак режима работы:
                    &#039;-1 - не составлять список, т.к. указанная &quot;учётка&quot; не найдена;
                    &#039;0  - составлять полный список;
                    &#039;1  - составлять частичный список (только для указанной &quot;учётки&quot;).
  intHasAccount = 1

  &#039;&gt;&gt;&gt;&gt; тут задаётся имя папки
  strPath = Folder
  &#039;&gt;&gt;&gt;&gt; тут задаётся учётка
  strAccount = UserOrGroup

  Set objWsNet = CreateObject(&quot;WScript.Network&quot;)
  strComputer = objWsNet.ComputerName
  Set objWMI = GetObject(&quot;winmgmts:{impersonationLevel=impersonate}!\\&quot; &amp; strComputer &amp; &quot;\root\cimv2&quot;)
  Set objSecSettings = objWMI.Get(&quot;Win32_LogicalFileSecuritySetting.Path=&#039;&quot; &amp; strPath &amp; &quot;&#039;&quot;)

  Set objCollection = objWMI.ExecQuery(&quot;SELECT SID FROM Win32_Account WHERE Name=&#039;&quot; &amp; strAccount &amp; &quot;&#039;&quot;)
  &#039;--- Определение SID заданной &quot;учётки&quot;
  For Each objItem In objCollection
    strSID = UCase(objItem.SID)
  Next

  If objSecSettings.GetSecurityDescriptor(objSD) = 0 Then &#039;Чтение содержимого дескриптора безопасности каталога
      strList = vbNullString
      If Not IsNull(objSD.DACL) Then &#039;Проверка наличия хотя бы одной записи в DACL каталога
          Call Get_DACLInfo(objSD.DACL, strList, intHasAccount, strSID, intOSVersion)
          If Len(strList) &gt; 0 Then
              WScript.Echo strList
          Else
              WScript.Echo &quot;В DACL не обнаружено ни одной записи для объекта &quot; &amp; UCase(strDomain &amp; &quot;\&quot; &amp; strAccount)
          End If
      Else
          WScript.Echo &quot;Список управления доступом к каталогу &quot; &amp; UCase(strPath) &amp; &quot; пуст.&quot;
      End If
  Else
      WScript.Echo &quot;Не удалось прочитать дескриптор безопасности каталога &quot; &amp; UCase(strPath)
  End If

  Set objSecSettings = Nothing
  Set objCollection = Nothing
  Set objWMI = Nothing
  Set objFolder = Nothing
  Set objShell = Nothing
End Sub
&#039;======

Function Get_DACLInfo(arrACE(), strRes, intMode, strAccSID, intVer)
Dim objEntry, strTemp, i, j, lngMask, lngTemp
Dim arrFlagValue, arrFlagName, arrGenericValue, arrGenericName
Dim arrSieveGE, arrSieveGW, arrSieveGR, arrTemp
Const PART_MODE = 1 &#039;Флаг-признак составления частичного списка
&#039;--- Значения универсальных масок
Const GENERIC_ALL = &amp;H10000000
Const GENERIC_EXECUTE = &amp;H20000000
Const GENERIC_WRITE = &amp;H40000000
Const GENERIC_READ = &amp;H80000000
&#039;------
Const ACCESS_ALLOWED_ACE_TYPE = 0 &#039;Флаг-признак записи типа &quot;РАЗРЕШЕНИЕ&quot;
Const ACCESS_DENIED_ACE_TYPE  = 1 &#039;Флаг-признак записи типа &quot;ЗАПРЕТ&quot;
Const INHERITED_ACE = 16 &#039;Флаг-признак того, что текущая запись DACL унаследована от родительского каталога
Const FULL_ACCESS = 983551 &#039;Значение маски полного разрешения или запрета
Const FLAG_SYNCHRONIZE = 1048576 &#039;Значение флага синхронизации доступа к объекту файловой системы
                                 &#039;(в версиях ОС &quot;2000/XP&quot;, применим только для записей типа &quot;РАЗРЕШЕНИЕ&quot;)

&#039;arrFlagValue = Array(&amp;H20, &amp;H1, &amp;H80, &amp;H8, &amp;H2, &amp;H4, &amp;H100, &amp;H10, &amp;H40, &amp;H10000, &amp;H20000, &amp;H40000, &amp;H80000)
arrFlagValue = Array(32, 1, 128, 8, 2, 4, 256, 16, 64, 65536, 131072, 262144, 524288)
arrFlagName = Array(&quot;Траверс папок / Выполнение файлов&quot;, _
                    &quot;Содержание папки / Чтение данных&quot;, _
                    &quot;Чтение атрибутов&quot;, _
                    &quot;Чтение дополнительных атрибутов&quot;, _
                    &quot;Создание файлов / Запись данных&quot;, _
                    &quot;Создание папок / Дозапись данных&quot;, _
                    &quot;Запись атрибутов&quot;, _
                    &quot;Запись дополнительных атрибутов&quot;, _
                    &quot;Удаление подпапок и файлов&quot;, _
                    &quot;Удаление&quot;, _
                    &quot;Чтение разрешений&quot;, _
                    &quot;Смена разрешений&quot;, _
                    &quot;Смена владельца&quot;)

arrGenericValue = Array(&amp;H20000000, &amp;H40000000, &amp;H80000000)
&#039;arrGenericValue = Array(536870912, 1073741824, 2147483648)
arrGenericName = Array(&quot;Выполнение (универсальная маска)&quot;, &quot;Запись (универсальная маска)&quot;, &quot;Чтение (универсальная маска)&quot;)
&#039;--- Вспомогательные массивы, предназначенные для детализации универсальных масок
arrSieveGE = Array(-1, 0, -1, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0)
arrSieveGW = Array(0, 0, 0, 0, -1, -1, -1, -1, 0, 0, -1, 0, 0)
arrSieveGR = Array(0, -1, -1, -1, 0, 0, 0, 0, 0, 0, -1, 0, 0)
&#039;------

&#039;--- Настройка правильного наименования одного из флагов маски доступа в зависимости от версии ОС
&#039;If intVer &lt; 60 Then
&#039;    arrFlagName(0) = &quot;Обзор папок / Выполнение файлов&quot;
&#039;End If
&#039;------
For Each objEntry In arrACE
    &#039;--- Определение режима наследования записи и области её действия
    If CBool(objEntry.AceFlags And INHERITED_ACE) Then
        strTemp = &quot; (унаследовано; &quot;
        lngTemp = objEntry.AceFlags - INHERITED_ACE
    Else
        strTemp = &quot; (не унаследовано; &quot;
        lngTemp = objEntry.AceFlags
    End If
    Select Case lngTemp
        Case 0: strTemp = strTemp &amp; &quot;действует на: только текущий каталог)&quot;
        Case 1: strTemp = strTemp &amp; &quot;действует на: текущий каталог и его файлы)&quot;
        Case 2: strTemp = strTemp &amp; &quot;действует на: текущий каталог и его подкаталоги)&quot;
        Case 3: strTemp = strTemp &amp; &quot;действует на: текущий каталог, его подкаталоги и файлы)&quot;
        Case 9: strTemp = strTemp &amp; &quot;действует на: только файлы текущего каталога)&quot;
        Case 10: strTemp = strTemp &amp; &quot;действует на: только подкаталоги текущего каталога)&quot;
        Case 11: strTemp = strTemp &amp; &quot;действует на: подкаталоги и файлы текущего каталога)&quot;
        Case Else: strTemp = strTemp &amp; &quot;область действия не определена); &quot;
    End Select
    strTemp = strTemp &amp; vbNewLine &amp; &quot;---&quot; &amp; vbNewLine
    &#039;------
    &#039;--- Определение типа записи
    If objEntry.AceType = ACCESS_ALLOWED_ACE_TYPE Then
        strTemp = strTemp &amp; &quot;РАЗРЕШЕНО:&quot; &amp; vbNewLine
    ElseIf objEntry.AceType = ACCESS_DENIED_ACE_TYPE Then
        strTemp = strTemp &amp; &quot;ЗАПРЕЩЕНО:&quot; &amp; vbNewLine
    End If
    &#039;------
    &#039;--- Определение значения маски &quot;Полный доступ&quot; в зависимости от версии ОС
    If intVer &lt; 52 Then
        lngTemp = FULL_ACCESS + Abs(objEntry.AceType - 1) * FLAG_SYNCHRONIZE
        &#039;Выражение FULL_ACCESS + Abs(objEntry.AceType - 1) * FLAG_SYNCHRONIZE
        &#039;учитывает разницу между значениями маски &quot;Полный доступ&quot; у записей разных типов
        &#039;в ОС версий &quot;2000/XP&quot;
    Else
        lngTemp = FULL_ACCESS + FLAG_SYNCHRONIZE
    End If
    &#039;------
    lngMask = objEntry.AccessMask
    Select Case Abs(lngMask)
        Case lngTemp: strTemp = strTemp &amp; &quot;Полный доступ&quot; &amp; vbNewLine
        Case GENERIC_ALL: strTemp = strTemp &amp; &quot;Полный доступ (универсальная маска)&quot; &amp; vbNewLine
        Case Else
            &#039;--- Детальный анализ маски доступа текущей записи:
            &#039;обработка универсальных масок (биты №№ 29 - 31)
            If Abs(lngMask) &gt; lngTemp Then
                For i = 0 To UBound(arrGenericValue)
                    If lngMask And arrGenericValue(i) Then
                        strTemp = strTemp &amp; arrGenericName(i) &amp; vbNewLine &amp; vbTab &amp; &quot;{&quot; &amp; vbNewLine
                        Select Case arrGenericValue(i)
                            Case GENERIC_EXECUTE: arrTemp = arrSieveGE
                            Case GENERIC_WRITE: arrTemp = arrSieveGW
                            Case GENERIC_READ: arrTemp = arrSieveGR
                        End Select
                        For j = 0 To UBound(arrTemp)
                            If arrTemp(j) Then strTemp = strTemp &amp; vbTab &amp; arrFlagName(j) &amp; vbNewLine
                        Next
                        strTemp = strTemp &amp; vbTab &amp; &quot;}&quot; &amp; vbNewLine
                    End If
                Next
            End If
            &#039;обработка обычных масок (биты №№ 0 - 20)
            For i = 0 To UBound(arrFlagValue)
                If lngMask And arrFlagValue(i) Then
                    strTemp = strTemp &amp; arrFlagName(i) &amp; vbNewLine
                End If
            Next
            &#039;------
    End Select
    strTemp = UCase(objEntry.Trustee.Domain &amp; &quot;\&quot; &amp; objEntry.Trustee.Name) &amp; strTemp &amp; &quot;===&quot; &amp; vbNewLine
    If intMode = PART_MODE Then
        If StrComp(UCase(objEntry.Trustee.SIDString), strAccSID, vbTextCompare) = 0 Then
            strRes = strRes &amp; strTemp
        End If
    Else
        strRes = strRes &amp; strTemp
    End If
Next
End Function
</code></pre></div><p>В принципе, нужно просто разобраться с флагами, обрабатываемыми при выводе разрешений, и заменить формирование отчёта на анализ доступности папки на чтение/запись для пользователя/групп. Следует иметь ввиду, что запрещающая политика имеет приоритет. Поэтому при наличии полного доступа для группы Users вместе с наличием явного запрета доступа для пользователя User(члена Users) будет обозначать именно отсутствие доступа у User к данной папке.</p><p>Упомянутый в обсуждении xcacls - штука интересная уже тем, что это не программа, а скрипт на VBS(<a href="http://support.microsoft.com/kb/825751">Использование сценария Xcacls.vbs для изменения разрешений NTFS</a>) <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" />. Так что работу с ACL можно поизучать копаясь в этом скрипте. Можно попробовать допилить его под свои нужды. Но мне кажется, что для описанной задачи гораздо проще плясать от сценария из коллекции. Как срастить с JS, это второй вопрос. Можно просто запускать его как внешнюю программу, получая назад код выхода(0 - запись разрешена, 666 - запись невозможна).</p><div class="quotebox"><cite>Serge Yolkin пишет:</cite><blockquote><p>Результат нужен не оператору, а скрипту. Перед выполнением (или невыполнением) скрипта (js) проверить папку, переданную скрипту в качестве параметра.</p></blockquote></div><p>Может тогда такие сложности лишние? Если для работы скрипта требуется создать там файл, то чем не подходит вариант с попыткой создания временного или окончательного файла с отслеживанием ошибок? &quot;По науке&quot; конечно всяко приятнее делать, но если по науке три+ экрана кода, а костылём несколько строк(при том, что через WMI явно не быстрее будет по скорости)... Тут я за KISS.</p>]]></content>
			<author>
				<name><![CDATA[BeS Yara]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=25643</uri>
			</author>
			<updated>2013-11-13T07:10:15Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=77215#p77215</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: JScript: Определить доступность папки - как?]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=77171#p77171" />
			<content type="html"><![CDATA[<p>Имеется ввиду автоматизация. Результат нужен не оператору, а скрипту. Перед выполнением (или невыполнением) скрипта (js) проверить папку, переданную скрипту в качестве параметра. По всей видимости, надо вызывать cacls и парсить StdOut. Попытки создания (с немедленным удалением) файлов - по многим причинам не устраивают. Ищу (действительно - ищу, не только жду подсказки в этом топике) &quot;мягкий&quot; способ. Для файлов всё просто: пытаемся открыть на дописывание (fso.openTextFile, IOmode=8), а для папок пока не нашёл.</p>]]></content>
			<author>
				<name><![CDATA[Serge Yolkin]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27503</uri>
			</author>
			<updated>2013-11-11T20:05:06Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=77171#p77171</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: JScript: Определить доступность папки - как?]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=77150#p77150" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>Serge Yolkin пишет:</cite><blockquote><p>...правильно ли я понял, что для cacls.exe надо парсить вывод...</p></blockquote></div><p>Какбэ... не совсем понял что имеется в виду. Если речь о переоформлении вывода cacls, то да, в остальном вывода cacls достаточно, чтобы понять кто имеет доступ к папке\файлу, а кто нет.</p>]]></content>
			<author>
				<name><![CDATA[greg zakharov]]></name>
			</author>
			<updated>2013-11-11T14:03:48Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=77150#p77150</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: JScript: Определить доступность папки - как?]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=77149#p77149" />
			<content type="html"><![CDATA[<p><strong>greg zakharov</strong>, правильно ли я понял, что для cacls.exe надо парсить вывод на предмет наличия FILE_WRITE_DATA в специальном доступе юзера?</p>]]></content>
			<author>
				<name><![CDATA[Serge Yolkin]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27503</uri>
			</author>
			<updated>2013-11-11T13:04:07Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=77149#p77149</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: JScript: Определить доступность папки - как?]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=77142#p77142" />
			<content type="html"><![CDATA[<p><strong>Serge Yolkin</strong><br /></p><div class="quotebox"><blockquote><p>...ну что ж, может, они и райтбл, но не для всякого юзера...</p></blockquote></div><p>Судя по коду, то работать оно будет только с правами администратора, если конечно последний не открыл доступ к объектам Windows простому пользователю (что равносильно созданию системной черной дыры).<br />Не проще ли использовать что-то вроде accesschk\cacls\xcacls?</p>]]></content>
			<author>
				<name><![CDATA[greg zakharov]]></name>
			</author>
			<updated>2013-11-11T09:35:46Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=77142#p77142</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: JScript: Определить доступность папки - как?]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=77112#p77112" />
			<content type="html"><![CDATA[<p><strong>JSman</strong>, спасибо, но результат несколько неожиданный:<br />1. для папок MSOCache, Program Files и Users - ложь, как и должно быть;<br />2. для папок Recovery и System Volume Information - истина, ну что ж, может, они и райтбл, но не для всякого юзера;<br />3. для $RECYCLE.BIN - истина ??? но там же файл не создаётся...</p>]]></content>
			<author>
				<name><![CDATA[Serge Yolkin]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27503</uri>
			</author>
			<updated>2013-11-09T15:43:29Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=77112#p77112</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: JScript: Определить доступность папки - как?]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=77103#p77103" />
			<content type="html"><![CDATA[<div class="codebox"><pre><code>
strComputer = &quot;.&quot;
Set objWMIService = GetObject(&quot;winmgmts:&quot; _
    &amp; &quot;{impersonationLevel=impersonate}!\\&quot; &amp; strComputer &amp; &quot;\root\cimv2&quot;)
Set colFolders = objWMIService. _
    ExecQuery(&quot;Select * from Win32_Directory where name = &#039;c:\\Scripts&#039;&quot;)
For Each objFolder in colFolders
WScript.Echo &quot;Writeable: &quot; &amp; objFolder.Writeable
Next
</code></pre></div>]]></content>
			<author>
				<name><![CDATA[JSmаn]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=24434</uri>
			</author>
			<updated>2013-11-08T21:08:34Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=77103#p77103</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: JScript: Определить доступность папки - как?]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=77102#p77102" />
			<content type="html"><![CDATA[<p><strong>BeS Yara</strong>, огромное спасибо. Жаль, сам не додумался.</p><div class="quotebox"><cite>Serge Yolkin пишет:</cite><blockquote><p>... возможность записи неинтересна ...</p></blockquote></div><p>оказывается, всё же интересна: нет ли способа проверить возможность записи в папку, не создавая там объектов, которые придётся удалять?</p>]]></content>
			<author>
				<name><![CDATA[Serge Yolkin]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27503</uri>
			</author>
			<updated>2013-11-08T20:57:18Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=77102#p77102</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: JScript: Определить доступность папки - как?]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=77067#p77067" />
			<content type="html"><![CDATA[<p>Если вопрос ставится как &quot;можно ли войти в папку?&quot;, то логичнее не пробовать создать в ней файл, а попробовать получить список файлов из данной папки. <br /></p><div class="codebox"><pre><code>
fso = new ActiveXObject(&quot;Scripting.FileSystemObject&quot;);
fld = fso.GetFolder(&#039;c:\\TMP\\2&#039;);
fc = fld.Files.Count;
</code></pre></div><p>Для пустой, но доступной папки fc будет присвоено значение 0. В случае если в папку не попасть(отсутствие прав чтения, или запрет чтения) третья строка даст RuntimeError &quot;Разрешение отклонено&quot;.</p>]]></content>
			<author>
				<name><![CDATA[BeS Yara]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=25643</uri>
			</author>
			<updated>2013-11-08T12:26:17Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=77067#p77067</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[JScript: Определить доступность папки - как?]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=77035#p77035" />
			<content type="html"><![CDATA[<p>Подробности (причины и &quot;степень&quot; недоступности) не слишком интересны. Интересует, в какие из папок (ну, например, в корне C:\) нельзя зайти двойным щелчком в проводнике. У меня это &quot;MSOCache&quot; (У вас нет разрешений на доступ к этой папке.), &quot;Recovery&quot; и &quot;System Volume Information&quot; (Расположение недоступно. Отказано в доступе.). Ничего умнее попытки создания файла в каждой папке не придумал, но в этом случае папка &quot;Program Files&quot;, например, тоже считается недоступной, а зайти в неё можно. Т.е. интересует доступность &quot;на чтение&quot;, возможность записи неинтересна. Свойства объектов Folder для FSO и ShellApplication изучил, ничего подходящего не обнаружил.</p>]]></content>
			<author>
				<name><![CDATA[Serge Yolkin]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27503</uri>
			</author>
			<updated>2013-11-07T12:51:22Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=77035#p77035</id>
		</entry>
</feed>
