Virtualstore что это за папка и можно ли ее удалить

Секреты Windows 7

Виртуализация приложений

Многие приложения прежних лет выпуска (и даже некоторые новые) используют для сохранения данных или файлов конфигурации папки C:\Windows и C:\Program Files. Кроме того, некоторые приложения могут пытаться выполнить запись в защищенные разделы системного реестра. Согласно концепции безопасности Windows 7 доступ к этим объектам для прикладных программ запрещен, даже если пользователь имеет учетную запись с правами администратора.

Для обеспечения работоспособности таких программ в Windows 7 используется технология виртуализации. Если приложение пытается записать файл в системный каталог (например, C:\Windows), этот запрос будет автоматически перенаправлен в папку C:\Пользователи\Имя_пользователя\AppData\Local\VirtualStore\Windows, но приложению будет казаться, что запись выполняется в папку C:\Windows. Если вы откроете папку C: \Windows в Проводнике, то сможете воспользоваться кнопкой Файлы совместимости панели инструментов для быстрого перехода в папку по указанному выше адресу.

Аналогично выполняется виртуализация при попытке приложений выполнить запись в защищенные узлы системного реестра. Так, несанкционированные попытки записи в раздел реестра HKLM\Software будут автоматически перенаправлены в раздел HKLM\Software \Classes\VirtualStore. Узнать, для каких приложений в данный момент используется режим виртуализации, можно с помощью Диспетчера задач (см. разд. 11.1).

Виртуализация не поддерживается при запуске программы в режиме администратора. В этом случае приложениям будет разрешена запись в системные папки и области реестра. Этот же результат будет получен при отключении контроля учетных записей.

Источник

990x.top

Простой компьютерный блог для души)

VirtualStore что это за папка и можно ли ее удалить?

Virtualstore что это за папка и можно ли ее удалить. 171030190845. Virtualstore что это за папка и можно ли ее удалить фото. Virtualstore что это за папка и можно ли ее удалить-171030190845. картинка Virtualstore что это за папка и можно ли ее удалить. картинка 171030190845Привет всем. Сегодня будем вести беседу о такой папке как VirtualStore, я постараюсь узнать что это за папка и можно ли ее удалить. Итак, начинаю путешествие по интернету в поисках информации. Ребята, я все узнал, даже не думал что так бывает.. Короче папка VirtualStore это типа виртуализация для приложений. Я не буду писать тут всякие термины и прочую дичь, скажу просто, что некоторые программы слишком много чего хотят. Например писать данные в очень системные папки. Винде это не очень нравится и поэтому она подсовывает папку VirtualStore, чтобы проги туда писали данные, а сами проги при этом будут думать что они пишут все таки в системные папки.

Понимаете немного? Нет? Ну ничего страшного, я сейчас более подробно обьясню. Некоторые программы хотят хранить данные свои в таких папках как Program Files, Windows.. Еще они могут захотеть внести данные в системные разделы реестра. Винде это откровенно говоря не нравится и она начинает применять технологию виртуализации (это вроде имеется ввиду UAC, но я могу ошибаться).

Как все работает? Смотрите, прога хочет писать данные например в эту папку:

Но винда тихонько перенаправит запрос записи вот сюда:

Понимаете? Прога будет думать что все пучком и она пишет данные в папку Windows, хотя как бэ это так и есть, но сама папка Windows при этом находится в папке VirtualStore..

Тоже самое касается и реестра, если прога например хочет записать данные вот сюда:

То винда тихо перенаправит все это дело сюда:

Примерно понятно, да? Вот такая наша винда умница, ну прям умная реально Virtualstore что это за папка и можно ли ее удалить. smile. Virtualstore что это за папка и можно ли ее удалить фото. Virtualstore что это за папка и можно ли ее удалить-smile. картинка Virtualstore что это за папка и можно ли ее удалить. картинка smile

Но если программу запускать от имени администратора, то эта виртуализация будет отключена. Но как по мне, то эта виртуализация, это полезная штукенция.

Так что нет ничего удивительно, если вы открыли папку VirtualStore, а внутри нее есть папки Program Files, ProgramData, Windows.. Кстати вот нашел картинку, по которой мы видим, что все это дело было даже в Windows Vista:

Virtualstore что это за папка и можно ли ее удалить. 171030192820. Virtualstore что это за папка и можно ли ее удалить фото. Virtualstore что это за папка и можно ли ее удалить-171030192820. картинка Virtualstore что это за папка и можно ли ее удалить. картинка 171030192820

Видите, на картинке открыта папка VirtualStore\Windows, а внутри папка System32, то есть работает все четко.

Ребята, нашел инфу о том, на что именно распространяется виртуализация, вот смотрите:

Virtualstore что это за папка и можно ли ее удалить. 171030193359. Virtualstore что это за папка и можно ли ее удалить фото. Virtualstore что это за папка и можно ли ее удалить-171030193359. картинка Virtualstore что это за папка и можно ли ее удалить. картинка 171030193359

Ну то есть понятно, да? Все важные места короч..

Так так… то есть вот что это за пункт Виртуализация UAC, а я то думал… вот блин. Ну короче в диспетчере если нажать правой кнопкой по какому-то процессу, то там может быть доступен этот пункт, я просто его часто видел, но так и не понимал за чем оно нужно.. вот картинка пример:

Virtualstore что это за папка и можно ли ее удалить. 171030193656. Virtualstore что это за папка и можно ли ее удалить фото. Virtualstore что это за папка и можно ли ее удалить-171030193656. картинка Virtualstore что это за папка и можно ли ее удалить. картинка 171030193656

Думаю что включать Виртуализацию UAC просто так не стоит, я никогда ее не включал, иди знай что оно потом будет….

Вот еще пример как работает виртуализация, такие программы как CyberLink, Smart View, ICE Book Reader, спокойно установились в виртуальную папку Program Files (x86):

Virtualstore что это за папка и можно ли ее удалить. 171030194150. Virtualstore что это за папка и можно ли ее удалить фото. Virtualstore что это за папка и можно ли ее удалить-171030194150. картинка Virtualstore что это за папка и можно ли ее удалить. картинка 171030194150

Также и другие программы у вас там могут быть.

Как отключить эту виртуализацию? Честно говоря не знаю. Писал чел на форуме, что он отключил ее так. Открыл панель управления, написал в правом верхнем углу слово UAC, потом слева выбрал изменение параметров и там ползунок поставил в самый низ. Это все хорошо, но насколько я помню так отключаются только уведомления UAC о вносимых изменениях.. вот даже нашел картинку где и отображена эта настройка:

Virtualstore что это за папка и можно ли ее удалить. 171030195318. Virtualstore что это за папка и можно ли ее удалить фото. Virtualstore что это за папка и можно ли ее удалить-171030195318. картинка Virtualstore что это за папка и можно ли ее удалить. картинка 171030195318

В общем можно попробовать отключить и проверить, я этого не делал. Почему? У меня папка VirtualStore пустая:

Virtualstore что это за папка и можно ли ее удалить. 171030195443. Virtualstore что это за папка и можно ли ее удалить фото. Virtualstore что это за папка и можно ли ее удалить-171030195443. картинка Virtualstore что это за папка и можно ли ее удалить. картинка 171030195443

Так, стоп! А пустая почему? Не потому ли что я отключил UAC, то есть ползунок у меня в самом низу, может поэтому? Хм, смешно, но реально похоже что все дело в том ползунке…

Если вы отключите уведомления UAC, то у вас не будут появляться и такие окошки:

Virtualstore что это за папка и можно ли ее удалить. 171030195759. Virtualstore что это за папка и можно ли ее удалить фото. Virtualstore что это за папка и можно ли ее удалить-171030195759. картинка Virtualstore что это за папка и можно ли ее удалить. картинка 171030195759

Virtualstore что это за папка и можно ли ее удалить. 171030195810. Virtualstore что это за папка и можно ли ее удалить фото. Virtualstore что это за папка и можно ли ее удалить-171030195810. картинка Virtualstore что это за папка и можно ли ее удалить. картинка 171030195810

Ну примерно такие.. С одной стороны это хорошо, они вам не будут надоедать. А безопасность? Она то станет ниже…

Теперь ребята по поводу удаления папки VirtualStore.. Я даже не знаю что вам тут сказать, ибо вроде и так все понятно. Если у вас в этой папке есть программы, файлы, то большая вероятность, что если вы удалите VirtualStore, то эти программы работать не будут. Логично ведь? Ну вот и я думаю логично.. думаю все слишком понятно….

На этом все ребята, удачи вам и чтобы вы были счастливы!

VirtualStore что это за папка и можно ли ее удалить? : 1 комментарий

Здравствуйте!
Очень доходчиво, спасибо Удалить папку VirtualStore полностью не решилась, но зато понимаю, что это такое и что можно поудалять без проблем. Это виртуальная папочка у меня весила почти 60 ГБ, так усложняла жизнь. Спасибо!

Источник

Дело в том что в сравнительно новых операционных системах система снова знает лучше программистов и пользователей где хранить данные.

Так что, если программа, которой вы пользуетесь, сохраняет данные в свою директорию (почта, сохранения игр, библиотеки) или это не дай бог делаете вы, то на самом деле там их не будет. Заботливый Windows положит их в папку «\Users\Username\AppData\Local\VirtualStore» и при обращениях программы к своей папке будет ей их оттуда подсовывать. Почти всегда это не мешает работе и практически незаметно для пользователя.

К сожалению это никак не озвучивается системой и создается полное впечатление что вы сохраняете файлы в папку программы. Если же вы решив переустановить систему или сделать бэкап данных скопируете папку программы, то данные вы не сохраните и в лучшем случае вам придется ехать за ними ещё раз, а в худшем вы их потеряете.

Так же посмотреть в этой папке полезно, если вы создали документ, сохранили его в папке программы, открываете её проводником, а своего файла не находите.

Комментарии (13)

Ах вот куда они деваются!)

Ё-моё. Только собрался на Win7 перейти. А отключить это никак нельзя?

kinall, можно.
Можно вообще отключить UAC нафиг.
Можно сменить владельца каталога на себя, вместо группы «администраторы».
Можно в редакторе политик безопасности отключить это безобразие. Правда этот вариант не работает если винда home basic, в ней вообще многие оснастки mmc не запускаются.

Но лучше по возможности избавиться от корявых программ, которые рабочие данные в Program Files пишут. Некошерно это по современным представлениям о безопасности. Винда вообще стремительным наногалопом к юниксам ползёт во многих вещах.

Cairin, если вы подробно опишите варианты того как это сделать (желательно не отключая полностью полезный вобщем-то UAC) то я буду рад добавить их в совет.

Вариант 2: (отключает VS для файлов для конкретной программы) — на нужной папке правой кнопкой мыши и свойства->безопасность->дополнительно->владелец->изменить.
Поменять владельца на себя, и на всякий случай выставить себе полный доступ, хотя обычно он после этой манипуляции уже есть.
Вариант 3: (отключает для всех программ, причём не только для файлов, но и для веток реестра): под рукой сейчас нет win7 суперпупермегаультимат, а на home basic эти политики зарезаны, поэтому русский вариант посмотреть не могу, гляньте по ссылке — там на английской версии картинки с отключением VirtualStore в редакторе политик. www.twcenter.net/forums/showthread.php?t=397636
Вариант 4: просто не ставить такие неправильные программы в Program Files, а создать для них отдельный зоопарк.

Cairin, я старомоден и предпочитаю организовывать место на жёстком диске самостоятельно, за каковую возможность Виндосу и благодарен. Верите ли — даже «Моими документами» не пользуюсь. Все на отдельном логическом диске разложено. Может, это неправильно, но уж привык как-то. И при переустановке винды данные не страдают.
А что до записи настроек и логов в свою папку — так зато можно загадить систему кучей левых программ, потом забэкапить парочку нужных, а остальные бесследно снести решительным format’ом.

В очередной раз радуюсь своем выбору операционки.

jashen, увы. Изначально в погоне за быстродействием и удобством дали возможность пользователю превращать систему в помойку. А быстро и решительно отобрать эту возможность теперь не могут, ибо хомячки взвоют. Вот и городят костыли с UAC-ами всякими, чтобы с одной стороны привести логику доступа к файлам в порядок (попробуй в *nix пользователем в /usr/bin запиши, ага), а с другой стороны сделать это максимально безболезненно и незаметно для хомячков. Но чудес не бывает, поэтому периодически вылазят грабли. «обратная совместимость», туды её в качель.

Cairin, дык это, убунта у меня )

jashen, дык я понял.
Я о том, что винду на самом деле тоже пытаются привести к человеческому виду, но поскольку взять и всё поломать не могут — получаются грабли.
Вот этот самый Virtual Store он собственно для поддержки корявых прог, которые пишут в Program Files, чего приличная программа делать не должна.

Cairin, а куда ж они должны писать? Юзерскую в смысле хрень, сейвы-бэкапы-логи, которые в аппликейшн дата пишутся, неприличная программа полезет писать в програм файлз?
Я туплю, если что. Чётвёртый час ночи-таки.

jashen, неприличная будет в Program Files гадить. Приличная будет складывать данные в профиль пользователя или (логи) штатными средствами в виндовый лог. Ровно так же, как это в бубунте и прочих никсах сделано.
И вот для того, чтобы прозрачно для пользователя переместить то, что неприличная программа нагадила в Program Files, куда ей писать вообще не положено придумали Virtual Store. Попросту вместо облома с «доступ запрещён» винда по тихому работает с Virtual Store.
В той же твоей убунте в тамошний «program files» (/usr/bin /usr/lib /usr/local/bin… ) ни одна программа данные не складывает ведь.

Ура. Я нашел свой «фантомный» проект 🙂

Источник

Можно ли удалить папку AppData в Windows 7 8.1 10 для увеличения объёма?

Virtualstore что это за папка и можно ли ее удалить. . Virtualstore что это за папка и можно ли ее удалить фото. Virtualstore что это за папка и можно ли ее удалить-. картинка Virtualstore что это за папка и можно ли ее удалить. картинка

App data папка можно ли удалить? Как вы все знаете, объём системного диска С иногда заканчивается довольно быстро, поэтому, пользователь начинает думать: — Какой бы файл удалить с системного диска, для увеличения его объёма? И оставляет свой выбор на папке AppData. «>Эту папочку удалять не рекомендуется, но, можно её немного почистить, или просто перенести папочку на другой диск вашего компьютера. Данные действия увеличат свободный объем диска С.

Что интересно, часть пользователей даже не знают, что подобная папочка вообще существует. Кроме этого, данная папка является скрытой поэтому просто так её не найти. Разумеется, Windows скрывает её не просто так, а в целях безопасности вашей системы. Иначе, если вы нечаянно удалите нужный файл, система может не запуститься.
Virtualstore что это за папка и можно ли ее удалить. appdata mozhno li udalit. Virtualstore что это за папка и можно ли ее удалить фото. Virtualstore что это за папка и можно ли ее удалить-appdata mozhno li udalit. картинка Virtualstore что это за папка и можно ли ее удалить. картинка appdata mozhno li udalit

AppData является системной папочкой, содержащей личные данные о пользователе. Во время установки различных программ в этой папочке накапливаются файлы. Как уже скачана, система скрывает папочку AppData для своей безопасности. Но, когда человек приличное время использует Windows не переустанавливая, объём раздела очень сильно возрастает, забирая свободное пространство диска С.

Как найти папочку AppData?

Теперь нужно рассмотреть местоположение папочки, как можно в неё войти и суть её структуры, чтобы нам стало ясно, что вы можете в ней деинсталлировать, а что нет.

Разумеется, сначала нам нужно произвести включение скрытых папочек. Чтобы этого добиться:

Сделано. Сейчас мы рассмотрим, как отыскать данную папочку в системе. Заходим в системный раздел и идём по адресу: Users (Пользователи – Имя пользователя);
Virtualstore что это за папка и можно ли ее удалить. nashli appdata. Virtualstore что это за папка и можно ли ее удалить фото. Virtualstore что это за папка и можно ли ее удалить-nashli appdata. картинка Virtualstore что это за папка и можно ли ее удалить. картинка nashli appdata

Важно: — Перед любыми действиями в папочке AppData и реестре обязательно создайте точку восстановления, чтобы была возможность отката в случае неумелых действий.

Что включают данные папочки?

Как удалять мусор?

Разумеется, взять и удалить папочку AppData одним махом нельзя. Windows заблокирует данное действие. Большинство программ, которые у вас на данный момент запущены, ссылаются именно на неё. Отсюда, перед проводимыми действиями с папочкой, выключите весь работающий софт (и браузеры, в том числе). Другими словами, освободите оперативку.

Будет лучше, когда вы пробежитесь по данным 3 папочкам, и удалите неиспользуемые объекты. Но, если определённая папочка не захочет, чтобы её удаляли, входим в Диспетчер задач, нажатием Esc+Shift+Ctrl и выключаем её работу (выбираем Процессы и нужный останавливаем).

Virtualstore что это за папка и можно ли ее удалить. dispetcher protsessy. Virtualstore что это за папка и можно ли ее удалить фото. Virtualstore что это за папка и можно ли ее удалить-dispetcher protsessy. картинка Virtualstore что это за папка и можно ли ее удалить. картинка dispetcher protsessy

Важно: — Не стоит что-то менять в папочке Microsoft, иначе вы можете удалить важный файл и Windows просто не запустится. Вообще, если вы сомневаетесь в необходимости удаления любого файла, оставьте его в покое.

Видео App data папка можно ли удалить

Перемещаем AppData в другой раздел

Есть возможность перенести АппДата другой раздел для освобождения объёма системного диска:

Дело сделано, теперь данная папочка находится в другом диске, а ваш системный диск значительно увеличил свободный объём!

Вывод: — Теперь на вопрос «App data папка можно ли удалить?» скажем смело, «Можно, но, не удалить, а очистить». Хотя, на наш взгляд, лучше переместить её на другой диск. В этом случае вы и лишние файлы не удалите, и значительно увеличите свободный объём диска С. При этом, в папочке Temp, как уже упоминалось, можете смело удалять все файлы, которые будут удаляться, в том числе и на диске D. Вполне возможно. Вам и не придётся проделывать все эти действия, а достаточно просто очистить папочку Теmp. Успехов!

Источник

Virtualstore что это за папка и можно ли ее удалить

У меня возникла проблема с использованием программ в Windows7. Файлы в каталоге «Programm Files» меняются независимо для разных пользователей, то есть у одного пользователя поменялся какой-нибудь файл, у другого остался старый.
Вот, что я нашел по этому поводу в интернете:

С появлением Windows Vista/Windows 7 изменились некоторые принципы и правила программирования, которые необходимо знать программисту.

Очень многие программы по-прежнему копируют свои файлы в папки Program
Files, Windows или в корень системного диска (обычно диск C:). Также программы вносят изменения в реестр, используя ветку HKLM/Software. Но в Windows 7 возникает одна проблема: файлы или значения параметров в реестре не создаются или не обновляются. В чем дело?

Итак, обычные симптомы проблем:

* ваша программа пытается писать в указанных папках или ветке реестра, но файлы там не появляются.
* вы переключаетесь на другую учетную запись и ваше приложение не может найти файлы, записанные в папках Program Files, Windows или в корне системного диска
* После отключения или включения User Account Control (UAC) ваше приложение не может найти файлы в папках Program Files или Windows

Эти проблемы возникают из-за виртуализации (UAC Virtualization). До выхода Windows Vista, обычно все работали с правами администратора и программы могли свободно переписывать системные файлы, значения в реестре и т.д. В Windows Vista принцип работы был изменен, и обычный пользователь с правами админа фактически работал уже с правами стандартного пользователя. Как это выглядело на практике.

Предположим, ваше приложение пытается внести изменения в файле C:\Program
Files\Contoso\Settings.ini, но обычный пользователь не имеет доступа к папке Program Files, и операция записи перенаправляется в файл C:\Users\Username\AppData\Local\VirtualStore\Program
Files\Contoso\settings.ini. Аналогично, если приложение пытается записать что-то в разделе реестра HKEY_LOCAL_MACHINE\Software\Contoso\, то запись перенаправляется в ветку HKEY_CURRENT_USER\Software\Classes\VirtualStore\MACHINE\Software\Contoso или
HKEY_USERS\UserSID_Classes\VirtualStore\Machine\Software\Contoso.

Как правильно вести себя в этих случаях? Виртуализация используется для совместимости с уже существующими программами. Если вы создаете свои новые программы, совместимые с Windows 7, то вам следует избегать подобных случаев. Обязательно протестируйте свои программы под правами обычного пользователя, а не под правами администратора.

Если у вас уже есть старая программа, то измените ее в соответствии с новыми требованиями. Вам необходимо:

* Удостовериться, что приложение сохраняет данные только в пользовательских папках %alluserprofile% или в папках, имеющих полный доступ (настройки ACL).
* Определить известную стандартную папку, в которую вы хотите записать данные. Данные, которыми будут пользоваться все пользователи, нужно записывать в соответствующие папки, доступные для всех. Данные для отдельного пользователя записываются в папку, доступную только этому пользователю.
* Данные (логи, настройки, сохранение в играх) нужно сохранять в папку Documents
(или указанную пользователем папку)
* Не задавайте в коде жестко прописанные пути к файлам и папкам. Используйте стандартные функции для определения корректных путей к папке Windows и других известных папок: функция System.Environment.GetFolderPath позволяет получить пути к файлам Environment.SpecialFolder.CommonApplicationData
Environment.SpecialFolder.LocalApplicationData
Environment.SpecialFolder.ApplicationData.
Также можно использовать следующие переменные среды:
%ALLUSERSPROFILE%
%LOCALAPPDATA%
%APPDATA%

Используя Проводник, найдите ваши пропавшие файлы в папке VirtualStore, которая хранит перенаправленные файлы, которые вы пытались записать в запрещенные места.
Ищите эту папку в %localappdata%\VirtualStore. Если вы не можете найти эту папку, то попробуйте команду dir %userprofile%\yourfile.dat /s /a в командной строке (обычно папка находится в C:\Users\user name\AppData\Local\VirtualStore). Также файлы могут находиться в подпапках виртуализированной папки. Если там нашлись ваши файлы, то это служит лишним доказательством, что сработал механизм UAC virtualization и вам нужно принимать меры по исправлению ситуации.

Как программно сделать, чтобы каталог стал общим для всех пользователей?

Virtualstore что это за папка и можно ли ее удалить. top. Virtualstore что это за папка и можно ли ее удалить фото. Virtualstore что это за папка и можно ли ее удалить-top. картинка Virtualstore что это за папка и можно ли ее удалить. картинка topVirtualstore что это за папка и можно ли ее удалить. down. Virtualstore что это за папка и можно ли ее удалить фото. Virtualstore что это за папка и можно ли ее удалить-down. картинка Virtualstore что это за папка и можно ли ее удалить. картинка down
RWolf © ( 2010-06-23 12:08 ) [1]

Может, всё-таки лучше использовать специально выделенные для этого каталоги? %AllUsersProfile%, %PROGRAMDATA%, %TEMP%?

Virtualstore что это за папка и можно ли ее удалить. top. Virtualstore что это за папка и можно ли ее удалить фото. Virtualstore что это за папка и можно ли ее удалить-top. картинка Virtualstore что это за папка и можно ли ее удалить. картинка topVirtualstore что это за папка и можно ли ее удалить. down. Virtualstore что это за папка и можно ли ее удалить фото. Virtualstore что это за папка и можно ли ее удалить-down. картинка Virtualstore что это за папка и можно ли ее удалить. картинка down
Dennis I. Komarov © ( 2010-06-23 12:17 ) [2]


> Как программно сделать, чтобы каталог стал общим для всех
> пользователей?

Мелкомягкие понабрали по объявлением, а терь проги крутых перцов не работают на этих недоосях.

Virtualstore что это за папка и можно ли ее удалить. top. Virtualstore что это за папка и можно ли ее удалить фото. Virtualstore что это за папка и можно ли ее удалить-top. картинка Virtualstore что это за папка и можно ли ее удалить. картинка topVirtualstore что это за папка и можно ли ее удалить. down. Virtualstore что это за папка и можно ли ее удалить фото. Virtualstore что это за папка и можно ли ее удалить-down. картинка Virtualstore что это за папка и можно ли ее удалить. картинка down
Демо © ( 2010-06-23 15:04 ) [3]

Скорее некоторые недопрограммеры не разбираются в операционных системах.

Virtualstore что это за папка и можно ли ее удалить. top. Virtualstore что это за папка и можно ли ее удалить фото. Virtualstore что это за папка и можно ли ее удалить-top. картинка Virtualstore что это за папка и можно ли ее удалить. картинка topVirtualstore что это за папка и можно ли ее удалить. down. Virtualstore что это за папка и можно ли ее удалить фото. Virtualstore что это за папка и можно ли ее удалить-down. картинка Virtualstore что это за папка и можно ли ее удалить. картинка down
KilkennyCat © ( 2010-06-23 17:15 ) [4]


> * Не задавайте в коде жестко прописанные пути к файлам и
> папкам. Используйте стандартные функции для определения
> корректных путей к папке Windows и других известных папок:
> функция System.Environment.GetFolderPath позволяет получить
> пути к файлам Environment.SpecialFolder.CommonApplicationData
> Environment.SpecialFolder.LocalApplicationData
> Environment.SpecialFolder.ApplicationData.
> Также можно использовать следующие переменные среды:
>
> %ALLUSERSPROFILE%
> %LOCALAPPDATA%
> %APPDATA%

это правило было всегда, вот только его используют не все, так что семерка не виноватая.

Ну что тут можно сказать. Не используйте тэг «код». Невозможно же читать текст с таким расстояниями между буквами!

Если кому-то интересно, то вот код для работы с правами доступа:

uses
Windows, SysUtils, AclAPI, AccCtrl, ComObj, Forms;

const
cAllUsers = «S-1-1-0»; // S-R-I-S-S пользователя «Все»

FILE_GENERIC_READ = (STANDARD_RIGHTS_READ or FILE_READ_DATA or
FILE_READ_ATTRIBUTES or FILE_READ_EA or SYNCHRONIZE);

FILE_GENERIC_WRITE = (STANDARD_RIGHTS_WRITE or FILE_WRITE_DATA or
FILE_WRITE_ATTRIBUTES or FILE_WRITE_EA or FILE_APPEND_DATA or SYNCHRONIZE);

FILE_GENERIC_EXECUTE = (STANDARD_RIGHTS_EXECUTE or FILE_READ_ATTRIBUTES or
FILE_EXECUTE or SYNCHRONIZE);

MainFileRights = FILE_GENERIC_READ or FILE_GENERIC_WRITE or FILE_GENERIC_EXECUTE;

// Проверяет имеет ли диск на котором запущена программа файловую систему NTFS
function IsNTFS: Boolean;
// Проверяет есть ли у пользователя «Все» права на запись в указанный каталог
function IsCanWriteForAllUsers(const aDir: String): Boolean;
// Делает, чтобы у пользователя «Все» были права на запись
function SetDirSecurityForAllUsers(const aDir: String): Boolean;
// Возвращает имя пользователя «Все» или другой аналог названия этого пользователя в системе
function GetAllUsersName: String;

// Проверяет может ли указанный пользователь писать в указанный каталог
function IsCanWrite(const aDir: String; aSID: PSID): Boolean;
// Проверка на то, что A входит в B
function BIncludeA(const A, B: DWORD): Boolean;
var
i: Integer;
vCurBit: DWORD;
begin
Result := True;
for i := 0 to 31 do
begin
vCurBit := 1 shl i;
if (A and vCurBit) > 0 then
begin
if (B And vCurBit) = 0 then
begin
Result := False;
Exit;
end;
end;
end;
end;

type
ACL_SIZE_INFORMATION = record
AceCount: DWORD;
AclBytesInUse: DWORD;
AclBytesFree: DWORD;
end;

_ACE_HEADER = record
AceType : BYTE;
AceFlags : BYTE;
AceSize : WORD;
end;

ACCESS_ACE = record
Header : _ACE_HEADER;
Mask : ACCESS_MASK;
SidStart : DWORD;
end;

var
i: Integer;
pDACL: PACL;
pSD: PSECURITY_DESCRIPTOR;
vRes: Cardinal;
aclInfo: ACL_SIZE_INFORMATION;
ace: ^ACCESS_ACE;
SID: PSID;
begin
Result := False;
// Получаем текущую информацию о правах доступа
vRes := GetNamedSecurityInfo(Pchar(aDir), SE_FILE_OBJECT,
DACL_SECURITY_INFORMATION, nil, nil, PACL(@pDACL), nil, pSD);
if vRes <> ERROR_SUCCESS then
Exit;

GetAclInformation(pDACL^, @aclInfo, sizeOf(aclInfo), AclSizeInformation);

// Теперь запускаем цикл перебора всех записей
for i := 0 to aclInfo.AceCount-1 do
begin
// получаем текущую запись
if not (GetAce(pDACL^, i, Pointer(ace))) then
continue;

if EqualSid(SID, aSID) then
begin
Result := BIncludeA(FILE_GENERIC_WRITE, ace^.Mask);
Exit;
end;
end;
end;

function SetFileAccessRights(AFile, AUser: String; AMask: DWORD; INHERIT:Integer): Boolean;
var
psd : PSECURITY_DESCRIPTOR;
dwSize : DWord;
bDaclPresent : Bool;
bDaclDefaulted : Bool;
OldAcl : PACL;
NewAcl : PACL;
sd : SECURITY_DESCRIPTOR;
ea : EXPLICIT_ACCESS;
begin
Result := False;
if WIN32Platform <> VER_PLATFORM_WIN32_NT then
Exit;
psd := nil;
NewAcl := nil;
bDaclDefaulted := True;
if not GetFileSecurity(PChar(AFile), DACL_SECURITY_INFORMATION, Pointer(1),
0, dwSize) and (GetLastError = ERROR_INSUFFICIENT_BUFFER) then
begin
try
psd := HeapAlloc(GetProcessHeap, 8, dwSize);
if psd <> nil then
begin
BuildExplicitAccessWithName(@ea, PChar(AUser), AMask, SET_ACCESS,INHERIT);

//GetNamedSecurityInfo(PChar(AFile), SE_FILE_OBJECT, DACL_SECURITY_INFORMATION, nil, nil, OldACL, nil, psd);
Result := GetFileSecurity(PChar(AFile), DACL_SECURITY_INFORMATION, psd, dwSize, dwSize);

Result := GetSecurityDescriptorDacl(psd, bDaclPresent, OldAcl, bDaclDefaulted);
if not Result then
Exit;
Result := (SetEntriesInAcl(1, @ea, OldAcl, NewAcl) = ERROR_SUCCESS);
if not Result then
Exit;
Result := InitializeSecurityDescriptor(@sd, SECURITY_DESCRIPTOR_REVISION);
if not Result then
Exit;
Result := SetSecurityDescriptorDacl(@sd, True, NewAcl, False);
if not Result then
Exit;
Result := SetFileSecurity(PChar(AFile), DACL_SECURITY_INFORMATION, @sd);
end;
finally
if NewAcl <> nil then
LocalFree(HLocal(NewAcl));
if psd <> nil then
HeapFree(GetProcessHeap, 0, psd);
end;
end;
end;

// Получаем имя пользователя по SID
function GetSidName(Sid : PSID; out aName: String): Boolean;
var
lpName,lpDomain : PWideChar;
cbName,cbDomain : Cardinal;
peUse : Cardinal;
begin
Result := False;
cbName:=64;
cbDomain:=64;

GetMem(lpName,cbName*SizeOf(WideChar));
GetMem(lpDomain,cbDomain*SizeOf(WideChar));
try
if not LookupAccountSidW(nil,Sid,lpName,cbName,lpDomain,cbDomain,peUse)
and (GetLastError=122) then
begin
ReAllocMem(lpName,cbName*SizeOf(WideChar));
ReAllocMem(lpDomain,cbDomain*SizeOf(WideChar));

if not LookupAccountSidW(nil,Sid,lpName,cbName,lpDomain,cbDomain,peUse) then
Exit;
end;
aName := lpName;
Result := True;
finally
FreeMem(lpName);
Freemem(lpDomain);
end;
end;

function ConvertStringSidToSidW(StringSid : PWideChar; var Sid : PSID):Boolean;stdcall;external «advapi32.dll»;

function GetAllUsersName: String;
var
vSID: PSID;
begin
vSID := nil;
try
if ConvertStringSidToSidW(cAllUsers, vSID) then
begin
if not GetSidName(vSID, Result) then
Result := «Все»;
end
else
Result := «Все»;
finally
if nil <> vSID then LocalFree(cardinal(vSID));
end;
end;

function IsNTFS: Boolean;
var
fso, drv: OleVariant;
begin
fso := CreateOleObject(«Scripting.FileSystemObject»);
drv := fso.GetDrive(fso.GetDriveName(Application.ExeName));
IsNTFS := drv.FileSystem = «NTFS»
end;

function IsCanWriteForAllUsers(const aDir: String): Boolean;
var
SID: PSID;
begin
Result := False;
if not DirectoryExists(aDir) then
Exit;

Result := IsCanWrite(aDir, Sid);
end;

function SetDirSecurityForAllUsers(const aDir: String): Boolean;
var
vUserName: String;
begin
Result := False;
if not DirectoryExists(aDir) then
Exit;

vUserName := GetAllUsersName;
Result := SetFileAccessRights(aDir, vUserName, MainFileRights, SUB_CONTAINERS_AND_OBJECTS_INHERIT);
end;

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *