Ситуация такая: При откратии (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++' — Кодт
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>Порт вроде никем не занят, но все же как это проверить для надежности?
Здравствуйте, 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.
Тогда уж "\\\\.\\"
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте, AndNot, Вы писали:
AN>>Здравствуйте, Аноним, Вы писали:
А>>>Тогда уж "\\\\.\\"
AN>>Это для Си что ли?
А>Да для C/C++. Только я забыл само имя порта: "\\\\.\\COM4"
Не надо так извращаться. И без этого открывает. Просто нужно указать флаги FILE_SHARE_READ | FILE_SHARE_WRITE. Да, и OVERLAPPED тоже оставить. Почему — не знаю, но у меня была аналогичная проблемма.