Utilizzo di Driver Verifier per la risoluzione dei problemi relativi a driver di periferica in Windows

Traduzione articoli Traduzione articoli
Identificativo articolo: 244617 - Visualizza i prodotti a cui si riferisce l?articolo.
Questo articolo Ŕ stato precedentemente pubblicato con il codice di riferimento I244617
Importante In questo articolo sono contenute informazioni su come modificare il Registro di sistema. Prima di modificare il Registro di sistema, eseguire una copia di backup e assicurarsi di sapere come ripristinarlo in caso di problemi. Per ulteriori informazioni su come eseguire il backup, ripristinare e modificare il Registro di sistema, fare clic sul numero dell'articolo della Microsoft Knowledge Base riportato di seguito:
256986 Descrizione del Registro di sistema di Microsoft Windows
Espandi tutto | Chiudi tutto

In questa pagina

Sommario

Driver Verifier Ŕ incluso in Windows 2000, Windows XP e Windows Server 2003 allo scopo di favorire la stabilitÓ e l'affidabilitÓ del sistema e pu˛ essere utilizzato per la risoluzione dei problemi relativi ai driver. In Windows Ŕ possibile che i componenti in modalitÓ kernel causino danni o errori di sistema per via di un driver sviluppato in modo errato, come nel caso di una versione precedente di un driver Windows Driver Model (WDM). In questo articolo viene descritto come utilizzare Driver Verifier per isolare e risolvere i problemi causati da un driver a livello di sistema.

Informazioni

In questo articolo vengono affrontati i seguenti argomenti:
  • CapacitÓ di Driver Verifier
  • Verifica I/O
  • Requisiti di Driver Verifier
  • Attivazione di Driver Verifier
  • Debug delle violazioni di Driver Verifier
  • Driver Verifier e driver per la grafica
  • Driver Verifier Manager (Verifier.exe)
  • Contatori globali
  • Verifica pool
  • Impostazioni
  • Impostazioni volatili
  • Interfaccia della riga di comando
  • Ulteriori informazioni per gli sviluppatori di driver

CapacitÓ di Driver Verifier

Per utilizzare Driver Verifier, eseguire Verifier.exe e riavviare il computer. Per iniziare l'analisi dei driver presenti nel sistema non Ŕ necessario apportare altre modifiche.

Con Driver Verifier vengono fornite le seguenti capacitÓ:

Allocazioni di memoria

Viene eseguito il tentativo di assegnare tutte le allocazioni di memoria di un driver da un pool speciale. AnzichÚ condividere le allocazioni di memoria con il resto del sistema, le allocazioni di questo driver vengono isolate e vincolate negando qualsiasi autorizzazione di accesso. Questa capacitÓ determina se un driver causa l'allocazione di una condivisione del pool superiore a quella a esso riservata, provocando di conseguenza danni e instabilitÓ del sistema. Se si attiva questa capacitÓ e il computer di destinazione dispone di sufficiente memoria fisica e virtuale, tutte le allocazioni dei driver vengono automaticamente reindirizzate in un pool speciale.

Pressione estrema sulla memoria

╚ possibile esercitare una pressione estrema sulla memoria per un driver specifico senza influire su altri driver e indipendentemente dalla dimensione della memoria. A questo scopo, Ŕ possibile immettere istruzioni per il sistema di gestione della memoria, affinchÚ invalidi tutti i dati e il codice di paging del driver, oltre ai dati, al codice e al pool di paging del sistema. In questo modo Ŕ possibile rilevare se un driver trattiene erroneamente spinlock o causa aumenti di IRQL, ottenendo quindi l'accesso a dati o codice di paging. L'imposizione di una pressione estrema sulla memoria pu˛ essere utilizzata per rilevare problemi intermittenti e isolarne la causa.

Convalida dei parametri

Tutte le chiamate per spinlock, IRQL e allocazioni di pool di memoria effettuate dal driver ricevono automaticamente una convalida dei parametri. Ci˛ significa che vengono effettuati controlli per assicurare le seguenti condizioni:
  • Un aumento di IRQL Ŕ effettivamente tale (l'IRQL corrente Ŕ inferiore a quello di destinazione).
  • Una diminuzione di IRQL Ŕ effettivamente tale.
  • Uno spinlock viene rilasciato due volte.
  • Le acquisizioni o i rilasci di spinlock vengono effettuati al livello IRQL corretto.
  • Le allocazioni o i rilasci del pool di paging vengono effettuati al livello IRQL corretto (APC_LEVEL o inferiore).
  • Le allocazioni o i rilasci del pool non di paging vengono effettuati al livello IRQL corretto (DISPATCH_LEVEL o inferiore).
  • Nessun valore causale (non inizializzato) viene specificato per queste API (Application Programming Interface).

Inserimento di errori di allocazione del pool di memoria

╚ possibile provocare errori casuali delle allocazioni di pool di memoria che non sono contrassegnate come MUST_SUCCEED da parte del driver, per assicurarsi che il driver sia in grado di gestire correttamente condizioni di memoria insufficiente.

Rilascio del pool

Al momento del rilascio della memoria viene esaminato l'intero pool per assicurarsi che all'interno dell'allocazione del pool di memoria non siano presenti timer in sospeso. In questi casi diventerebbe infatti particolarmente difficile registrare le cause degli arresti di sistema.

Rilevamento di perdite di memoria

Tutte le allocazioni del pool di memoria del driver vengono registrate automaticamente. Qualora una delle allocazioni non venisse rilasciata al momento di scaricare i driver, viene effettuato un controllo errori automatico. Per visualizzare tutte le allocazioni non rilasciate, Ŕ possibile utilizzare il comando del debugger del kernel !verifier 3. Questo comando pu˛ essere utilizzato in qualsiasi momento, prima di scaricare i driver, per visualizzarne le allocazioni di memoria.

Controllo dello scaricamento dei driver

Questo controllo viene eseguito per individuare i driver scaricati che non liberano le risorse utilizzate e che pertanto aumentano la possibilitÓ di un controllo degli errori di sistema subito dopo essere stati scaricati. Le risorse che il driver potrebbe non liberare includono elenchi look-aside, chiamate DPC (Deferred Procedure Call) in sospeso, thread di lavoro, code, timer e altre.

Verifica I/O

Se si attiva il flag Verifica I/O tramite lo strumento Verifier o la chiave del Registro di sistema VerifyDriverLevel (per ulteriori informazioni sull'argomento vedere la sezione "Attivazione di Driver Verifier" in questo articolo), vengono attivate alcune verifiche di I/O Manager, quali:
  • Tutti i pacchetti IRP allocati tramite IoAllocateIrp vengono allocati da un pool speciale.
  • Vengono effettuati controlli in IoCallDriver, IoCompleteRequest e IoFreeIrp per rilevare eventuali messaggi di errori del driver.
  • Tutti gli errori di Verifica I/O vengono marcati con il codice DRIVER_VERIFIER_IOMANAGER_VIOLATION (0xC9).

Requisiti di Driver Verifier

L'unico requisito Ŕ l'installazione di Windows 2000, Windows XP o Windows Server 2003. ╚ possibile attivare Driver Verifier sulle versioni commerciali e controllate di Windows. Per ulteriori informazioni sugli aspetti da considerare prima di attivare Driver Verifier Manager sui server di produzione, vedere l'articolo della Microsoft Knowledge Base 251233 (il contenuto potrebbe essere in inglese). Se nel sistema Ŕ installato Norton Antivirus, evitare di attivare Rilevamento blocco critico (deadlock) in Driver Verifier, come indicato nell'articolo della Microsoft Knowledge Base 325672.

Attivazione di Driver Verifier

╚ possibile attivare Driver Verifier utilizzando Verifier.exe. Verifier.exe Ŕ incluso in tutte le copie di Windows e viene installato automaticamente nella cartella System32. Verifier.exe dispone di un'interfaccia della riga di comando e di un'interfaccia visiva grafica (GUI) che consentono di specificare i driver e i livelli di verifica appropriati. ╚ anche possibile visualizzare le statistiche di Driver Verifier in tempo reale. Per ulteriori informazioni, vedere la sezione "Driver Verifier Manager" in questo articolo.

Debug delle violazioni di Driver Verifier

Sia il comando !verifier nel debugger del kernel, sia lo strumento Verifier.exe consentono di visualizzare la configurazione corrente e le statistiche di Driver Verifier in tempo reale.

Tutte le violazioni di Driver Verifier generano un controllo errori, i pi¨ comuni dei quali sono i seguenti, anche se non necessariamente tutti:
  • IRQL_NOT_LESS_OR_EQUAL 0xA
  • PAGE_FAULT_IN_NONPAGED_AREA 0x50
  • PAGE_FAULT_IN_NONPAGED_AREA 0x50
  • ATTEMPTED_WRITE_TO_READONLY_MEMORY 0xBE
  • SPECIAL_POOL_DETECTED_MEMORY_CORRUPTION 0xC1
  • DRIVER_VERIFIER_DETECTED_VIOLATION 0xC4
  • DRIVER_CAUGHT_MODIFYING_FREED_POOL 0xC6
  • TIMER_OR_DPC_INVALID 0xC7
  • DRIVER_VERIFIER_IOMANAGER_VIOLATION 0xC9

Driver Verifier e driver per la grafica

I driver per la grafica in modalitÓ kernel di Windows, quali le DLL dei driver video e della stampante, non sono in grado di richiamare direttamente il punto di ingresso del pool. Le allocazioni di memoria vengono invece eseguite indirettamente utilizzando richiamate DDI (Device Driver Interface) a Win32k.sys. Ad esempio, EngAllocMem viene richiamato da un driver per la grafica per l'allocazione esplicita del pool di memoria. Anche altre richiamate specifiche, come EngCreatePalette ed EngCreateBitmap restituiscono il pool di memoria.

Per fornire lo stesso tipo di test automatici per i driver per la grafica, in Win32k.sys Ŕ incorporato il supporto per alcune funzioni di Driver Verifier. In ogni caso, poichÚ i driver per la grafica presentano maggiori restrizioni rispetto ad altri driver in modalitÓ kernel, richiedono solo un sottoinsieme delle funzionalitÓ di Driver Verifier. In particolare, non sono necessari il controllo degli IRQL e la verifica dell'I/O. Le altre funzionalitÓ, ossia l'utilizzo di un pool speciale, l'errore casuale delle allocazioni di memoria e il controllo dell'allocazione di memoria, sono supportati a vari livelli nelle diverse richiamate alle DDI per la grafica.

Gli errori casuali sono supportati per le seguenti funzioni di richiamate alle DDI per la grafica:
  • EngAllocMem
  • EngAllocUserMem
  • EngCreateBitmap
  • EngCreateDeviceSurface
  • EngCreateDeviceBitmap
  • EngCreatePalette
  • EngCreateClip
  • EngCreatePath
  • EngCreateWnd
  • EngCreateDriverObj
  • BRUSHOBJ_pvAllocRbrush
  • CLIPOBJ_ppoGetPath
Inoltre, per EngAllocMem sono supportati l'utilizzo del pool speciale e il controllo dell'allocazione di memoria.

L'attivazione di Driver Verifier per i driver per la grafica Ŕ identica all'attivazione per altri driver. Fare riferimento in proposito alla sezione "Attivazione di Driver Verifier" di questo articolo per ulteriori informazioni. I flag non supportati, quale il controllo degli IRQL, vengono ignorati. ╚ inoltre possibile utilizzare il comando del debugger del kernel !gdikdx.verifier per esaminare lo stato corrente di Driver Verifier e le tracce del pool relative ai driver per la grafica.

NOTA: l'impostazione dell'errore di allocazione casuale dovrebbe essere utilizzata solo per i test di affidabilitÓ. L'uso di questa impostazione potrebbe causare la visualizzazione di messaggi di errore relativi al rendering, pertanto si sconsiglia di utilizzarla per i test di verifica destinati al controllo della correttezza di implementazione dei driver per la grafica, ad esempio per confrontare l'output di un driver per la grafica con un'immagine di riferimento.

Driver Verifier Manager (Verifier.exe)

Driver Verifier Manager (Verifier.exe) Ŕ il mezzo preferenziale per creare e modificare le impostazioni di Driver Verifier e per rilevarne le statistiche. Verifier.exe si trova nella cartella %WinDir%\System32 di tutte le installazioni di Windows.

Stato driver

La pagina delle proprietÓ Stato driver fornisce un'immagine dello stato corrente di Driver Verifier visualizzando i driver rilevati dallo strumento. Lo stato pu˛ essere:
  • Caricato: il driver Ŕ attualmente caricato e verificato.
  • Scaricato: il driver non Ŕ attualmente caricato, ma lo Ŕ stato almeno una volta dopo il riavvio del computer.
  • Mai caricato: il driver non Ŕ mai stato caricato. Questo stato pu˛ indicare che il file d'immagine del driver Ŕ danneggiato o che Ŕ stato specificato un nome di driver mancante dal sistema.
Per ordinare l'elenco per nome di driver o stato, fare clic sull'intestazione. Nell'area superiore destra della finestra di dialogo Ŕ possibile visualizzare i tipi correnti di verifica in vigore. Se non si passa alla modalitÓ di aggiornamento manuale, lo stato dei driver viene aggiornato automaticamente. ╚ possibile modificare la frequenza di aggiornamento utilizzando i pulsanti di opzione presenti nella parte inferiore sinistra della finestra di dialogo. ╚ anche possibile imporre un aggiornamento dello stato scegliendo Aggiorna.

Se si attiva il flag Pool speciale e a esso viene assegnato meno del 95% delle allocazioni di memoria, in questa finestra verrÓ visualizzato un messaggio di errore. In questo caso, sarÓ necessario selezionare un insieme inferiore di driver da verificare oppure aggiungere una maggiore quantitÓ di memoria fisica al computer per una migliore copertura della verifica delle allocazioni di memoria.

Contatori globali

La pagina delle proprietÓ Contatori globali consente di visualizzare il valore corrente di alcuni contatori gestiti da Driver Verifier. Il valore zero per un contatore pu˛ indicare che il flag di Driver Verifier associato non Ŕ attivato. Un valore 0 per il contatore relativo ad altro/errori, ad esempio, indica che il flag per la simulazione risorse in esaurimento non Ŕ attivato. ╚ possibile monitorare l'attivitÓ dello strumento, poichÚ i valori dei contatori vengono aggiornati automaticamente per impostazione predefinita. ╚ possibile modificare la frequenza di aggiornamento, passare all'aggiornamento manuale o imporre l'aggiornamento utilizzando il gruppo di controlli presenti nella parte inferiore sinistra della finestra di dialogo.

Verifica pool

In questa finestra delle proprietÓ sono riportate ulteriori statistiche rilevate da Driver Verifier. Tutti i contatori presenti in questa finestra riguardano il flag Verifica pool di Verifier. Per la maggior parte si tratta di contatori per driver, ad esempio le allocazioni correnti, i byte allocati attualmente e cosý via. Ci˛ significa che per visualizzare i contatori per un driver specifico, Ŕ necessario selezionare il nome del driver desiderato dalla casella combinata superiore.

Impostazioni

╚ possibile utilizzare questa finestra delle proprietÓ per creare e modificare le impostazioni di Driver Verifier. Le impostazioni verranno salvate nel Registro di sistema e perchÚ abbiano effetto Ŕ necessario riavviare il computer. Per visualizzare i driver attualmente installati, Ŕ possibile utilizzare l'elenco contenuto nella finestra. Per ogni driver Ŕ possibile che sia indicato un valore di stato analogo ai seguenti:
  • Verify abilitato: il driver Ŕ attualmente sottoposto a verifica.
  • Verify disabilitato: il driver non Ŕ attualmente sottoposto a verifica.
  • Verify abilitato (richiesto riavvio): il driver verrÓ verificato solo dopo il successivo riavvio.
  • Verify disabilitato (richiesto riavvio): il driver Ŕ attualmente sottoposto a verifica, ma non verrÓ verificato dopo il successivo riavvio.
╚ possibile selezionare uno o pi¨ driver dall'elenco e modificarne lo stato utilizzando i due pulsanti posti sotto l'elenco. ╚ anche possibile fare clic con il pulsante destro del mouse su un nome di driver per visualizzare il menu di scelta rapida nel quale Ŕ possibile passare da uno stato all'altro.

Nella parte inferiore della finestra di dialogo Ŕ possibile specificare ulteriori driver che si desidera verificare dopo il successivo riavvio, separandoli con uno spazio. In genere questo controllo di modifica risulta utile quando si desidera installare un nuovo driver che non Ŕ giÓ caricato.

Se il gruppo di pulsanti di opzione che viene visualizzato all'inizio dell'elenco Ŕ impostato su Verifica tutti i driver, l'elenco e i pulsanti Verifica e Non verificare e il controllo per la modifica non saranno disponibili. Con questa impostazione dopo il successivo riavvio verranno verificati tutti i driver presenti nel sistema.

╚ possibile impostare il tipo di verifica utilizzando le caselle di controllo nella parte superiore destra della finestra di dialogo. ╚ possibile attivare Verifica I/O a livello 1 o livello 2. Il tipo di verifica effettuato con l'impostazione Livello 2 Ŕ pi¨ approfondito di Livello 1.

╚ necessario salvare le modifiche apportate alle impostazioni facendo clic su Applica. Nella finestra sono presenti altri due pulsanti:
  • Impostazioni preferite: vengono selezionate le impostazioni pi¨ comuni e viene effettuata la verifica di tutti i driver.
  • Reimposta tutto: annulla tutte le impostazioni di Driver Verifier, in modo che non venga verificato alcun driver.
Dopo avere fatto clic sul pulsante Applica, per rendere effettive le modifiche Ŕ necessario riavviare il computer.

Impostazioni volatili

╚ possibile utilizzare questa finestra delle proprietÓ per modificare immediatamente i flag di Driver Verifier. Solo lo stato di alcuni flag pu˛ essere cambiato ed Ŕ impossibile modificare l'elenco dei driver da verificare. Dopo la modifica dello stato di alcune caselle di controllo, fare clic su Applica per rendere effettive le modifiche. Le modifiche diventano subito effettive e rimangono valide fino a quando si apportano ulteriori modifiche o si riavvia il computer.

Interfaccia della riga di comando

Verifier.exe pu˛ essere eseguito anche dalla riga di comando. Per ulteriori informazioni digitare verifier.exe /? al prompt dei comandi. Nell'elenco seguente sono riportati i flag della riga di comando pi¨ comuni:
  • verifier.exe /flags valore [/iolevel 2]
    Consente di specificare un valore decimale dei flag di Driver Verifier e anche il livello della verifica I/O. Per un elenco dei flag disponibili digitare verifier.exe /? al prompt dei comandi o fare riferimento alla sezione "Attivazione di Driver Verifier" in questo articolo.

    Sostituire il parametro valore con uno dei seguenti valori di bit per la verifica:
    0 - Controllo pool speciale
    1 - Imponi controllo IRQL
    2 - Simulazione risorse in esaurimento
    3 - Verifica pool
    4 - Verifica I/O
    5 ? Rilevamento blocco critico (deadlock)
    6 - Verifica I/O avanzata
    7 - Verifica DMA
    Digitare ad esempio il seguente comando:
    c:\verifier /flags 3 /iolevel 2
    NOTA: il valore predefinito per il livello di verifica I/O Ŕ 1. Se nei flag non viene impostato il bit di verifica I/O, il valore viene ignorato.
  • verifier.exe /all
    Verifica tutti i driver nel sistema.
  • verifier.exe /volatile /flags valore
    Cambia subito i flag di Verifier.
  • verifier.exe /reset
    Annulla tutte le impostazioni correnti di Driver Verifier.
  • verifier /query
    Scarica lo stato e i contatori di Driver Verifier nell'output standard.
  • verifier.exe /log LOG_FILE_NAME [/interval secondi]
    Registra lo stato e i contatori di Driver Verifier in un file di registro, dove secondi Ŕ l'intervallo di tempo specificato.

Ulteriori informazioni per gli sviluppatori di driver

Nelle sezioni che seguono vengono forniti ulteriori dettagli sulle impostazioni di Driver Verifier che potrebbero risultare utili per gli sviluppatori di driver. Tali impostazioni non sono di solito necessarie per i professionisti IT.
Avviso L'errato utilizzo dell'editor del Registro di sistema pu˛ causare gravi problemi che potrebbero richiedere la reinstallazione del sistema operativo. Microsoft non Ŕ in grado di garantire la risoluzione di problemi causati dall'errato utilizzo dell'editor del Registro di sistema. L'utilizzo dell'editor del Registro di sistema Ŕ a rischio e pericolo dell'utente.
Per attivare Driver Verifier modificando il Registro di sistema, attenersi alla seguente procedura:
  1. Avviare l'editor del Registro di sistema (Regedit.exe).
  2. Individuare la seguente chiave del Registro di sistema:
    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management\VerifyDrivers
  3. Modificare la chiave REG_SZ.
Nella chiave REG_SZ impostare i nomi dei driver che si desidera verificare, senza distinzione tra maiuscole e minuscole. ╚ possibile specificare pi¨ driver, ma Ŕ opportuno utilizzarne uno solo per assicurarsi che le risorse di sistema disponibili non vengano esaurite troppo presto. L'esaurimento anomalo delle risorse non causa problemi di affidabilitÓ del sistema, ma Ŕ possibile che alcuni controlli del driver vengano ignorati.

Nel seguente elenco sono riportati alcuni esempi di valori della chiave REG_SZ:
  • Ntfs.sys
  • Win32k.sys ftdisk.sys
  • *.sys
╚ possibile specificare il livello di verifica del driver nella seguente chiave del Registro di sistema:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management\VerifyDriverLevel
Nel seguente elenco sono riportati i valori di campo bit per questa chiave, che Ŕ possibile combinare liberamente.
  • 0x01: tenta di soddisfare tutte le richieste di allocazione dal pool speciale.
  • 0x02: applica maggiore pressione sulla memoria per questo driver, al fine di convalidare l'uso degli IRQL in relazione all'accesso ai dati e al codice di paging.
  • 0x04: provoca il fallimento casuale di diverse richieste di allocazione di memoria. Questa azione viene eseguita solo dopo che il sistema Ŕ stato avviato e ha raggiunto un punto in cui il problema pu˛ essere trattato come se fossero situazioni possibili che Ŕ necessario gestire.
  • 0x08: attiva il controllo dell'allocazione di memoria. Prima che il driver venga scaricato o che venga effettuato un controllo errori, Ŕ necessario che tutte le allocazioni siano rilasciate.
  • 0x10: attiva la verifica I/O.
NOTA: se la chiave non esiste oppure se non si specifica un livello di verifica del driver, il valore predefinito Ŕ 3. Il valore predefinito Ŕ 0x1B se nell'utilitÓ Verifier vengono utilizzate le impostazioni preferite. Per individuare i problemi di memoria provare a impostare un valore di 0xB, che si ottiene nel modo pi¨ semplice selezionando la casella di controllo Impostazioni preferite, quindi deselezionando la casella di controllo Verifica I/O.

ProprietÓ

Identificativo articolo: 244617 - Ultima modifica: mercoledý 17 agosto 2005 - Revisione: 5.1
Le informazioni in questo articolo si applicano a
  • Microsoft Windows 2000 Server
  • Microsoft Windows 2000 Advanced Server
  • Microsoft Windows 2000 Professional Edition
  • Microsoft Windows 2000 Datacenter Server
  • Microsoft Windows XP Home Edition
  • Microsoft Windows XP Professional
  • Microsoft Windows Server 2003, Datacenter Edition (32-bit x86)
  • Microsoft Windows Server 2003, Enterprise Edition (32-bit x86)
  • Microsoft Windows Server 2003, Standard Edition (32-bit x86)
Chiavi:á
kbhowto kbenv kbprogramming KB244617
LE INFORMAZIONI CONTENUTE NELLA MICROSOFT KNOWLEDGE BASE SONO FORNITE SENZA GARANZIA DI ALCUN TIPO, IMPLICITA OD ESPLICITA, COMPRESA QUELLA RIGUARDO ALLA COMMERCIALIZZAZIONE E/O COMPATIBILITA' IN IMPIEGHI PARTICOLARI. L'UTENTE SI ASSUME L'INTERA RESPONSABILITA' PER L'UTILIZZO DI QUESTE INFORMAZIONI. IN NESSUN CASO MICROSOFT CORPORATION E I SUOI FORNITORI SI RENDONO RESPONSABILI PER DANNI DIRETTI, INDIRETTI O ACCIDENTALI CHE POSSANO PROVOCARE PERDITA DI DENARO O DI DATI, ANCHE SE MICROSOFT O I SUOI FORNITORI FOSSERO STATI AVVISATI. IL DOCUMENTO PUO' ESSERE COPIATO E DISTRIBUITO ALLE SEGUENTI CONDIZIONI: 1) IL TESTO DEVE ESSERE COPIATO INTEGRALMENTE E TUTTE LE PAGINE DEVONO ESSERE INCLUSE. 2) I PROGRAMMI SE PRESENTI, DEVONO ESSERE COPIATI SENZA MODIFICHE, 3) IL DOCUMENTO DEVE ESSERE DISTRIBUITO INTERAMENTE IN OGNI SUA PARTE. 4) IL DOCUMENTO NON PUO' ESSERE DISTRIBUITO A SCOPO DI LUCRO.

Invia suggerimenti

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com