Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
A partire da Windows Vista, le versioni basate su x64 di Windows richiedevano che tutti i software in esecuzione in modalità kernel, inclusi i driver, siano firmati digitalmente per essere caricati. Inizialmente è possibile usare l'opzione F8 (in ogni avvio, prima del caricamento di Windows) per disabilitare temporaneamente l'imposizione del tempo di caricamento della richiesta di una firma valida nel driver. Ma questo diventerà noioso dopo i primi usi. È possibile collegare un debugger del kernel al computer di test che disabiliterà gli stessi controlli di imposizione del tempo di caricamento dopo aver usato i comandi BCDEdit corretti. Tuttavia, alla fine diventerà necessario testare la firma del driver durante il suo sviluppo e infine finalizzare la firma del driver prima di pubblicarlo agli utenti.
Installazione di un driver non firmato durante lo sviluppo e il test
Estratto daInstallazione di un driver non firmato durante lo sviluppo e il test:
Per impostazione predefinita, le versioni a 64 bit di Windows Vista e versioni successive di Windows caricheranno un driver in modalità kernel solo se il kernel può verificare la firma del driver. Tuttavia, questo comportamento predefinito può essere disabilitato durante lo sviluppo iniziale dei driver e per i test non automatizzati. Gli sviluppatori possono usare uno dei meccanismi seguenti per disabilitare temporaneamente l'imposizione in fase di caricamento di una firma del driver valida. Tuttavia, per automatizzare completamente i test di un driver installato da Plug and Play (PnP), il file di catalogo del driver deve essere firmato. La firma del driver è necessaria perché Windows Vista e versioni successive di Windows visualizzano una finestra di dialogo di firma del driver per i driver non firmati che richiedono a un amministratore di sistema di autorizzare l'installazione del driver, impedendo potenzialmente a qualsiasi utente senza i privilegi necessari di installare il driver e di usare il dispositivo. Questo comportamento di installazione del driver PnP non può essere disabilitato in Windows Vista e versioni successive di Windows.
Usare l'opzione di avvio avanzato F8
Windows Vista e le versioni successive di Windows supportano l'opzione di avvio avanzata F8, "Disabilita imposizione firma driver", che disabilita l'imposizione della firma al momento del caricamento per un driver kernel solo durante la sessione di sistema corrente. Questa impostazione non viene mantenuta tra i riavvii del sistema.
La schermata dell'opzione di avvio seguente verrà visualizzata durante il riavvio, fornendo l'opzione per disabilitare l'imposizione della firma del driver. Questa disposizione consentirà l'installazione di un driver non firmato per scopi di test.
Collegare un debugger del kernel per disabilitare la verifica della firma
Il collegamento di un debugger del kernel attivo a un computer di sviluppo o test disabilita l'imposizione della firma in fase di caricamento per i driver in modalità kernel. Per usare questa configurazione di debug, collegare un computer di debug a un computer di sviluppo o test e abilitare il debug del kernel nel computer di sviluppo o test eseguendo il comando seguente:
bcdedit -debug on
Per usare BCDEdit, l'utente deve essere membro del gruppo Administrators nel sistema ed eseguire il comando da un prompt dei comandi con privilegi elevati. Per aprire una finestra del prompt dei comandi con privilegi elevati, creare un collegamento desktop per Cmd.exe, selezionare e tenere premuto (o fare clic con il pulsante destro del mouse) sul collegamento e selezionare Esegui come amministratore.
Tuttavia, bisogna essere consapevoli che ci sono situazioni in cui uno sviluppatore potrebbe dover collegare un debugger del kernel, pur continuando a mantenere l'applicazione della firma durante il caricamento. Per informazioni su come eseguire questa operazione, vedere Appendice 1: Applicazione della verifica della firma Kernel-Mode nella modalità di debug del kernel.
Firma a scopo di test di un pacchetto di driver
Anziché usare i due metodi precedenti per ignorare i requisiti di imposizione della firma del driver, l'approccio migliore consiste nel testare la firma di un pacchetto driver. La firma di test e l'installazione del driver possono essere eseguite nel computer di sviluppo, ma potrebbe essere necessario avere due computer, uno per lo sviluppo e la firma, e l'altro per i test.
Estratto daCome Test-Sign un pacchetto driver:
Computer per la firma digitale
Si tratta del computer usato per testare un pacchetto driver per Windows Vista e versioni successive di Windows. Questo computer deve eseguire Windows XP SP2 o versioni successive di Windows. Per usare gli strumenti di firma dei driver , questo computer deve avere Installato Windows Vista e versioni successive di Windows Driver Kit (WDK). Può trattarsi anche del computer di sviluppo.
Test del computer
Questo è il computer utilizzato per installare e testare il pacchetto driver firmato di test. Questo computer deve eseguire Windows Vista o versioni successive di Windows.
Procedura di firma del test
I pacchetti driver conterranno il file binario del driver, il file INF, il file CAT e tutti gli altri file necessari. Un pacchetto driver può contenere sottodirectory come x86, AMD64, IA64, se il driver viene compilato per più di un tipo di processore di destinazione. Eseguire questi passaggi usando il computer utilizzato per lo sviluppo/la firma.
La procedura seguente descrive i passaggi per testare la firma di un pacchetto driver:
Compilare il driver per l'obiettivo. Se stai creando un driver per Windows 8.0 o Windows 8.1, usa Visual Studio 2012 o Visual Studio 2013 con il WDK corrispondente installato, ad esempio Windows 8.0 o 8.1 WDK rispettivamente.
Tutti gli strumenti di comando descritti di seguito devono essere usati dalla finestra di comando corrispondente di Visual Studio 2012 o Visual Studio 2013.
Nota
Gli strumenti di comando per Visual Studio si trovano nella directory di installazione C:\Programmi (x86)\Microsoft Visual Studio 12.0\Common7\Tools\Shortcuts
Uno qualsiasi dei cinque collegamenti per il prompt dei comandi avrà i comandi makecert.exe, inf2cat.exe, signtool.exe, certmgr.exee così via.
È possibile scegliere il più generale, "Developer Command Prompt for VS2013". I tasti di scelta rapida possono essere aggiunti alla barra delle applicazioni per semplificare l'accesso.
Nota
Si noti che con Visual Studio, invece dell'approccio dello strumento di comando alla firma del driver, è anche possibile usare l'ambiente di sviluppo di Visual Studio 2013 (noto anche come IDE) per firmare un pacchetto driver. Fare riferimento a Appendice 2: Firma dei driver con Visual Studio per ulteriori informazioni.
Creare una cartella del pacchetto driver e copiare i file del driver, mantenendo tutte le sottodirectory necessarie, ad esempio C:\DriverTestPackage.
Creare un file inf per il pacchetto driver. Testare il file inf usando lo strumento infVerif da WDK nel file inf in modo che non venga segnalato alcun errore.
estratto daCreazione di certificati di test:
L'esempio della riga di comando seguente usa MakeCert per completare le attività seguenti:
Creare un certificato di test autofirmato denominato Contoso.com(Test). Questo certificato usa lo stesso nome per il nome soggetto e l'autorità di certificazione (CA).
Inserire una copia del certificato in un file di output denominato ContosoTest.cer.
Inserire una copia del certificato in un archivio certificati denominato PrivateCertStore. L'inserimento del certificato di test in PrivateCertStore lo mantiene separato da altri certificati che possono trovarsi nel sistema.
Usare il comando MakeCert seguente per creare il certificato Contoso.com(Test):
makecert -r -pe -ss PrivateCertStore -n CN=Contoso.com(Test) ContosoTest.cerDove:
L'opzione -r crea un certificato autofirmato con lo stesso nome emittente e soggetto.
L'opzione -pe specifica che è possibile esportare la chiave privata associata al certificato.
L'opzione -ss specifica il nome dell'archivio certificati che contiene il certificato di test (PrivateCertStore).
L'opzione -n CN= specifica il nome del certificato, Contoso.com(Test). Questo nome viene usato con lo strumento SignTool per identificare il certificato.
ContosoTest.cer è il nome file che contiene una copia del certificato di test, Contoso.com(Test). Il file di certificato viene utilizzato per aggiungere il certificato all'archivio delle autorità di certificazione radice attendibili e all'archivio degli emittenti attendibili.
Estratto daVisualizzazione dei certificati di test:
Dopo aver creato il certificato e aver inserito una copia nell'archivio certificati, lo snap-in Certificati di Microsoft Management Console (MMC) può essere usato per visualizzarlo. Eseguire le operazioni seguenti per visualizzare un certificato tramite lo snap-in MMC Certificati:
Per avviare lo snap-in Certificati, eseguire Certmgr.msc.
Nel riquadro sinistro dello snap-in Certificati espandere la cartella dell'archivio certificati PrivateCertStore e fare doppio clic su Certificati.
Il seguente screenshot mostra la vista dello snap-in Certificati della cartella dell'archivio di certificati PrivateCertStore.
Per visualizzare i dettagli sul certificato Contoso.com(Test), fare doppio clic sul certificato nel riquadro destro. Lo screenshot seguente mostra i dettagli sul certificato.
Si noti che la finestra di dialogo Certificato indica: "Questo certificato radice DELLA CA non è attendibile. Per abilitare l'attendibilità, installare questo certificato nell'archivio Autorità di certificazione radice attendibili." Si tratta del comportamento previsto. Il certificato non può essere verificato perché Windows non considera attendibile l'autorità emittente, "Contoso.com(Test)" per impostazione predefinita.
Creare un file di catalogo (estensione cat). Usare lo strumento inf2cat come illustrato di seguito per creare il file di catalogo. Si noti che non è consentito spazio per gli interruttori, /driver:<senza spazio><percorso completo>, /os:<senza spazio><nome os1>,<senza spazio><nome os2>.
inf2cat /v /driver:C:\DriverTestPackage /os:7_64,7_x86 ,XP_X86Verrà creato un file di catalogo con il nome specificato nel file inf del driver. È possibile aggiungere altri sistemi operativi separati da virgole in modo selettivo o tutti, come illustrato di seguito senza spazi.
/os:2000,XP_X86,XP_X64,Server2003_X64,Vista_X64,Vista_X86,7_x86,7_64,Server2008_x86,Server2008_x64,Sever2008_IA64,Server2008R2_x86,Server2008R2_x64,Server2008R2_IA64,8_x86,8_x64, 8_ARM, Server8_x64L'elemento inf2cat aggiornato dal nuovo WDK 8.1 include valori di opzione /os di 6_3_X86, 6_3_X64, 6_3_ARM e SERVER_6_3_X64.
Esempio di file INF per la sezione Version.
[Version] Signature="$WINDOWS NT$" Class=TOASTER ClassGuid={B85B7C50-6A01-11d2-B841-00C04FAD5171} Provider=%ToastRUs% DriverVer=09/21/2006,6.0.5736.1 CatalogFile.NTx86 = tostx86.cat CatalogFile.NTIA64 = tostia64.cat CatalogFile.NTAMD64 = tstamd64.cat PnpLockdown = 1L'opzione /driver (o /drv) specifica la directory che contiene uno o più file INF. All'interno di questa directory, i file di catalogo vengono creati per i file INF che contengono una o più direttive CatalogFile. Il nome del file di catalogo non è limitato al nome 8.3.
Inf2Cat crea il file di catalogo tstamd64.cat se viene usato l'argomento della riga di comando /os:7_X64. Analogamente, lo strumento crea il file di catalogo toastx86.cat se viene usata l'opzione /os:XP_X86, in modo analogo per Server2008R2_IA64. Nel caso in cui sia necessario un solo file di catalogo, sarà sufficiente una sola voce nel file INF, come illustrato di seguito.
CatalogFile.NT = toaster.catOppure
CatalogFile = toaster.catSe la data nel file INF non è maggiore della data di rilascio del sistema operativo, l'errore seguente verrà segnalato dallo strumento inf2cat se il parametro /os era per Windows 7 e la data impostata nel file INF era una data precedente.
Signability test failed. Errors: 22.9.7: DriverVer set to incorrect date (must be postdated to 4/21/2009 for newest OS) in \toaster.infLo strumento inf2cat è molto rigoroso nel controllo di ogni cartella e sottocartella per quanto riguarda la presenza di ogni file con una voce nel file INF. In tali voci mancanti verranno visualizzati messaggi di errore significativi.
Il file cat può essere aperto da Explorer facendo doppio clic o facendo clic con il pulsante destro del mouse sul file e scegliendo Apri. Nella scheda Sicurezza verranno visualizzate alcune voci con valori GUID. Se si seleziona un valore GUID, verranno visualizzati i dettagli, inclusi i file driver del pacchetto driver e i sistemi operativi aggiunti come illustrato di seguito:
OSAttr 2:5.1,6.1Il numero 5.1 è il numero di versione per il sistema operativo XP e 6.1 per il sistema operativo Windows 7.0.
È consigliabile controllare il file cat per verificare l'inclusione dei file del driver e dei sistemi operativi selezionati. In qualsiasi momento, se viene aggiunto o rimosso un file driver, il file INF è stato modificato, il file cat deve essere ricreato e firmato di nuovo. Eventuali omissioni qui causeranno errori di installazione segnalati nel file di log dell'installazione (setupapi.dev.log per Vista e versioni successive o setupapi.log file per XP).
estratto dal file di catalogo di un pacchetto driverTest-Signing:
La riga di comando seguente illustra come eseguire SignTool per eseguire le operazioni seguenti:
Firmare il file di catalogo tstamd64.cat del pacchetto driver di esempio ToastPkg. Per ulteriori informazioni su come è stato creato questo file di catalogo , vedere Creazione di un file di catalogo per Test-Signing un pacchetto driver ,.
Usare il certificato Contoso.com(Test) di PrivateCertStore per la firma di test. Per altre informazioni sulla creazione di questo certificato, vedere Creazione di certificati di test.
Data e ora della firma digitale tramite un'autorità di marcatura temporale (TSA).
Per testare la firma del file di catalogo tstamd64.cat, eseguire la riga di comando seguente:
signtool sign /v /s PrivateCertStore /n Contoso.com(Test) /t http://timestamp.digicert.com tstamd64.catDove:
Il comando sign configura SignTool per firmare il file di catalogo specificato, tstamd64.cat.
L'opzione /v consente operazioni dettagliate, in cui SignTool visualizza messaggi di esecuzione riuscita e messaggi di avviso.
L'opzione /s specifica il nome dell'archivio certificati (PrivateCertStore) che contiene il certificato di test.
L'opzione /n specifica il nome del certificato (Contoso.com(Test)) installato nell'archivio certificati specificato.
L'opzione /t specifica l'URL del TSA (
http://timestamp.digicert.com) che timestamperà la firma digitale.
Importante
L'inclusione di un timestamp fornisce le informazioni necessarie per la revoca delle chiavi nel caso in cui la chiave privata per la firma del codice del firmatario venga compromessa.
- tstamd64.cat specifica il nome del file di catalogo, che verrà firmato digitalmente.
tstamd64.cat specifica il nome del file di catalogo, che verrà firmato digitalmente. È possibile aprire il file cat come descritto in precedenza
estratto modificato daTest-Signing driver tramite undi firma incorporata:
- Nelle versioni a 64 bit di Windows Vista e versioni successive di Windows, i requisiti di firma del codice in modalità kernel dichiarano che un driver di avvio deve avere una firma incorporata. Questa operazione è necessaria indipendentemente dal fatto che il pacchetto driver del driver disponga di un file di catalogo firmato digitalmente.
Di seguito è riportato il comando per incorporare la firma di un file binario del driver in modalità kernel.
signtool sign /v /s PrivateCertStore /n Contoso.com(Test) /t http://timestamp.digicert.com amd64\toaster.sysamd64\toaster.sys specifica il nome del file binario della modalità kernel che verrà firmato per incorporamento.
All'interno della directory di installazione di WDK 7.1, l'esempio di toaster si trova nella directory src\general\toaster\toastpkg\toastcd\. Gli esempi di Windows 8 o 8.1 WDK devono essere scaricati dal sito di download Microsoft. Gli esempi non sono disponibili con Windows 8 o 8.1 Windows Driver Kit.
Aprendo il file di catalogo facendo doppio clic sul file in Esplora risorse, vedrai lo screenshot seguente. Si noti che "Visualizza firma" è ora evidenziato.
Se si seleziona "Visualizza firma", verrà visualizzata la schermata seguente che fornisce l'opzione di visualizzazione successiva da "Visualizza certificato", che darà quindi la possibilità di "Installa certificato" dalla finestra di dialogo stessa. Di seguito viene offerta l'opzione della riga di comando preferita per installare il certificato usando lo strumento certmgr.exe.
Il driver può ora essere testato nel computer di firma o nel computer di test. Se si usa il computer per i test, copiare il pacchetto driver nel computer mantenendo intatta la struttura dei file. Anche lo strumento certmgr.exe deve essere copiato nel computer di test. Quando si utilizza un computer di test, copiare il pacchetto driver Toastpkg firmato in modalità test nella cartella temporanea c:\toaster.
La procedura seguente descrive i passaggi da usare in entrambi i computer per testare il driver:
In una finestra di comando con privilegi elevati eseguire il comando seguente:
bcdedit /set testsigning onRiavviare il computer.
Estratti selezionati daUtilizzo di CertMgr per installare certificati di test su un computer di prova:
Copiare il file del certificato (.cer) usato per driver di di firma di test nel computer di test. È possibile copiare il file del certificato in qualsiasi directory nel computer di test.
Il comando CertMgr seguente aggiunge il certificato nel file certificato CertificateFileName.cer all'archivio delle Autorità di certificazione radice attendibili nel computer di test.
CertMgr.exe /add CertificateFileName.cer /s /r localMachine rootIl comando CertMgr seguente aggiunge il certificato dal file di certificati CertificateFileName.cer nell'archivio dei certificati degli Autori attendibili sul computer di test.
CertMgr.exe /add CertificateFileName.cer /s /r localMachine trustedpublisherDove (estratti daCertMgr):
/add CertificateName
Aggiunge, nell'archivio certificati, il certificato contenuto nel file di certificato specificato.
/s
Specifica che l'archivio certificati è un archivio di sistema.
/r RegistryLocation
Specifica che la posizione del negozio di sistema nel Registro di sistema è sotto HKEY_LOCAL_MACHINE.
CertificateStore
Specifica l'archivio certificati, trustedpublisher, in modo analogo per "localMachine root".
Riavviare il computer. È ora possibile eseguire Certmgr.msc e verificare che il ContosoTest.cer sia visibile nelle due posizioni precedenti. Se non è visibile, un altro modo per installare il certificato consiste nell'aprire il certificato e installarlo nei due nodi precedenti e verificare di nuovo.
Verificare la firma del file cat e del file sys. Aprire una finestra di comando con privilegi elevati e supponendo che il signtool.exe sia disponibile nel computer, passare alla directory del pacchetto driver in cui si trovano i file cat, inf e sys. Eseguire i comandi seguenti nella directory appropriata.
Da verifica della firma SPC di un file di catalogo:
signtool verify /v /kp /c tstamd64.cat toaster.infPer verificare la presenza del segno di incorporamento, eseguire il comando seguente.
Da verifica della firma di un file del driver Release-Signed:
signtool verify /v /kp toaster.sysI due comandi precedenti genereranno un errore poiché è un certificato firmato per il test e il certificato non è un certificato attendibile.
SignTool Error: A certificate chain processed, but terminated in a root certificate which is not trusted by the trust provider.I due comandi di verifica precedenti saranno molto utili per la firma del rilascio che verrà illustrato più avanti.
Il driver è ora pronto per l'installazione e il test nel computer di test. È sempre consigliabile impostare correttamente la chiave del Registro di sistema seguente per raccogliere log dettagliati in setupapi.dev.log file (per Windows Vista e sistemi operativi successivi) durante il processo di installazione.
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Setup\Loglevel=0x4800FFFFIn %SystemRoot%file \inf rinominare il file setupapi.dev.log prima di installare il driver. Dopo l'installazione, verrà creato un nuovo file di setupapi.dev.log log che conterrà informazioni preziose rilevate durante l'installazione.
Una volta installato correttamente, il driver può essere testato nel computer di sviluppo o nel computer di test.
Installazione, disinstallazione e caricamento del pacchetto driver Test-Signed
Dopo il riavvio del sistema nel passaggio 2, è possibile installare e caricare il pacchetto driver firmato dal test. Esistono due modi per installare un pacchetto driver:
Usando lo strumento Pnputil fornito dal sistema operativo () () (pnputil.exe).
Usando lo strumento Devcon (devcon.exe) , che è uno strumento da riga di comando WDK per l'installazione dei driver, ma non ridistribuibile. Il codice di esempio dello strumento Devcon viene fornito in WDK. Per ridistribuire, è possibile implementare il proprio strumento Devcon dal codice di esempio e ridistribuire la versione dello strumento.
Per installare e disinstallare il pacchetto driver tramite PnpUtil
Installazione del pacchetto driver:
Aprire una finestra di comando con privilegi elevati e impostare la directory predefinita su c:\toaster.
Eseguire uno dei comandi riportati di seguito:
Per allestire il pacchetto driver:
pnputil /add-driver toaster.infPer preparare il driver e installarlo nei dispositivi esistenti:
pnputil /add-driver toaster.inf /install
Disinstallazione del pacchetto driver:
Aprire una finestra di comando con privilegi elevati.
Identificare il nome dell'OEM INF che corrisponde al pacchetto driver da rimuovere dall'elenco restituito da
pnputil /enum-driversEseguire:
pnputil /delete-driver \<OEM INF name> /uninstall
Per installare e disinstallare il pacchetto driver con DevCon
Installazione del pacchetto driver:
Aprire una finestra di comando con privilegi elevati e impostare la directory predefinita su c:\toaster.
La versione x86, la versione amd64 e la versione ia64 di Devcon.exe sono disponibili nella directory degli strumenti WDK. Copiare la versione pertinente nella directory c:\toaster ed eseguire il comando seguente.
devcon.exe update <inf> <hwid>È consigliabile usare le virgolette per <hwid>. Per l'esempio di tostapane, sarà:
devcon.exe update c:\toaster\toaster.inf "{b85b7c50-6a01-11d2-b841-00c04fad5171}\MsToaster"
Disinstallazione del pacchetto driver:
Un pacchetto driver non deve essere rimosso dal sistema mentre un dispositivo lo usa ancora. Se il dispositivo deve essere rimosso per rimuovere il pacchetto driver, un dispositivo può essere rimosso usando lo strumento Devcon usando l'opzione "remove".
devcon.exe /? mostra tutte le opzioni per questo strumento. Per ottenere informazioni specifiche sull'uso di un'opzione, è necessario aggiungere "help" come illustrato di seguito per l'opzione "remove".
devcon.exe help remove
Dopo aver rimosso il dispositivo, per rimuovere il driver sono necessari due comandi. Usare il primo comando con l'opzione "dp_enum" per trovare il nome del file inf del driver corrispondente al pacchetto driver installato nel computer.
devcon dp_enum
Questo comando mostrerà l'elenco di tutti i file oemNnn.inf corrispondenti a un pacchetto driver, dove Nnn è un numero decimale con le informazioni sulla classe e Le informazioni fornite, come illustrato di seguito.
oem39.inf
Provider: Intel
Class: Network adapters
oem4.inf
Provider: Dell
Class: ControlVault Device
Per rimuovere il pacchetto driver corrispondente da DriverStore, usare il comando seguente illustrato di seguito per il driver Intel "Network Adapters":
devcon.exe dp_delete oem39.inf
Verificare che il driver Test-Signed funzioni correttamente
Per verificare che Toastpkg funzioni correttamente:
Avviare Gestione dispositivi
Selezionare Tostapane nell'elenco dei dispositivi. Per un esempio, vedere lo screenshot seguente.
Per aprire la finestra di dialogo Proprietà del driver, fare doppio clic su Tostapane di esempio del pacchetto Tostapane e selezionare Proprietà
Per verificare che Il tostapane funzioni correttamente, nella scheda Generale selezionare la casella Stato dispositivo
Gestione dispositivi può essere usato per disinstallare il dispositivo e il driver dalla finestra di dialogo Proprietà.
Come risolvere i problemi relativi ai driver Test-Signed
Consultare la sezione Risoluzione dei problemi di installazione della firma del driver se si verificano problemi con queste procedure.