Ошибка открытия СОМ порта на Win7 x64
От: Temnikov Россия  
Дата: 03.05.12 09:56
Оценка:
Преамбула:
ПО переопределяет виндовый шелл на себя.
При загрузке машины грузится сначала стандартный диалог входа в винду, после входа запускается софт.
В софте после внутренней авторизации начинается инициализация работы с оборудованием.

Собственно проблема:
Периодически, не всегда (~30-40%+- не мерил) происходит ошибка открытия СОМ порта.

Открывается так:

    m_hPortHandle = CreateFile(szBuff,GENERIC_READ | GENERIC_WRITE,0,NULL,
 OPEN_EXISTING,FILE_FLAG_OVERLAPPED,NULL);


Результат работы CreateFile INVALID_HANDLE_VALUE. GetLastError возвращает "доступ запрещен".
СОМ порты пробовали и на материнке, и PCI. Не влияет.
Перезапуск программы почти всегда помогает, но бывает что нет.

Под другими ОС такого не наблюдалось.
Куда копать?


03.05.12 15:46: Перенесено модератором из 'C/C++. Прикладные вопросы' — Кодт
Re: Ошибка открытия СОМ порта на Win7 x64
От: 5er Россия  
Дата: 03.05.12 12:57
Оценка:
Здравствуйте, Temnikov, Вы писали:

T>Преамбула:

T>ПО переопределяет виндовый шелл на себя.
T>При загрузке машины грузится сначала стандартный диалог входа в винду, после входа запускается софт.
T>В софте после внутренней авторизации начинается инициализация работы с оборудованием.

T>Собственно проблема:

T>Периодически, не всегда (~30-40%+- не мерил) происходит ошибка открытия СОМ порта.

T>Открывается так:


T>
T>    m_hPortHandle = CreateFile(szBuff,GENERIC_READ | GENERIC_WRITE,0,NULL,
T> OPEN_EXISTING,FILE_FLAG_OVERLAPPED,NULL);
T>


T>Результат работы CreateFile INVALID_HANDLE_VALUE. GetLastError возвращает "доступ запрещен".

T>СОМ порты пробовали и на материнке, и PCI. Не влияет.
T>Перезапуск программы почти всегда помогает, но бывает что нет.

T>Под другими ОС такого не наблюдалось.

T>Куда копать?

Ошибка, скорее всего, возникает из-за того, что порт уже кто-то открыл до вас.
Сервис, например, опрашивает порты, свое устройство ищет или что-то в этом роде.
Нужно найти что-нибудь аналогичное Portmon'у для x64 и посмотреть.
Re: Ошибка открытия СОМ порта на Win7 x64
От: Airog Украина  
Дата: 03.05.12 13:00
Оценка:
Здравствуйте, Temnikov, Вы писали:

T>Преамбула:

T>ПО переопределяет виндовый шелл на себя.
T>При загрузке машины грузится сначала стандартный диалог входа в винду, после входа запускается софт.
T>В софте после внутренней авторизации начинается инициализация работы с оборудованием.

я открываю порт так:

wsprintf( name_com, "\\\\.\\COM%d", num );
HANDLE com = CreateFile( name_com, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, 0, OPEN_EXISTING, FILE_FLAG_OVERLAPPED, 0 );

никогда ни на каких осях проблем не было
Re[2]: Ошибка открытия СОМ порта на Win7 x64
От: Temnikov Россия  
Дата: 04.05.12 06:42
Оценка:
Здравствуйте, 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 начались.
Re[2]: Ошибка открытия СОМ порта на Win7 x64
От: Temnikov Россия  
Дата: 04.05.12 06:56
Оценка:
T>>Открывается так:

T>>
T>>    m_hPortHandle = CreateFile(szBuff,GENERIC_READ | GENERIC_WRITE,0,NULL,
T>> OPEN_EXISTING,FILE_FLAG_OVERLAPPED,NULL);
T>>


T>>Результат работы CreateFile INVALID_HANDLE_VALUE. GetLastError возвращает "доступ запрещен".

T>>СОМ порты пробовали и на материнке, и PCI. Не влияет.
T>>Перезапуск программы почти всегда помогает, но бывает что нет.

T>>Под другими ОС такого не наблюдалось.

T>>Куда копать?

5er>Ошибка, скорее всего, возникает из-за того, что порт уже кто-то открыл до вас.

5er>Сервис, например, опрашивает порты, свое устройство ищет или что-то в этом роде.
5er>Нужно найти что-нибудь аналогичное Portmon'у для x64 и посмотреть.

Сегодня схожу посмотрю, идея с PortMon'ом тоже родилась, но уже вечером.
Windows чистый, только наш софт и более ничего, мы поставляем ПО вместе с нашим компом.
Re[3]: Ошибка открытия СОМ порта на Win7 x64
От: Airog Украина  
Дата: 04.05.12 07:26
Оценка:
Здравствуйте, Temnikov, Вы писали:


T>Обертка по работе с СОМ портом написана лет 8 назад, отгружена уже не одной сотне потребителей. Проблем не было. Но вот на W7 х64 начались.


Тогда 7-ки еще не было даже в проекте ), так что возможно что-то не учли. На скольких машинах с W7 х64 проверяли? На всех такая проблема? Попробуйте открыть порт как я написал выше, по крайней мере у меня такой проблемы не наблюдается на W7 х64.
Re[4]: Ошибка открытия СОМ порта на Win7 x64 (решено)
От: Temnikov Россия  
Дата: 04.05.12 09:09
Оценка:
Здравствуйте, Airog, Вы писали:

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



T>>Обертка по работе с СОМ портом написана лет 8 назад, отгружена уже не одной сотне потребителей. Проблем не было. Но вот на W7 х64 начались.


A>Тогда 7-ки еще не было даже в проекте ), так что возможно что-то не учли. На скольких машинах с W7 х64 проверяли? На всех такая проблема? Попробуйте открыть порт как я написал выше, по крайней мере у меня такой проблемы не наблюдается на W7 х64.


Дело оказалось не в W7. Сейчас пошли поставки с NEC'овскими мониторами с тачскрином. А этот гад устанавливает сервис, который периодически опрашивает СОМ порты на наличие подключения дополнительных не PnP тачскринов.

Спасибо откликнувшимся.
Re[5]: Ошибка открытия СОМ порта на Win7 x64 (решено)
От: PM  
Дата: 04.05.12 10:26
Оценка:
Здравствуйте, 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 (решено)
От: Temnikov Россия  
Дата: 04.05.12 11:28
Оценка:
Здравствуйте, 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)

Re[3]: Ошибка открытия СОМ порта на Win7 x64
От: lyuba-ostroukhovayandex.ru  
Дата: 19.02.13 16:06
Оценка:
Здравствуйте, 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 начались.
здравствуйте поясните пожалуйста куда эту комбинацию вводить?? у меня также не открывается порт.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.