Операционная система Microsoft Windows 3.1 для программиста. Дополнительные главы


Листинг 5.12. Файл wast\wastdrv.cpp - часть 2


// ======================================================== // Функция обратного вызова WinAppStart // ======================================================== extern "C" void FAR PASCAL _export WinAppStart(WORD wVxDVersion) { if(wVxDVersion != 0x0101) return;

_fmemcpy((LPVOID)szCmd[nCmdLine], (LPVOID)szCallbackBuf, 65 + 256);

PostAppMessage(hTaskWAST, WM_STARTWINAPP, 0, (LPARAM)szCmd[nCmdLine]);

nCmdLine++; if(nCmdLine > 5) nCmdLine = 0; }

// ======================================================== // Функция RegisterTask // Регистрация приложения wast.exe // ======================================================== BOOL RegisterTask(HTASK hTask) { if(vxdApi == NULL) return FALSE;

// Устанавливаем флаг регистрации fTaskRegistered = TRUE;

// Сохраняем идентификатор окна hTaskWAST = hTask;

// Вычисляем компоненты адреса функции обратного вызова unsigned sel = SELECTOROF((LPVOID)WinAppStart); unsigned off = OFFSETOF((LPVOID)WinAppStart);

// Вычисляем компоненты адреса буфера szCallbackBuf unsigned bsel = SELECTOROF(szCallbackBuf); unsigned boff = OFFSETOF(szCallbackBuf);

// Регистрируем функцию обратного вызова и // буфер szCallbackBuf в VxD-драйвере

asm mov dx, sel asm mov cx, off asm mov si, bsel asm mov di, boff asm mov ax, vxdapiRegisterTask (*vxdApi)();

return TRUE; }

// ======================================================== // Функция UnregisterTask // Отключение VxD-драйвера // ======================================================== void UnregisterTask(VXDAPI vxdEntry) { if(vxdApi == NULL) return;

// Сбрасываем флаг регистрации fTaskRegistered = FALSE;

asm mov ax, vxdapiUnregisterTask (*vxdEntry)(); }

// ======================================================== // Функция vxdGetDeviceAPI // Получение адреса точки входа API для // VxD-драйвера, идентификатор которого // задан параметром vxd_id // ======================================================== VXDAPI vxdGetDeviceAPI(unsigned short vxd_id) { unsigned axreg, dxreg;

asm push ax asm push bx asm push di asm push es




- Начало -  - Назад -  - Вперед -



Книжный магазин