Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.03.28;
Скачать: CL | DM;

Вниз

MapFIle   Найти похожие ветки 

 
_наблюдатель_   (2004-01-10 21:11) [0]

Здравствуйте дорогие сотоварищи-сограждане. Есть у меня такая вот проблемка. Есть сервис, в котором используется MapFile (незнаю как по русски). Вообщем через этот MapFile он (сервис) должен общаться с разными прогами, использующими тот же MapFile. Прикол в том, что в этих прогах MapFile, после запуска сервера не создаётся, и в результате вызова CreateFileMapping возвращается не HANDLE на уже созданный MapFile, а 0 (ноль). Но ведь если код по созданию MapFile в сервисе вытащить и воткнуть в простую программу, то она (простая программа) спокойно общается с другими через этот MapFile, а вот при создании его в сервисе, ничего не выходит.
Кто знает в чём тут ошибка, помогите пожалуйста.

Вот код для создания MapFile. Может я где ошибся?

......
const MMFName="Service_Map_File";

type
 PBufDat=^TBufDat;
 TBufDat=packed record
  Operation:byte;
  Command:array [0..Max_Path] of char;
  Result:string;
 end;

var rBufDat:PBufDat=nil;
   hMapObject:THandle=0;
......
hMapObject:=CreateFileMapping(INVALID_HANDLE_VALUE, nil, PAGE_READWRITE, 0, SizeOf(TBufDat), MMFName);
if hmapobject=0 then listbox1.items.add ("Error... Create");

rBufDat:=MapViewOfFile(hMapObject, FILE_MAP_ALL_ACCESS, 0, 0, SizeOf(TBufDat));
if rbufdat=nil then listbox1.items.add ("Error... Map");
......


 
Бином Ньютоныч   (2004-01-10 22:28) [1]

>Может я где ошибся?
Во втором параметре CreateFileMapping


 
_наблюдатель_   (2004-01-11 17:54) [2]

Как я понял, надо поработать с lpSecurityDescriptor. Но чего ему указать я не понял.
Может подскажите. Просто bInheritHandle я поэкспериментировал, ничего не вышло.


 
Бином Ньютоныч   (2004-01-12 17:18) [3]

>Просто bInheritHandle я поэкспериментировал, ничего не вышло.

Из чего делаю вывод, что ты - русский, и документацию не читаешь:) Зря, однако...
SecurityDescriptor определяет, кто имеет доступ к объекту. Соответственно нужно проинициировать дескриптор, привязав к нему список SID пользователей с соответствующими масками прав. Это путь ПРАВИЛЬНЫЙ. А есть еще путь ЛЕГКИЙ: передать дескриптор с "нулевым" списком:

function GetNullDescriptor: PSecurityDescriptor;
begin
 Result:=CoTaskMemAlloc(SizeOf(TSecurityDescriptor));
 if Result = nil then Exit;
 if
   not InitializeSecurityDescriptor(Result, SECURITY_DESCRIPTOR_REVISION) or
   not SetSecurityDescriptorDacl(Result, true, nil, false)
 then
 begin
   CoTaskMemFree(Result);
   Result:=nil;
 end;
end;

и в чистом виде передаешь в функцию. Тогда к объекту будут иметь доступ все без исключения, т.е. никакой защиты не будет.


 
_наблюдатель_   (2004-01-12 21:03) [4]

Огромное вам спасибо, дорогой товарищ. Впредь будет мне уроком дочитывать всю справку до конца!



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

Текущий архив: 2004.03.28;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.023 c
3-1077176663
Michail Dalakov
2004-02-19 10:44
2004.03.28
Font в наследниках TControl при Enabled:=false


8-1069501491
Pa5ha
2003-11-22 14:44
2004.03.28
QTINTF.DLL - с чем его едят?


3-1077868874
din
2004-02-27 11:01
2004.03.28
Sql запрос


4-1073991114
Sour
2004-01-13 13:51
2004.03.28
чужой RichEdit


14-1077964876
NailMan
2004-02-28 13:41
2004.03.28
Фотки с MMP(как и обещал вчера)