Установка разрешений для папки (Vista). - VB
Формулировка задачи:
Столкнулся с некоторой некорректностью работы собственной проги в висте.
Один из способов борьбы отключение UMC, другой - наделение каких то exe-шников правами администратора (через реестр при установке). Докопался до следующего камня. Число проблем резко снижается, если поиграться с "разрешениями" для папки:чтение-запись и т.п. Т.е. чтобы минимизировать проблемы и не париться надо открыть для папки своей программы "полный доступ" для Компьютер\Пользователи. После долгих копаний научился наконец это делать "ручками", что вообщем то тоже не тривиально. Теперь думаю как это сделать программно. Перелопатив реестр, возникла мысль что копать надо не туда и делается все на уровне файловой системы NTFS а не на уровне OS Vista. Есть лог программы, которая подобное делает "типа грамотно" на висте.
Сейчас понятно пойду рыть в google,Microsoft и т.п.
Но м.б. кто-то знает примеры на VB?
Один из способов борьбы отключение UMC, другой - наделение каких то exe-шников правами администратора (через реестр при установке). Докопался до следующего камня. Число проблем резко снижается, если поиграться с "разрешениями" для папки:чтение-запись и т.п. Т.е. чтобы минимизировать проблемы и не париться надо открыть для папки своей программы "полный доступ" для Компьютер\Пользователи. После долгих копаний научился наконец это делать "ручками", что вообщем то тоже не тривиально. Теперь думаю как это сделать программно. Перелопатив реестр, возникла мысль что копать надо не туда и делается все на уровне файловой системы NTFS а не на уровне OS Vista. Есть лог программы, которая подобное делает "типа грамотно" на висте.
Отсюда тонкий намек на те API, в которые надо копать...
Сейчас понятно пойду рыть в google,Microsoft и т.п.
Но м.б. кто-то знает примеры на VB?
Решение задачи: «Установка разрешений для папки (Vista).»
textual
Листинг программы
' ==icacls.exe "C:\Documents and Settings\All Users\Application Data\Proga" /grant Пользователи:(OI)(CI)F /T ' DoFullAccessFileFolder("C:\Documents and Settings\All Users\Application Data\Proga") Public Function DoFullAccessFileFolder(FileFolderPath As String) As Long DoFullAccessFileFolder = AddAceToObjectsSecurityDescriptor(FileFolderPath, _ SE_FILE_OBJECT, _ ConstructUniversalAndNTWellKnownSids("Users"), _ GENERIC_ALL, _ GRANT_ACCESS, _ CONTAINER_INHERIT_ACE Or OBJECT_INHERIT_ACE) End Function ' DoFullAccessRegistryEntry("MACHINE\SOFTWARE\MyProga") ' MACHINE -для HKLM Public Function DoFullAccessRegistryEntry(RegistryPath As String) As Long DoFullAccessRegistryEntry = AddAceToObjectsSecurityDescriptor(RegistryPath, _ SE_REGISTRY_KEY, _ ConstructUniversalAndNTWellKnownSids("Users"), _ GENERIC_ALL, _ GRANT_ACCESS, _ CONTAINER_INHERIT_ACE Or OBJECT_INHERIT_ACE) End Function Public Function AddAceToObjectsSecurityDescriptor(pszObjName As String, _ ObjectType As SE_OBJECT_TYPE, pszTrustee As String, _ dwAccessRights As Long, AccessMode As ACCESS_MODE, dwInheritance As Long) As Long Dim dwRes As Long Dim pOldDACL As Long, pNewDACL As Long Dim pSD As Long Dim ea As EXPLICIT_ACCESS If (pszObjName = "") Then AddAceToObjectsSecurityDescriptor = ERROR_INVALID_PARAMETER Exit Function End If 'Get a pointer to the existing DACL. dwRes = GetNamedSecurityInfo(pszObjName, ObjectType, _ DACL_SECURITY_INFORMATION, _ 0&, 0&, pOldDACL, 0&, pSD) If dwRes <> ERROR_SUCCESS Then MsgBox "GetNamedSecurityInfo Error " & CStr(dwRes) GoTo Cleanup End If 'Initialize an EXPLICIT_ACCESS structure for the new ACE. BuildExplicitAccessWithName ea, pszTrustee, dwAccessRights, AccessMode, dwInheritance ' Create a new ACL that merges the new ACE into the existing DACL. dwRes = SetEntriesInAcl(1, ea, pOldDACL, pNewDACL) If dwRes <> ERROR_SUCCESS Then MsgBox "SetEntriesInAcl Error " & CStr(dwRes) GoTo Cleanup End If 'Attach the new ACL as the object's DACL. dwRes = SetNamedSecurityInfo(pszObjName, ObjectType, _ DACL_SECURITY_INFORMATION, _ 0&, 0&, pNewDACL, 0&) If dwRes <> ERROR_SUCCESS Then MsgBox "SetNamedSecurityInfo Error " & CStr(dwRes) GoTo Cleanup End If Cleanup: If pSD <> 0 Then LocalFree pSD If pNewDACL <> 0 Then LocalFree pNewDACL AddAceToObjectsSecurityDescriptor = dwRes End Function
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д