Главная страница
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.046 c
1-1078412195
Aleksandr
2004-03-04 17:56
2004.03.28
В программе некоторые потомки TList перестали добавлять объекты!


14-1078398952
juiceman
2004-03-04 14:15
2004.03.28
кодовая страница


1-1078939007
$tranger
2004-03-10 20:16
2004.03.28
Загурузка параметров из файлов, в частности INI


1-1078946762
Lena19
2004-03-10 22:26
2004.03.28
DLL точка входа не найдена


4-1073999943
dev
2004-01-13 16:19
2004.03.28
Контекстное меню в Explorer-e