Преамбула:
ПО переопределяет виндовый шелл на себя.
При загрузке машины грузится сначала стандартный диалог входа в винду, после входа запускается софт.
В софте после внутренней авторизации начинается инициализация работы с оборудованием.
Собственно проблема:
Периодически, не всегда (~30-40%+- не мерил) происходит ошибка открытия СОМ порта.
Результат работы CreateFile INVALID_HANDLE_VALUE. GetLastError возвращает "доступ запрещен".
СОМ порты пробовали и на материнке, и PCI. Не влияет.
Перезапуск программы почти всегда помогает, но бывает что нет.
Под другими ОС такого не наблюдалось.
Куда копать?
03.05.12 15:46: Перенесено модератором из 'C/C++. Прикладные вопросы' — Кодт
Здравствуйте, Temnikov, Вы писали:
T>Преамбула: T>ПО переопределяет виндовый шелл на себя. T>При загрузке машины грузится сначала стандартный диалог входа в винду, после входа запускается софт. T>В софте после внутренней авторизации начинается инициализация работы с оборудованием.
T>Собственно проблема: T>Периодически, не всегда (~30-40%+- не мерил) происходит ошибка открытия СОМ порта.
T>Открывается так:
T>
T>Результат работы CreateFile INVALID_HANDLE_VALUE. GetLastError возвращает "доступ запрещен". T>СОМ порты пробовали и на материнке, и PCI. Не влияет. T>Перезапуск программы почти всегда помогает, но бывает что нет.
T>Под другими ОС такого не наблюдалось. T>Куда копать?
Ошибка, скорее всего, возникает из-за того, что порт уже кто-то открыл до вас.
Сервис, например, опрашивает порты, свое устройство ищет или что-то в этом роде.
Нужно найти что-нибудь аналогичное Portmon'у для x64 и посмотреть.
Здравствуйте, Temnikov, Вы писали:
T>Преамбула: T>ПО переопределяет виндовый шелл на себя. T>При загрузке машины грузится сначала стандартный диалог входа в винду, после входа запускается софт. T>В софте после внутренней авторизации начинается инициализация работы с оборудованием.
Здравствуйте, Airog, Вы писали:
A>Здравствуйте, Temnikov, Вы писали:
T>>Преамбула: T>>ПО переопределяет виндовый шелл на себя. T>>При загрузке машины грузится сначала стандартный диалог входа в винду, после входа запускается софт. T>>В софте после внутренней авторизации начинается инициализация работы с оборудованием.
A>я открываю порт так:
A> wsprintf( name_com, "\\\\.\\COM%d", num ); A> HANDLE com = CreateFile( name_com, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, 0, OPEN_EXISTING, FILE_FLAG_OVERLAPPED, 0 );
A>никогда ни на каких осях проблем не было
Обертка по работе с СОМ портом написана лет 8 назад, отгружена уже не одной сотне потребителей. Проблем не было. Но вот на W7 х64 начались.
T>>Результат работы CreateFile INVALID_HANDLE_VALUE. GetLastError возвращает "доступ запрещен". T>>СОМ порты пробовали и на материнке, и PCI. Не влияет. T>>Перезапуск программы почти всегда помогает, но бывает что нет.
T>>Под другими ОС такого не наблюдалось. T>>Куда копать?
5er>Ошибка, скорее всего, возникает из-за того, что порт уже кто-то открыл до вас. 5er>Сервис, например, опрашивает порты, свое устройство ищет или что-то в этом роде. 5er>Нужно найти что-нибудь аналогичное Portmon'у для x64 и посмотреть.
Сегодня схожу посмотрю, идея с PortMon'ом тоже родилась, но уже вечером.
Windows чистый, только наш софт и более ничего, мы поставляем ПО вместе с нашим компом.
T>Обертка по работе с СОМ портом написана лет 8 назад, отгружена уже не одной сотне потребителей. Проблем не было. Но вот на W7 х64 начались.
Тогда 7-ки еще не было даже в проекте ), так что возможно что-то не учли. На скольких машинах с W7 х64 проверяли? На всех такая проблема? Попробуйте открыть порт как я написал выше, по крайней мере у меня такой проблемы не наблюдается на W7 х64.
Re[4]: Ошибка открытия СОМ порта на Win7 x64 (решено)
Здравствуйте, Airog, Вы писали:
A>Здравствуйте, Temnikov, Вы писали:
T>>Обертка по работе с СОМ портом написана лет 8 назад, отгружена уже не одной сотне потребителей. Проблем не было. Но вот на W7 х64 начались.
A>Тогда 7-ки еще не было даже в проекте ), так что возможно что-то не учли. На скольких машинах с W7 х64 проверяли? На всех такая проблема? Попробуйте открыть порт как я написал выше, по крайней мере у меня такой проблемы не наблюдается на W7 х64.
Дело оказалось не в W7. Сейчас пошли поставки с NEC'овскими мониторами с тачскрином. А этот гад устанавливает сервис, который периодически опрашивает СОМ порты на наличие подключения дополнительных не PnP тачскринов.
Спасибо откликнувшимся.
Re[5]: Ошибка открытия СОМ порта на Win7 x64 (решено)
Здравствуйте, Temnikov, Вы писали:
T>Дело оказалось не в W7. Сейчас пошли поставки с NEC'овскими мониторами с тачскрином. А этот гад устанавливает сервис, который периодически опрашивает СОМ порты на наличие подключения дополнительных не PnP тачскринов.
В любом случае, лучше открывать порт как посоветовал Airog, с именем локальной машины вида \\.\COM%d
Потому что только таким образом открываются последовательные порты с номерами больше 9. А современные USB-Com переходники частенько создают порты с именами COM11, COM12 и т.д.
В разделе MSDN про CreateFile об этом прямо сказано:
To specify a COM port number greater than 9, use the following syntax: "\\.\COM10". This syntax works for all port numbers and hardware that allows COM port numbers to be specified.
Re[6]: Ошибка открытия СОМ порта на Win7 x64 (решено)
Здравствуйте, PM, Вы писали:
PM>Здравствуйте, Temnikov, Вы писали:
T>>Дело оказалось не в W7. Сейчас пошли поставки с NEC'овскими мониторами с тачскрином. А этот гад устанавливает сервис, который периодически опрашивает СОМ порты на наличие подключения дополнительных не PnP тачскринов.
PM>В любом случае, лучше открывать порт как посоветовал Airog, с именем локальной машины вида \\.\COM%d
PM>Потому что только таким образом открываются последовательные порты с номерами больше 9. А современные USB-Com переходники частенько создают порты с именами COM11, COM12 и т.д.
PM>В разделе MSDN про CreateFile об этом прямо сказано:
PM>
PM>To specify a COM port number greater than 9, use the following syntax: "\\.\COM10". This syntax works for all port numbers and hardware that allows COM port numbers to be specified.
Так и делается ). Я просто не весь код скопировал.
Еще у Airog'а указывается передается параметр FILE_SHARE_READ | FILE_SHARE_WRITE в dwShareMode. Хотя MSDNе написано:
the dwShareMode parameter must be zero (exclusive access)
Здравствуйте, Temnikov, Вы писали:
T>Здравствуйте, Airog, Вы писали:
A>>Здравствуйте, Temnikov, Вы писали:
T>>>Преамбула: T>>>ПО переопределяет виндовый шелл на себя. T>>>При загрузке машины грузится сначала стандартный диалог входа в винду, после входа запускается софт. T>>>В софте после внутренней авторизации начинается инициализация работы с оборудованием.
A>>я открываю порт так:
A>> wsprintf( name_com, "\\\\.\\COM%d", num ); A>> HANDLE com = CreateFile( name_com, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, 0, OPEN_EXISTING, FILE_FLAG_OVERLAPPED, 0 );
A>>никогда ни на каких осях проблем не было
T>Обертка по работе с СОМ портом написана лет 8 назад, отгружена уже не одной сотне потребителей. Проблем не было. Но вот на W7 х64 начались.