
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[216.73.216.207] |
![]() |
|
Сообщ.
#1
,
|
|
|
Здравствуйте
![]() Я сделал запрет вот таким образом: ![]() ![]() PSECURITY_DESCRIPTOR pSD; PSID pSID; PACL pDACL; ULONG lErr = GetNamedSecurityInfo( "C:\\Test\\Test.txt", SE_FILE_OBJECT, DACL_SECURITY_INFORMATION, &pSID, NULL, &pDACL, NULL, &pSD); if(lErr != ERROR_SUCCESS) ShowMessage("ERORR"); SetNamedSecurityInfo( "C:\\Test\\Tost.txt", SE_FILE_OBJECT, DACL_SECURITY_INFORMATION, pSID, NULL, pDACL, NULL); Файл Test запрещен всем. Все работает, но не таскать же мне этот файл как шаблон. Если бы я мог знать значения двух этих структур... |
Сообщ.
#2
,
|
|
|
Люди....Вообще ни кто не знает
![]() ![]() |
Сообщ.
#3
,
|
|
|
http://msdn.microsoft.com/ru-ru/library/ms717798 - пример создания структуры DACL, все что тебе нужно - модифицировать функцию под свои нужды.
http://msdn.microsoft.com/ru-ru/library/aa446595.aspx - пример создания SECURITY_DESCRIPTOR структуры, которая включает в себя DACL, можешь создать новый или модифицировать существующий. Плюс если будет разработка под Windows старше XP - можно ещё Windows Integrity Mechanism использовать, описание - http://msdn.microsoft.com/ru-ru/library/bb625963.aspx |
Сообщ.
#4
,
|
|
|
Спасибо большое за направление
![]() |
Сообщ.
#5
,
|
|
|
есть ещё стандартные утилиты для модификации прав доступа: cacls.exe - на XP и icacls.exe на Vista/7
|
Сообщ.
#6
,
|
|
|
Спасибо за информацию, но эта прога будет работать как на ХР, так и на семерке, так что надо сделать универсальную).А еще в дополнение - нашел на форумах вот такую инфу - можно написать драйвер фильтр фс. Если не сложно можете объяснить будет ли он лучше и вообще есть ли смысл в этом направлении двигаться. Просто хочется разобраться в этом вопросе как можно глубже.
|
Сообщ.
#7
,
|
|
|
если есть желание и время стоит. чем ниже установлена система защиты, тем сложнее ее обойти, однако поддержка и разработка кода, основанного на стандартных механизмах системы, проще, чем разработка собственного драйвера фильтра файловой системы.
|
Сообщ.
#8
,
|
|
|
Что-то не могу сообразить
![]() ![]() ![]() ![]() DWORD dwRes, dwDisposition; PSID pEveryoneSID = NULL, pAdminSID = NULL; PACL pACL = NULL; PSECURITY_DESCRIPTOR pSD = NULL; EXPLICIT_ACCESS ea[2]; SID_IDENTIFIER_AUTHORITY SIDAuthWorld = SECURITY_WORLD_SID_AUTHORITY; SID_IDENTIFIER_AUTHORITY SIDAuthNT = SECURITY_NT_AUTHORITY; SECURITY_ATTRIBUTES sa; LONG lRes; HKEY hkSub = NULL; // Create a well-known SID for the Everyone group. if(!AllocateAndInitializeSid(&SIDAuthWorld, 1, SECURITY_WORLD_RID, 0, 0, 0, 0, 0, 0, 0, &pEveryoneSID)) { ShowMessage("AllocateAndInitializeSid Error %u\n"); goto Cleanup; } // Initialize an EXPLICIT_ACCESS structure for an ACE. // The ACE will allow Everyone read access to the key. ZeroMemory(&ea, 2 * sizeof(EXPLICIT_ACCESS)); ea[0].grfAccessPermissions = FILE_ALL_ACCESS ; ea[0].grfAccessMode = SET_ACCESS; ea[0].grfInheritance= NO_INHERITANCE; ea[0].Trustee.TrusteeForm = TRUSTEE_IS_SID; ea[0].Trustee.TrusteeType = TRUSTEE_IS_WELL_KNOWN_GROUP; ea[0].Trustee.ptstrName = (LPTSTR) pEveryoneSID; // Create a SID for the BUILTIN\Administrators group. if(!AllocateAndInitializeSid(&SIDAuthWorld, 1, SECURITY_WORLD_RID, 0, 0, 0, 0, 0, 0, 0, &pEveryoneSID)) { ShowMessage("AllocateAndInitializeSid Error %u\n"); goto Cleanup; } // Initialize an EXPLICIT_ACCESS structure for an ACE. // The ACE will allow the Administrators group full access to // the key. ea[1].grfAccessPermissions = NULL ; ea[1].grfAccessMode = SET_ACCESS; ea[1].grfInheritance= NO_INHERITANCE; ea[1].Trustee.TrusteeForm = TRUSTEE_IS_SID; ea[1].Trustee.TrusteeType = TRUSTEE_IS_WELL_KNOWN_GROUP; ea[1].Trustee.ptstrName = (LPTSTR) pEveryoneSID; // Create a new ACL that contains the new ACEs. dwRes = SetEntriesInAcl(2, ea, NULL, &pACL); if (ERROR_SUCCESS != dwRes) { ShowMessage("SetEntriesInAcl Error %u\n"); goto Cleanup; } Cleanup:; SetNamedSecurityInfo( "C:\\Test\\Test.txt", SE_FILE_OBJECT, DACL_SECURITY_INFORMATION, pEveryoneSID , NULL, pACL, NULL); |
Сообщ.
#9
,
|
|
|
![]() ![]() ea[0].grfAccessPermissions = FILE_ALL_ACCESS ; ea[0].grfAccessMode = DENY_ACCESS; ea[0].grfInheritance= NO_INHERITANCE; ea[0].Trustee.TrusteeForm = TRUSTEE_IS_SID; ea[0].Trustee.TrusteeType = TRUSTEE_IS_WELL_KNOWN_GROUP; ea[0].Trustee.ptstrName = (LPTSTR) pEveryoneSID; попробуй так |
Сообщ.
#10
,
|
|
|
Спасибо тебе большое за помощь. Все получилось. Тему можно закрыть.
|
Сообщ.
#11
,
|
|
|
на будущее, чтобы напрямую с структурами не возиться можешь использовать функции: AddAccessDeniedAce(Ex), AddAccessAllowedAce(Ex)
|
Сообщ.
#12
,
|
|
|
Возник вопрос. Видимо я что то не понимаю, но если делать так:
![]() ![]() PSECURITY_DESCRIPTOR pSD; PACL pDACL, pDACL2, pDACL3; ULONG lErr = GetNamedSecurityInfo(TEXT("C:\\123\\111.rtf"), SE_FILE_OBJECT, DACL_SECURITY_INFORMATION, NULL, NULL, &pDACL, NULL, &pSD); SetNamedSecurityInfo( "C:\\123\\111.rtf", SE_FILE_OBJECT, DACL_SECURITY_INFORMATION, NULL , NULL, pDACL, NULL); lErr = GetNamedSecurityInfo(TEXT("C:\\123\\111.rtf"), SE_FILE_OBJECT, DACL_SECURITY_INFORMATION, NULL, NULL, &pDACL2, NULL, &pSD1); if (lErr != ERROR_SUCCESS) ShowMessage("fale"); if(&pDACL == &pDACL2) ShowMessage("vse ok"); else ShowMessage(":("); то pDACl и pDACL2 не равны. Почему так происходит? Ведь они должны быть одинаковые. В чем я не прав? |
Сообщ.
#13
,
|
|
|
Sorry за оффтоп
А кто-нибудь работал с директориями типа $Extend ? Есть смысл пытаться или "овчинка выделки не стоит" ? |
![]() |
Сообщ.
#14
,
|
|
Мыщъх отсылает к Linux-NTFS Project. Правда, предупреждает о некоторых ошибках.
|
Сообщ.
#15
,
|
|
|
Цитата Qraizer @ Мыщъх отсылает к Linux-NTFS Project. Правда, предупреждает о некоторых ошибках. Это я заню. Более того работаю с ними, но только на уровне чтения (из юзер мод) Под версиями ниже Висты возможна и запись (из юзер мод) Меня интересует вопрос: возможно ли там (пусть мы драйвер) хранить данные, не испортив систему ? Если да, то насколько это сложно или как в обычной директории ? --- Спрашиваю потому, что надо заранее оценить трудозатраты. А если у меня получилось один раз на моей машине, то это вовсе не означает, что так будет везде ![]() Добавлено Цитата Riply @ Меня интересует вопрос: возможно ли там (пусть мы драйвер) хранить данные, не испортив систему ? Если да, то с какими именно |
![]() |
Сообщ.
#16
,
|
|
А зачем $Extend? Чем EAs, reparse points или file's streams не подходит, раз уж хочется скрыться?
|
Сообщ.
#17
,
|
|
|
Цитата Qraizer @ А зачем $Extend? Чем EAs, reparse points или file's streams не подходит, раз уж хочется скрыться? Заказчик - барин ![]() |
Сообщ.
#18
,
|
|
|
Т.е. мой вопрос был проигнорирован???
|
Сообщ.
#19
,
|
|
|
The ACL structure is to be treated as though it were opaque and applications are not to attempt to work with its members directly. To ensure that ACLs are semantically correct, applications can use the functions listed in the See Also section to create and manipulate ACLs.
MSDN полезен бывает, работать с этими структурами напрямую нельзя. Как вариант - пройтись по всем ACE в DACL и сравнивать права для каждого сида. |
Сообщ.
#20
,
|
|
|
Я пытаюсь идти от обратного и хочу получить через функцию GetExplicitEntriesFromAcl структуру EXPLICIT_ACCESS, что бы из нее получить значение grfAccessMode, но когда я вызываю функцию GetExplicitEntriesFromAcl возникает ошибка
![]() |
Сообщ.
#21
,
|
|
|
это и есть то, что я советовал. Но какая ошибка вылетает, я же не телепат, мысли читать не умею=)
|
Сообщ.
#22
,
|
|
|
вот так я делаю:
![]() ![]() EXPLICIT_ACCESS *pListOfExplicitEntries; PULONG pcCountOfExplicitEntries; dwRes = GetExplicitEntriesFromAcl( pACL, pcCountOfExplicitEntries , &pListOfExplicitEntries); if(ERROR_SUCCESS != dwRes) ShowMessage("no"); Компилируется все отлично, но при работе этого кода вылезает ошибка: http://pixs.ru/showimage/SnimokPNG_3573334_2089894.png |
Сообщ.
#23
,
|
|
|
![]() ![]() PEXPLICIT_ACCESS pListOfExplicitEntries = NULL; ULONG uCountOfExplicitEntries = 0; dwRes = GetExplicitEntriesFromAcl( pACL, &uCountOfExplicitEntries , &pListOfExplicitEntries); if(ERROR_SUCCESS != dwRes) ShowMessage("no"); Пробуй так |
Сообщ.
#24
,
|
|
|
Ура!!!:)Все заработало!Большое спасибо.
|