2011-12-30 4 views
5

Il tentativo di richiamare SetupDiCallClassInstaller da un programma compilato in modalità a 32 bit non funziona su Windows 64 bit.Perché la funzione SetupDiCallClassInstaller è limitata ai programmi a 64 bit?

Apparentemente questo è di progettazione, ma mi piacerebbe sapere il motivo.

+1

Ciao, ho lo stesso problema con "SetupDiCallClassInstaller" in Windows 7, macchina a 64 bit. Puoi dire qual è la soluzione per questo? – 2vision2

+0

@ 2vision2 Hai avuto fortuna nell'ottenere questo? – amadib

+0

Microsoft semplicemente non ha implementato la versione a 32 bit di esso, quella che potrebbe essere eseguita nell'emulatore Wow64 in cui i processi a 32 bit vengono eseguiti. Se questo è un articolo da fare o una restrizione tecnica non è chiara, io voto per quest'ultimo. –

risposta

0

Se si effettua quella chiamata da un processo a 32 bit su un sistema operativo a 64 bit, non riesce poiché deve modificare alcune chiavi del Registro di sistema nella porzione a 64 bit del registro. In quale altro caso se si dovesse effettuare quella chiamata da un processo a 64 bit su un sistema operativo a 64 bit, si otterrebbe ugualmente il processo a 32 bit su un sistema operativo a 32 bit.

+0

Un processo a 32 bit può accedere al registro a 64 bit tramite il flag "KEY_WOW64_64KEY' quando si apre/crea una chiave, quindi non dovrebbe essere il fattore limitante del motivo per cui l'API non funziona in WOW64, a meno che ciò non sia una svista da parte di Microsoft e semplicemente non hanno ancora abilitato l'API a usare ancora quel flag. –

1

Secondo MSDN:

Device Installations on 64-Bit Systems:

La versione a 32 bit dell'applicazione deve controllare il valore restituito da UpdateDriverForPlugAndPlayDevices. Se il valore restituito è ERROR_IN_WOW64, l'applicazione a 32 bit è in esecuzione su una piattaforma a 64 bit e non è possibile aggiornare i driver di posta in arrivo. Al contrario, deve chiamare CreateProcess (descritto nella documentazione di Windows SDK) per avviare la versione a 64 bit dell'applicazione. La versione a 64 bit può quindi chiamare UpdateDriverForPlugAndPlayDevices, specificando un parametro FullInfPath che identifica la posizione delle versioni a 64 bit di tutti i file.

così sembra che qualsiasi API che è stato progettato per segnalare ERROR_IN_WOW64 è specificamente destinato a non funzionare in WOW64, un processo a 32 bit deve invocare un processo a 64 bit per chiamare l'API.

Problemi correlati