Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2003.07.17;
Скачать: [xml.tar.bz2];

Вниз

SecurityDescriptor, инициализация   Найти похожие ветки 

 
hope   (2003-05-12 08:10) [0]

Привет всем.
Два приложения запускаются под разными пользователями.
Одно из них (перевое запущенное) создаёт общую область в памяти (CreateFileMapping) для обмена данными. Как выяснилось в ХП появляется проблема (отсутствует в 2000): второе приложение не может получить доступ к этой области. Ежу понятно проблема в системе защиты. Соот-но пытаюсь создать этот мепинг с общим доступом. Вот тут я и встала.
Не хочет м.. его итить отработать по-чел-ски SetEntriesInAcl вываливает 83 ошибку. Возможно ошибка закралась ранее и я чего-то не понимаю, возможно не правильно инициализирован TSIDIdentifierAuthority (я в нём очень сомневаюсь) поэтому с вашего позволения приведу код. Может быть кто-нить мне что-нить объяснит. :)
Вот код:
class procedure SecurityFuncs.CreateNewSD(const SIDAuth: TSIDIdentifierAuthority;
RIDAuth: DWORD; out SD: TSecurityDescriptor);
var
pEveryoneSID: pSid;
AclPtr: PAcl;
EA: EXPLICIT_ACCESS;
dwRes: DWord;
begin
try
AclPtr := nil;
pEveryoneSID := nil;
// Create a well-known SID for the Everyone group.
if not AllocateAndInitializeSid(SIDAuth, 1, RIDAuth, 0, 0, 0, 0, 0, 0, 0, pEveryoneSID)
then
SysFuncs.SysError;

// Initialize an EXPLICIT_ACCESS structure for an ACE.
// The ACE will allow Everyone read access to the key.
ZeroMemory(@EA, Sizeof(EXPLICIT_ACCESS));
EA.grfAccessPermissions := KEY_READ; //FILE_MAP_ALL_ACCESS; //GENERIC_ALL;
EA.grfAccessMode := SET_ACCESS;
EA.grfInheritance := NO_INHERITANCE;
EA.Trustee.TrusteeForm := TRUSTEE_IS_SID;
EA.Trustee.TrusteeType := TRUSTEE_IS_WELL_KNOWN_GROUP;
EA.Trustee.ptstrName := pEveryoneSID;

// Create a new ACL that contains the new ACEs.
dwRes := SetEntriesInAcl(1, @EA, Nil, AclPtr);
if ERROR_SUCCESS <> dwRes then
SysFuncs.SysError;

// Initialize a security descriptor.
if not InitializeSecurityDescriptor(@SD, SECURITY_DESCRIPTOR_REVISION) then
SysFuncs.SysError;
// Add the ACL to the security descriptor.
if not SetSecurityDescriptorDacl(@SD, True, AclPtr, False) then
SysFuncs.SysError;

except
if pEveryoneSID <> nil then
FreeSid(pEveryoneSID);
end;
end;

Вот вызов:
procedure CreateSecurityDescriptor;
var
SIDAuthWorld: TSIDIdentifierAuthority;
begin
ZeroMemory(@SIDAuthWorld, SizeOf(TSIDIdentifierAuthority));
SIDAuthWorld.Value[0] := 1; {SECURITY_WORLD_SID_AUTHORITY}
SecurityFuncs.CreateNewSD(SIDAuthWorld, 0 {SECURITY_WORLD_RID}, FSD);
FSa.nLength := SizeOf(FSa);
FSa.lpSecurityDescriptor := @FSD;
FSa.bInheritHandle := True;
end;


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


 
Игорь Шевченко   (2003-05-12 10:06) [1]

Ссылка на документация - Рихтер, Кларк - программирование серверных приложений для Windows 2000. Там вопросы безопасности и управление доступом к объектам очень неплохо освещены.


 
hope   (2003-05-13 02:34) [2]

Спасибо, будем искать.
Может быть Вы знаете, где есть он-лайн версия этих шедевров? :о)


 
ZZ   (2003-05-13 09:33) [3]

Скажи что ты хочешь сделать то? Дать полный доступ для всех или кому-то определенному? А может что-то другое?


 
hope   (2003-05-14 03:39) [4]

Вообще-то всё что мне нужно - это создать отображение файла в памяти без защиты, что бы оно было дуступно всем. Просто, "беззащитный" объект. Я понимаю это плохо, но пока меня это устроит.


 
hope   (2003-05-14 03:43) [5]

Господа, прошу прощения. Ручонки кривые. Всё тема закрыта. :о)


 
hope   (2003-05-15 02:01) [6]

Это снова, я - открываю тему, но с изменениями в коде.

procedure CreateSecurityDescriptor;
var
SIDAuthWorld: TSIDIdentifierAuthority;
begin
ZeroMemory(@SIDAuthWorld, SizeOf(TSIDIdentifierAuthority));
SIDAuthWorld.Value[5] := 1; {SECURITY_WORLD_SID_AUTHORITY}
SecurityFuncs.CreateNewSD(SIDAuthWorld, 0 {SECURITY_WORLD_RID}, FSD);
FSa.nLength := SizeOf(FSa);
FSa.lpSecurityDescriptor := @FSD;
FSa.bInheritHandle := True;
end;



 
ZZ   (2003-05-15 10:37) [7]

Creating a Null DACL
The following example creates a mutex with a null DACL.

If you are creating one of these objects in an application and the object will be shared with a service, you could also use a null DACL to grant everyone access. As an alternative, you could add an access-control entry (ACE) to the DACL that grants access to the user account that the service is running under. This would restrict access to the object to the service.

PSECURITY_DESCRIPTOR pSD;
SECURITY_ATTRIBUTES sa;

pSD = (PSECURITY_DESCRIPTOR) LocalAlloc(LPTR,
SECURITY_DESCRIPTOR_MIN_LENGTH);

if (pSD == NULL)
Error(...);

if (!InitializeSecurityDescriptor(pSD, SECURITY_DESCRIPTOR_REVISION))
Error(...);

// Add a null DACL to the security descriptor.
if (!SetSecurityDescriptorDacl(pSD, TRUE, (PACL) NULL, FALSE))
Error(...);

sa.nLength = sizeof(sa);
sa.lpSecurityDescriptor = pSD;
sa.bInheritHandle = TRUE;
mutex = CreateMutex(&sa, FALSE, "SOMENAME");

(c)MSDN
Так устроит?


 
hope   (2003-05-16 04:29) [8]

zz - спасибо.



Страницы: 1 вся ветка

Форум: "WinAPI";
Текущий архив: 2003.07.17;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.007 c
3-55400
Вит
2003-06-23 14:31
2003.07.17
Как в Runtime какому-нибудь MEMO FastReport-а присвоить значение


1-55517
Mihey
2003-07-02 23:26
2003.07.17
Динамические массивы. Плохо всё.


14-55762
Holy
2003-07-02 16:56
2003.07.17
Выделение и освобождение памяти.


1-55514
HardClubber
2003-07-04 14:38
2003.07.17
Нет ли у кого алгоритма считывания содержимого диска?


3-55440
Wilg
2003-06-23 11:19
2003.07.17
Архив базы данных





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский