Для отображения памяти на файл используются функции:
function CreateFileMapping(
hFile: THandle; // Идентификатор ранее открытого файла. Если hFile
// равен –1, то объект создается в swap-файле
lpFileMappingAttributes: PSecurityAttributes;
// Аттрибуты защиты. Для наследования аттрибутов
// вызывающего процесса можно передать NIL
flProtect, // Права на чтение-запись
dwMaximumSizeHigh, // Старшие 32 разряда размера объекта
dwMaximumSizeLow: DWORD; // Младшие 32 разряда размера объекта
lpName: PChar // Имя объекта
): THandle; stdcall;
Функция возвращает идентификатор объекта-отображения файла на память. Далее этот идентификатор надо передать функции:
function MapViewOfFile(
hFileMappingObject: THandle; // Идентификатор объекта-отображения
dwDesiredAccess: DWORD; // Тип доступа к файлу
dwFileOffsetHigh, // Старшие 32 разряда смещения в файле
dwFileOffsetLow, // Младшие 32 разряда смещения в файле
dwNumberOfBytesToMap: DWORD // Количество байт для отображения.
// Если параметр равен 0 -
// отображается весь файл
): Pointer; stdcall; // Возвращается адрес отображенного
// участка памяти
Таким образом, необходимо в каждом из процессов, нуждающихся в обмене данными при загрузке выполнить следующий код:
Code: |
type PKeyboardHookInfo = ^TKeyboardHookInfo; TKeyboardHookInfo = packed record HookHandle: THandle; end;
const UniqueHookId = 'sMyCoolKeyboardHook';
var CommonArea: PKeyboardHookInfo = NIL; Mapping : THandle = 0;
...
Mapping := CreateFileMapping(-1, NIL, PAGE_READWRITE, 0, SizeOf(CommonArea), UniqueHookId); CommonArea := MapViewOfFile(hMapping, FILE_MAP_ALL_ACCESS, 0, 0, 0); |
Просьба писать ваши замечания, наблюдения и все остальное,
что поможет улучшить предоставляемую информацию на этом сайте.
ВСЕ КОММЕНТАРИИ МОДЕРИРУЮТСЯ ВРУЧНУЮ, ТАК ЧТО СПАМИТЬ БЕСПОЛЕЗНО!