Windows - статьи


         

и строится по определенному правилу,


Код представляет собой 32-разрядное слово и строится по определенному правилу, которое учитывает тип устройства, вид и метод доступа. Не вдаваясь в подробности, перечислим значения кодов для управления параллельным портом и их идентификаторы, принятые в Microsoft.

Идентификатор кода IOCTL Значение кода
IOCTL_IEEE1284_GET_MODE $160014
IOCTL_IEEE1284_NEGOTIATE $160018
IOCTL_PAR_GET_DEFAULT_MODES $160028
IOCTL_PAR_GET_DEVICE_CAPS $160024
IOCTL_PAR_IS_PORT_FREE $160054
IOCTL_PAR_QUERY_DEVICE_ID $16000C
IOCTL_PAR_QUERY_DEVICE_ID_SIZE $160010
IOCTL_PAR_QUERY_INFORMATION $160004
IOCTL_PAR_QUERY_LOCATION $160058
IOCTL_PAR_QUERY_RAW_DEVICE_ID $160030
IOCTL_PAR_SET_INFORMATION $160008
IOCTL_PAR_SET_READ_ADDRESS $160020
IOCTL_PAR_SET_WRITE_ADDRESS $16001C
IOCTL_SERIAL_GET_TIMEOUTS $1B001C
IOCTL_SERIAL_SET_TIMEOUTS $1B0020

Обращаю внимание читателя, что статья приготовлена для сайта Delphi, поэтому все примеры кода и т.п. приводятся на Паскале. Коды в таблице указаны в шестнадцатеричном формате (т.е. 0х160014 и т.д.).
Код IOCTL_IEEE1284_GET_MODE предназначен для формирования запроса текущего режима порта:
const IOCTL_IEEE1284_GET_MODE = $160014;
type PARCLASS_NEGOTIATION_MASK = record usReadMask: word; usWriteMask: word; end; PPARCLASS_NEGOTIATION_MASK = ^PARCLASS_NEGOTIATION_MASK;
var Mode: PARCLASS_NEGOTIATION_MASK; lpOverlapped: POverlapped; ret: DWORD;
DeviceIoControl(hLpt, IOCTL_IEEE1284_GET_MODE, nil, 0, @Mode, sizeof(PARCLASS_NEGOTIATION_MASK), ret, lpOverlapped);
Если запрос синхронный, то он выглядит так:
DeviceIoControl(hLpt, IOCTL_IEEE1284_GET_MODE, nil, 0, @Mode, sizeof(PARCLASS_NEGOTIATION_MASK), ret, nil);
@Mode - указатель на буфер, в котором драйвер возвращает текущий режим. Следующий параметр сообщает драйверу размер буфера, а параметр ret возвращает размер структуры, через которую передаются данные. Структура PARCLASS_NEGOTIATION_MASK имеет два поля: usReadMask - определяет режим работы порта при чтении, а usWriteMask - при записи.

Содержание  Назад  Вперед