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

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.034 c
3-1077723225
Domkrat
2004-02-25 18:33
2004.03.28
Работа с *.DBF


14-1077791522
Undert
2004-02-26 13:32
2004.03.28
PHP ....


9-1063008917
Orc
2003-09-08 12:15
2004.03.28
Загрузка двух и более текстур


3-1077177888
SerKom
2004-02-19 11:04
2004.03.28
Select Имя_поля As Имя1, Любая_функция(Имя1)?


3-1077710951
denmin
2004-02-25 15:09
2004.03.28
Проблема с Smalldatetime





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский