Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Настройка параметров COM порта  (Прочитано 11660 раз)
0 Пользователей и 3 Гостей смотрят эту тему.
Guest
Гость
« : 06-04-2004 18:34 » 

Как настроить baud, итд COM порта из KMD ?
Открыл его ZwCreateFile, а ведь GetCommState,SetComState тут не пройдут..Жаль
Как быть??
Записан
SlavaI
Главный специалист

ru
Offline Offline

« Ответ #1 : 09-04-2004 19:03 » 

IOCTL запросы для этого есть. Читай в DDK.

Код:

#define IOCTL_SERIAL_SET_BAUD_RATE      CTL_CODE)FILE_DEVICE_SERIAL_PORT, 1,METHOD_BUFFERED,FILE_ANY_ACCESS:
#define IOCTL_SERIAL_SET_QUEUE_SIZE     CTL_CODE)FILE_DEVICE_SERIAL_PORT, 2,METHOD_BUFFERED,FILE_ANY_ACCESS:
#define IOCTL_SERIAL_SET_LINE_CONTROL   CTL_CODE)FILE_DEVICE_SERIAL_PORT, 3,METHOD_BUFFERED,FILE_ANY_ACCESS:
#define IOCTL_SERIAL_SET_BREAK_ON       CTL_CODE)FILE_DEVICE_SERIAL_PORT, 4,METHOD_BUFFERED,FILE_ANY_ACCESS:
#define IOCTL_SERIAL_SET_BREAK_OFF      CTL_CODE)FILE_DEVICE_SERIAL_PORT, 5,METHOD_BUFFERED,FILE_ANY_ACCESS:
#define IOCTL_SERIAL_IMMEDIATE_CHAR     CTL_CODE)FILE_DEVICE_SERIAL_PORT, 6,METHOD_BUFFERED,FILE_ANY_ACCESS:
#define IOCTL_SERIAL_SET_TIMEOUTS       CTL_CODE)FILE_DEVICE_SERIAL_PORT, 7,METHOD_BUFFERED,FILE_ANY_ACCESS:
#define IOCTL_SERIAL_GET_TIMEOUTS       CTL_CODE)FILE_DEVICE_SERIAL_PORT, 8,METHOD_BUFFERED,FILE_ANY_ACCESS:
#define IOCTL_SERIAL_SET_DTR            CTL_CODE)FILE_DEVICE_SERIAL_PORT, 9,METHOD_BUFFERED,FILE_ANY_ACCESS:
#define IOCTL_SERIAL_CLR_DTR            CTL_CODE)FILE_DEVICE_SERIAL_PORT,10,METHOD_BUFFERED,FILE_ANY_ACCESS:
#define IOCTL_SERIAL_RESET_DEVICE       CTL_CODE)FILE_DEVICE_SERIAL_PORT,11,METHOD_BUFFERED,FILE_ANY_ACCESS:
#define IOCTL_SERIAL_SET_RTS            CTL_CODE)FILE_DEVICE_SERIAL_PORT,12,METHOD_BUFFERED,FILE_ANY_ACCESS:
#define IOCTL_SERIAL_CLR_RTS            CTL_CODE)FILE_DEVICE_SERIAL_PORT,13,METHOD_BUFFERED,FILE_ANY_ACCESS:
#define IOCTL_SERIAL_SET_XOFF           CTL_CODE)FILE_DEVICE_SERIAL_PORT,14,METHOD_BUFFERED,FILE_ANY_ACCESS:
#define IOCTL_SERIAL_SET_XON            CTL_CODE)FILE_DEVICE_SERIAL_PORT,15,METHOD_BUFFERED,FILE_ANY_ACCESS:
#define IOCTL_SERIAL_GET_WAIT_MASK      CTL_CODE)FILE_DEVICE_SERIAL_PORT,16,METHOD_BUFFERED,FILE_ANY_ACCESS:
#define IOCTL_SERIAL_SET_WAIT_MASK      CTL_CODE)FILE_DEVICE_SERIAL_PORT,17,METHOD_BUFFERED,FILE_ANY_ACCESS:
#define IOCTL_SERIAL_WAIT_ON_MASK       CTL_CODE)FILE_DEVICE_SERIAL_PORT,18,METHOD_BUFFERED,FILE_ANY_ACCESS:
#define IOCTL_SERIAL_PURGE              CTL_CODE)FILE_DEVICE_SERIAL_PORT,19,METHOD_BUFFERED,FILE_ANY_ACCESS:
#define IOCTL_SERIAL_GET_BAUD_RATE      CTL_CODE)FILE_DEVICE_SERIAL_PORT,20,METHOD_BUFFERED,FILE_ANY_ACCESS:
#define IOCTL_SERIAL_GET_LINE_CONTROL   CTL_CODE)FILE_DEVICE_SERIAL_PORT,21,METHOD_BUFFERED,FILE_ANY_ACCESS:
#define IOCTL_SERIAL_GET_CHARS          CTL_CODE)FILE_DEVICE_SERIAL_PORT,22,METHOD_BUFFERED,FILE_ANY_ACCESS:
#define IOCTL_SERIAL_SET_CHARS          CTL_CODE)FILE_DEVICE_SERIAL_PORT,23,METHOD_BUFFERED,FILE_ANY_ACCESS:
#define IOCTL_SERIAL_GET_HANDFLOW       CTL_CODE)FILE_DEVICE_SERIAL_PORT,24,METHOD_BUFFERED,FILE_ANY_ACCESS:
#define IOCTL_SERIAL_SET_HANDFLOW       CTL_CODE)FILE_DEVICE_SERIAL_PORT,25,METHOD_BUFFERED,FILE_ANY_ACCESS:
#define IOCTL_SERIAL_GET_MODEMSTATUS    CTL_CODE)FILE_DEVICE_SERIAL_PORT,26,METHOD_BUFFERED,FILE_ANY_ACCESS:
#define IOCTL_SERIAL_GET_COMMSTATUS     CTL_CODE)FILE_DEVICE_SERIAL_PORT,27,METHOD_BUFFERED,FILE_ANY_ACCESS:
#define IOCTL_SERIAL_XOFF_COUNTER       CTL_CODE)FILE_DEVICE_SERIAL_PORT,28,METHOD_BUFFERED,FILE_ANY_ACCESS:
#define IOCTL_SERIAL_GET_PROPERTIES     CTL_CODE)FILE_DEVICE_SERIAL_PORT,29,METHOD_BUFFERED,FILE_ANY_ACCESS:
#define IOCTL_SERIAL_GET_DTRRTS         CTL_CODE)FILE_DEVICE_SERIAL_PORT,30,METHOD_BUFFERED,FILE_ANY_ACCESS:

//
// Serenum reserves function codes between 128 and 255.  Do not use.
//

// begin_winioctl

#define IOCTL_SERIAL_LSRMST_INSERT      CTL_CODE)FILE_DEVICE_SERIAL_PORT,31,METHOD_BUFFERED,FILE_ANY_ACCESS:

#define IOCTL_SERENUM_EXPOSE_HARDWARE   CTL_CODE)FILE_DEVICE_SERENUM,128,METHOD_BUFFERED,FILE_ANY_ACCESS:
#define IOCTL_SERENUM_REMOVE_HARDWARE   CTL_CODE)FILE_DEVICE_SERENUM,129,METHOD_BUFFERED,FILE_ANY_ACCESS:
#define IOCTL_SERENUM_PORT_DESC         CTL_CODE)FILE_DEVICE_SERENUM,130,METHOD_BUFFERED,FILE_ANY_ACCESS:
#define IOCTL_SERENUM_GET_PORT_NAME     CTL_CODE)FILE_DEVICE_SERENUM,131,METHOD_BUFFERED,FILE_ANY_ACCESS:

// end_winioctl

#define IOCTL_SERIAL_CONFIG_SIZE        CTL_CODE)FILE_DEVICE_SERIAL_PORT,32,METHOD_BUFFERED,FILE_ANY_ACCESS:
#define IOCTL_SERIAL_GET_COMMCONFIG     CTL_CODE)FILE_DEVICE_SERIAL_PORT,33,METHOD_BUFFERED,FILE_ANY_ACCESS:
#define IOCTL_SERIAL_SET_COMMCONFIG     CTL_CODE)FILE_DEVICE_SERIAL_PORT,34,METHOD_BUFFERED,FILE_ANY_ACCESS:

#define IOCTL_SERIAL_GET_STATS          CTL_CODE)FILE_DEVICE_SERIAL_PORT,35,METHOD_BUFFERED,FILE_ANY_ACCESS:
#define IOCTL_SERIAL_CLEAR_STATS        CTL_CODE)FILE_DEVICE_SERIAL_PORT,36,METHOD_BUFFERED,FILE_ANY_ACCESS:
#define IOCTL_SERIAL_GET_MODEM_CONTROL  CTL_CODE)FILE_DEVICE_SERIAL_PORT,37,METHOD_BUFFERED,FILE_ANY_ACCESS:
#define IOCTL_SERIAL_SET_MODEM_CONTROL  CTL_CODE)FILE_DEVICE_SERIAL_PORT,38,METHOD_BUFFERED,FILE_ANY_ACCESS:
#define IOCTL_SERIAL_SET_FIFO_CONTROL   CTL_CODE)FILE_DEVICE_SERIAL_PORT,39,METHOD_BUFFERED,FILE_ANY_ACCESS:


//
// internal serial IOCTL's
//

#define IOCTL_SERIAL_INTERNAL_DO_WAIT_WAKE      CTL_CODE)FILE_DEVICE_SERIAL_PORT, 1, METHOD_BUFFERED, FILE_ANY_ACCESS:
#define IOCTL_SERIAL_INTERNAL_CANCEL_WAIT_WAKE  CTL_CODE)FILE_DEVICE_SERIAL_PORT, 2, METHOD_BUFFERED, FILE_ANY_ACCESS:
#define IOCTL_SERIAL_INTERNAL_BASIC_SETTINGS    CTL_CODE)FILE_DEVICE_SERIAL_PORT, 3, METHOD_BUFFERED, FILE_ANY_ACCESS:
#define IOCTL_SERIAL_INTERNAL_RESTORE_SETTINGS  CTL_CODE)FILE_DEVICE_SERIAL_PORT, 4, METHOD_BUFFERED, FILE_ANY_ACCESS:

Записан
Anonymous
Гость
« Ответ #2 : 13-04-2004 09:26 » 

Спасибо!
Записан
chalex
Гость
« Ответ #3 : 08-06-2004 01:32 » new

SlavaI,
Как настроить baud, итд COM порта из KMD ?
IOCTL запросы для этого есть.
А чем посылать запросы NtDeviceIoControlFile ?
Записан
SlavaI
Главный специалист

ru
Offline Offline

« Ответ #4 : 08-06-2004 11:00 » 

Цитата

А чем посылать запросы NtDeviceIoControlFile ?


Да(лучше ZwDeviceIoControlFile ) или самому создать IRP.
Записан
chalex
Гость
« Ответ #5 : 09-06-2004 01:01 » 

Спасибо. Тут ещё вопрос возник.
Открываю СОМ1
ZwCreateFile(&File_COM,
                 GENERIC_READ|GENERIC_WRITE,
                 &File_COMObj,
                 &File_COMStatus,
                 NULL,
                 FILE_ATTRIBUTE_NORMAL,
                 FILE_SHARE_WRITE | FILE_SHARE_READ,
                 FILE_OPEN,
                 FILE_SYNCHRONOUS_IO_NONALERT,
                 NULL,
                 0);
При первом обращении всё ОК, посылаю запрос и закрываю handle
ZwClose(&File_COM). Но при повторном обращении выдаёт ошибку STATUS_ACCESS_DENIED, т.е. порт занят, а почему? Ведь я его закрыл....
Записан
chalex
Гость
« Ответ #6 : 09-06-2004 01:06 » 

имеется в виду когда драйвер только загружен, а освобождается только после перезагрузки драйвера
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines