Ошибка доступа к COM порту. Как устранить?
От: Logik  
Дата: 07.03.08 15:55
Оценка:
Привет!

Ситуация такая: При откратии (VCP) COM порта в ХР
Код:
CreateFile("COM4", GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_FLAG_OVERLAPPED, 0);

получаю ошибку с кодом 5 т.е. ERROR_ACCESS_DENIED.
Но если открываю тот же порт на ноутбуке все происходит без проблем и порт открывается на ура.
На ноуте нет физических COM портов и стоит SP2, на PC есть и установлены SP1. Может это влиять на доступ к порту?
4й параметер функции ( security attributes ) должен быть NULL или другое значение? Если другое, то что именно?

Спасибо.

08.03.08 02:11: Перенесено модератором из 'C/C++' — Кодт
Re: Ошибка доступа к COM порту. Как устранить?
От: игппук Беларусь  
Дата: 07.03.08 16:35
Оценка:
а вы обрабатываете порт в режиме FILE_FLAG_OVERLAPPED? если нет, тогда не используйте его, работайте в обычном режиме.
проклятый антисутенерский закон
Re: Ошибка доступа к COM порту. Как устранить?
От: TarasCo  
Дата: 07.03.08 16:36
Оценка:
L>CreateFile("COM4", GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_FLAG_OVERLAPPED, 0);

L>получаю ошибку с кодом 5 т.е. ERROR_ACCESS_DENIED.


порт уже открыт кем то
Да пребудет с тобою сила
Re[2]: Ошибка доступа к COM порту. Как устранить?
От: Logik  
Дата: 07.03.08 20:11
Оценка:
Здравствуйте, TarasCo, Вы писали:


L>>CreateFile("COM4", GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_FLAG_OVERLAPPED, 0);


L>>получаю ошибку с кодом 5 т.е. ERROR_ACCESS_DENIED.


TC>порт уже открыт кем то


Порт вроде никем не занят, но все же как это проверить для надежности?
На разных компах одна и та же песня, кроме ноута.
Re[3]: Ошибка доступа к COM порту. Как устранить?
От: Аноним  
Дата: 07.03.08 21:13
Оценка:
Здравствуйте, Logik, Вы писали:

TC>>порт уже открыт кем то


L>Порт вроде никем не занят, но все же как это проверить для надежности?


http://www.serial-port-monitor.com/free-serial-port-monitor-downloads.html
Re: Ошибка доступа к COM порту. Как устранить?
От: AndNot Россия  
Дата: 08.03.08 08:44
Оценка:
Здравствуйте, Logik, Вы писали:
L>CreateFile("COM4", GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_FLAG_OVERLAPPED, 0);
Попробуй так:
CreateFile("\\.\COM4", GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_FLAG_OVERLAPPED, 0);
Помогает избежать некоторых проблем с открытием, начиная с Win2K.
Re[2]: Ошибка доступа к COM порту. Как устранить?
От: Аноним  
Дата: 08.03.08 16:12
Оценка:
Здравствуйте, AndNot, Вы писали:

AN>Здравствуйте, Logik, Вы писали:

L>>CreateFile("COM4", GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_FLAG_OVERLAPPED, 0);
AN>Попробуй так:
AN>CreateFile("\\.\COM4", GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_FLAG_OVERLAPPED, 0);
AN>Помогает избежать некоторых проблем с открытием, начиная с Win2K.
Тогда уж "\\\\.\\"
Re[3]: Ошибка доступа к COM порту. Как устранить?
От: AndNot Россия  
Дата: 08.03.08 17:37
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Тогда уж "\\\\.\\"


Это для Си что ли?
Re[4]: Ошибка доступа к COM порту. Как устранить?
От: Аноним  
Дата: 08.03.08 19:08
Оценка:
Здравствуйте, AndNot, Вы писали:

AN>Здравствуйте, Аноним, Вы писали:


А>>Тогда уж "\\\\.\\"


AN>Это для Си что ли?


Да для C/C++. Только я забыл само имя порта: "\\\\.\\COM4"
Re[5]: Ошибка доступа к COM порту. Как устранить?
От: SaZ  
Дата: 12.03.08 16:06
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, AndNot, Вы писали:


AN>>Здравствуйте, Аноним, Вы писали:


А>>>Тогда уж "\\\\.\\"


AN>>Это для Си что ли?


А>Да для C/C++. Только я забыл само имя порта: "\\\\.\\COM4"


Не надо так извращаться. И без этого открывает. Просто нужно указать флаги FILE_SHARE_READ | FILE_SHARE_WRITE. Да, и OVERLAPPED тоже оставить. Почему — не знаю, но у меня была аналогичная проблемма.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.