• Курсы Академии Кодебай, стартующие в мае - июне, от команды The Codeby

    1. Цифровая криминалистика и реагирование на инциденты
    2. ОС Linux (DFIR) Старт: 16 мая
    3. Анализ фишинговых атак Старт: 16 мая Устройства для тестирования на проникновение Старт: 16 мая

    Скидки до 10%

    Полный список ближайших курсов ...

Зависание при подключении к Com модему

  • Автор темы Yahoo
  • Дата начала
Y

Yahoo

Форумчане, прошу помогите...

Есть usb-модем опсосов HUAWEI "проецируется" на COM7
Так вот написал программу, которая соединяется с модемом и позволяет мне звонить или отправлять СМС с него, но вот проблема, программа зависает когда я подключаюсь к модему, ЕСЛИ я его НЕ "Опросил"(через диспетчер устройств) или НИ РАЗУ не выходил в интернет, ДО ТОГО как вставил модем в порт. Если это сделать то ОНА ПОЛНОСТЬЮ РАБОТАЕТ.

Привожу кусочек проблемной части программы
Код:
void OpenPort()
{
if (hCom != INVALID_HANDLE_VALUE)
{
ClosePort();
Sleep(300);
}

GetDlgItemTextA(hWnd, IDC_COMBO1, ModemPort, 6);

char ComPort[10];
lstrcpyA(ComPort, "\\.\\\\");
lstrcatA(ComPort, ModemPort);

hCom = CreateFileA(ComPort, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);

if (hCom == INVALID_HANDLE_VALUE) SetDlgItemTextA(hWnd, IDC_EDIT5, "failed to open port");
else 
{
SetDlgItemTextA(hWnd, IDC_EDIT5, "port successfully opened");

hThread = CreateThread(0, 0, ReadThread, (LPVOID)hWnd, 0, 0);

DCB dcb;
memset(&dcb, 0, sizeof(dcb));
dcb.DCBlength = sizeof(dcb);
MessageBoxA(0, "Щас может зависнуть :(\nЧтобы этого не произошло:\
\n Войдите хоть раз в интернет либо опросите модем ч/з диспетчер устройств.",
"Bug", MB_OK | MB_ICONASTERISK );

// При вызове GetCommState она и зависает...

if(!GetCommState(hCom, &dcb)) SetDlgItemTextA(hWnd, IDC_EDIT5, "Error of get data about port");
// Если закоментить GetCommState то прожка зависнет на SetCommState и т.д...
dcb.BaudRate = CBR_57600; //460800;
dcb.ByteSize = 8;
dcb.Parity = NOPARITY;
dcb.StopBits = ONESTOPBIT;

if (SetCommState(hCom, &dcb)) SetDlgItemTextA(hWnd, IDC_EDIT5, "Configuring OK");
else SetDlgItemTextA(hWnd, IDC_EDIT5, "Configuring Error");
}
return;
}

знаете как это можно исправить? Или мне искать мануалы на английском, которых в открытом доступе скорее всего не будет :sorry: Если они есть то можно и на них ссылочку...
 
Y

Yahoo

Вопрос отпал сразу после полного анализа моего кода и удаления с него строчки создания потока на чтение.
(Да как я на нее раньше внимание не обратил только голову Вам зря заморочил, простите)
Тему можно прикрыть
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!