h = ::CreateFile(DeviceArray[i].strDevPath, GENERIC_READ|GENERIC_WRITE, 0, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL/*|FILE_FLAG_OVERLAPPED*/, 0);
res = (h != INVALID_HANDLE_VALUE) ? BM_DEV_COMM : BM_DEV_COMM_BUSY;
::SetupComm(h, 8192, 8192);// 设置缓冲区大小
DCB dcb;
::GetCommState(h, &dcb);
dcb.BaudRate = 115200;
dcb.StopBits = ONESTOPBIT;
dcb.Parity = NOPARITY;
dcb.ByteSize = 8;
dcb.EofChar = 0x00;
dcb.ErrorChar = 0x00;
dcb.EvtChar = 0x00;
dcb.XonChar = 0x00;
dcb.XoffChar = 0x00;
dcb.XoffLim = 0;
dcb.XonLim = 0;
::SetCommState(h, &dcb);
COMMTIMEOUTS _CO;
memset(&_CO, 0, sizeof(COMMTIMEOUTS));
::GetCommTimeouts(h, &_CO);
_CO.ReadIntervalTimeout = -1;//0;
_CO.ReadTotalTimeoutMultiplier = -1;//1;
_CO.ReadTotalTimeoutConstant = 10000;//1000;
_CO.WriteTotalTimeoutMultiplier = 1;
_CO.WriteTotalTimeoutConstant = 50;//1000;
::SetCommTimeouts(h, &_CO);
::PurgeComm(h, PURGE_TXABORT | PURGE_RXABORT | PURGE_TXCLEAR | PURGE_RXCLEAR );/////////清空缓冲区
::WriteFile(h, at_cmd, len, &dwBytes, NULL);
::ReadFile(h, szReturn, MAX_PATH, &dwBytes, NULL);
::CloseHandle(h);