Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

OPEN_IF для секции


Страницы:   1 2 3

LightRipple ©   (2008-05-25 11:21:00) 

Здравствуйте !
Пытаюсь создавать секцию следующим образом:

InitializeObjectAttributes(@ObjectAttr, @ObjName, OBJ_CASE_INSENSITIVE, 0, nil);
Result := NtCreateSection(@hSection, SECTION_ALL_ACCESS, @ObjectAttr,
                         @SectionSize, PAGE_READWRITE, SEC_COMMIT, 0);

Все хорошо, кроме того, что если она (секция с таким же именем) уже
существует, то NtCreateSection возвращает STATUS_OBJECT_NAME_COLLISION (Object Name already exists),
что и не удивительно :), но при этом не возвращает Handle существующего объекта.
Как бы так исхитриться и заставить ее возвращать этот Handle ?
Вызывать NtOpenSection, при этой ошибке, считаю некузявым решением.
Ведь CreateFileMapping, в этом случае работает как надо.
В жизни не поверю, что она это делает через повторную попытку открытия объекта :)


Игорь Шевченко   (2008-05-25 16:15:00) [41]

LightRipple ©   (25.05.08 16:00) [7]


> Так и я там-же :). Только я указываю полный путь к объекту
> и родителя 0.
> Это что-ж получается ? Надо заводить глобальную переменную
> hBaseNamedObjects
> и во всех вызовах Nt ф-ий для секций использовать "Pareneted"
> объект ?
> Я правильно поняла ?


Да, именно так. Разборщик имени не занимается сложными выкладками и пытается создать объект с именем 'BaseNamedObjects\Foo' в корневом каталоге.


LightRipple   (2008-05-25 16:00:00) [42]

>  [6] Игорь Шевченко ©   (25.05.08 15:55)
> A CreateFileMapping создает объекты в подкаталоге BaseNamedObjects ;)

Так и я там-же :). Только я указываю полный путь к объекту и родителя 0.
Это что-ж получается ? Надо заводить глобальную переменную hBaseNamedObjects
и во всех вызовах Nt ф-ий для секций использовать "Pareneted" объект ?
Я правильно поняла ?


Игорь Шевченко   (2008-05-25 15:55:00) [43]


> А откуда там взялся "хендл RootDirectory" ?


A CreateFileMapping создает объекты в подкаталоге BaseNamedObjects ;)


LightRipple   (2008-05-25 15:42:00) [44]

Стоп.
А откуда там взялся "хендл RootDirectory" ?
Мы же вызываем с нулевым hRoot.


LightRipple   (2008-05-25 15:39:00) [45]

> [3] guav ©   (25.05.08 15:32)
> Как показывает отладчик VS2005, вот такой успешный вызов

Спасибо. Пойду изучать.


guav   (2008-05-25 15:32:00) [46]

Как показывает отладчик VS2005, вот такой успешный вызов
 CreateFileMapping(INVALID_HANDLE_VALUE,
   0,
   PAGE_READWRITE,
   0,
   4096,
   _T("Hello"));

Сводится к успешному (результат STATUS_OBJECT_NAME_EXISTS вызову ZwCreateSection с такими вот параметрами:
0x000f0007 - DesiredAccess
ObjectAttributes - содержит имя Hello и хендл RootDirectory, флаг OBJ_OPENIF, секьюрити нет.
0x00000004 - SectionPageProtection
0x08000000 - AllocationAttributes
0x00000000 - FileHandle


LightRipple   (2008-05-25 15:08:00) [47]

> [1] guav ©   (25.05.08 13:36)
> InitializeObjectAttributes(@ObjectAttr, @ObjName, OBJ_OPENIF,  0, nil);

Саш, я так пробовала.
В этом случае, она начинает ругаться совсем нецензурно:
STATUS_PRIVILEGE_NOT_HELD (A required privilege is not held by the client)

Может, надо создавать объект не с "ниловым" дескриптором безопасности ?
Но, CreateFileMapping - у, плевать на этот дескриптор. Я тоже хочу на него плевать :)


guav   (2008-05-25 13:36:00) [48]


> InitializeObjectAttributes(@ObjectAttr, @ObjName, OBJ_CASE_INSENSITIVE, 0, nil);

InitializeObjectAttributes(@ObjectAttr, @ObjName, OBJ_OPENIF,  0, nil);


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо