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).

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

Источник

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

Так что, если программа, которой вы пользуетесь, сохраняет данные в свою директорию (почта, сохранения игр, библиотеки) или это не дай бог делаете вы, то на самом деле там их не будет. Заботливый 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… ) ни одна программа данные не складывает ведь.

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

Источник

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 ГБ, так усложняла жизнь. Спасибо!

Источник

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 не будет опубликован. Обязательные поля помечены *