2012-01-07 11 views
11

Ho installato, apparentemente con successo, com0com v2.2.2.0 su un computer Windows 7 a 64 bit.porta virtuale com0com non trovata

avvio l'utilità di comando, così:

command> install PortName=COM9 PortName=COM8 
     CNCA0 PortName=COM9 
     CNCB0 PortName=COM8 
ComDB: COM8 - logged as "in use" 
ComDB: COM9 - logged as "in use" 

command> busynames COM?* 
COM3 
COM4 
COM5 
COM6 
COM8 
COM9 
COMPOSITEBATTERY 

Nota: registrato come "in uso" non è un messaggio di errore?

poi cerco di aprire COM8 come questo

m_hIDComDev = CreateFileA(szCodedPort, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED, NULL); 
if(m_hIDComDev == NULL || m_hIDComDev == INVALID_HANDLE_VALUE) { 

    wchar_t * lpMsgBuf; 
    DWORD dw = ::GetLastError(); 
    FormatMessage(
     FORMAT_MESSAGE_ALLOCATE_BUFFER | 
     FORMAT_MESSAGE_FROM_SYSTEM | 
     FORMAT_MESSAGE_IGNORE_INSERTS, 
     NULL, 
     dw, 
     MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), 
     (LPTSTR) &lpMsgBuf, 
     0, NULL); 

    myErrorMsg = (char*)malloc(200); 
    sprintf(myErrorMsg,"Error creating connection %s (%s) %S", 
     szPort,szCodedPort,lpMsgBuf); 

Questo viene a mancare con

Error creating connection COM8 (COM8) The system cannot find the file specified. 

Ho provato sia "COM8" e "\\.\COM8".

Si noti che la stessa chiamata a CreateFileA funziona perfettamente su una porta COM "reale".

D: Qualcuno può dirmi qual è il problema?

A: Su Windows 7 64 bit è necessario abilitare il test dei driver non firmati.

  • Eseguire un prompt dei comandi come amministratore. (Non è appena sufficiente per correre da un account con privilegi di amministratore. Vedere here per i dettagli su come fare questo.)

  • Digitare il comando bcdedit -set TESTSIGNING ON

  • riavvio. (Windows inserirà una nota "modalità test" in basso a destra del desktop)

per Windows 8 questo metodo non funziona in modo soddisfacente o facilmente. Ecco some discussion dei problemi e soluzioni alternative.

In alternativa si potrebbe provare un signed version - NON ho provato da solo.

+1

Mostra 'COM8 - registrato come" in uso "' - è probabile che il tuo problema. –

+0

@Jonathon Reinhart Hai familiarità con com0com? Il messaggio "in uso", secondo i suggerimenti nella documentazione, implica solo che queste porte COM sono state assegnate dal driver com0com e pertanto non verranno assegnate di nuovo.Se il sistema operativo pensava che fossero occupati, mi avrebbe dato un errore diverso. PER QUANTO NE SO! – ravenspoint

+1

"In uso" è normalmente un messaggio di errore. Bello dell'open source, puoi leggere il codice per vedere cosa significa in realtà. –

risposta

9

Qui ci sono i miei punti:

  • Microsoft richiede 64-bit drivers di essere signed.
  • com0com.sys (64 bit) è un semplice driver in modalità kernel senza firma.

SoftWx ha scritto un tutorial interessante sull'installazione su un computer Windows 7 a 64 bit. Puoi recuperarlo here.

+0

Grazie. Questo mi ha indirizzato nella giusta direzione. Il trucco è eseguire bcdedit da un prompt di encom iniziato come "amministratore". Non è sufficiente solo eseguire da un account con privilegi di amministratore. – ravenspoint

+0

L'unico problema con questa soluzione è che Windows deve essere in modalità test affinché il driver funzioni. Una volta riavviato, non sarai più in grado di usarlo. Questa soluzione non è permanente e non voglio lasciare il mio computer in modalità test driver tutto il tempo (rappresenta un rischio per la sicurezza). – DaAwesomeP

18

Nel caso in cui qualcuno faccia riferimento a questo argomento e sia interessato a questo argomento, lo 2.2.2.0 version of com0com è firmato per Windows a 64 bit. Ciò elimina la necessità di saltare attraverso i cerchi di mettere Windows in modalità "test".

+0

Grazie per le buone notizie. – ravenspoint

+2

La versione 3.0.0.0 ** fa ** ** non ** ** funziona ** su Windows 7 64 bit. 2.2.2.0 funziona perfettamente. – Zac

+0

Non c'è Changes.txt nella cartella 3.0.0.0 su SourceForge. Qualcuno sa cosa è cambiato tra 2.2.2.0 e 3.0.0.0? – DaAwesomeP