Problemi di Windows Display Driver Model (WDDM) a 64 bit

Per consentire l'esecuzione di applicazioni a 32 bit in un sistema operativo a 64 bit, è necessario specificare un driver di visualizzazione in modalità utente a 32 bit oltre al driver di visualizzazione in modalità utente a 64 bit che richiedono applicazioni a 64 bit. Tuttavia, solo la versione a 64 bit di un driver miniport visualizzato è necessaria in un sistema operativo a 64 bit. Windows in Windows (WOW64) consente l'esecuzione di applicazioni a 32 bit in un sistema operativo a 64 bit. Per altre informazioni, vedere Supporto di I/O a 32 bit nel driver a 64 bit.

Per installare un driver visualizzato in modalità utente a 32 bit in un sistema operativo a 64 bit, la voce seguente deve essere impostata in una sezione del Registro di sistema del componente aggiuntivo del file INF per il driver miniport visualizzato del dispositivo grafico. Ciò deve verificarsi in modo che il nome DLL del driver visualizzato in modalità utente a 32 bit venga aggiunto al Registro di sistema durante l'installazione del driver:

 [Xxx_SoftwareDeviceSettings]
...
 HKR,, UserModeDriverNameWow, %REG_MULTI_SZ%, Xxx.dll
...

Il file INF deve contenere informazioni per indirizzare il sistema operativo per copiare il driver di visualizzazione in modalità utente a 32 bit nella directory %systemroot%\SysWOW64 del sistema. Per altre informazioni, vedere Direttiva COPYFiles INF e sezione INF DestinationDirs.

Poiché WOW64 non può elaborare strutture di dati opache o non tipiate, ad esempio la struttura D3DDDICB_ALLOCATE passata tramite la funzione pfnAllocateCb , non può eseguire una conversione automatica da 32 bit a 64 bit. Pertanto, per il corretto funzionamento di WOW64, è necessario considerare gli elementi seguenti quando si scrive un driver di visualizzazione in modalità utente a 32 bit da eseguire in un sistema operativo a 64 bit:

  • Evitare puntatori o tipi di dati sensibili a più sistemi operativi, ad esempio, SIZE_T o HANDLE. Oltre a rendere le dimensioni dell'intera variabile di struttura, questi tipi di dati a larghezza variabile rendono l'allineamento e la posizione dei singoli membri diversi. Se i membri della larghezza della variabile non sono inevitabili, è possibile aggiungere un altro membro per indicare che la struttura dei dati proviene da un driver di visualizzazione in modalità utente a 32 bit. Il driver miniport a 64 bit può quindi eseguire correttamente la conversione.

  • Anche se i membri di larghezza delle variabili non sono presenti, potrebbe essere necessario considerare i requisiti di allineamento specifici dell'architettura. Ad esempio, in x64, un oggetto UINT64 (o QWORD) deve essere allineato a 8 byte. Poiché un driver di visualizzazione in modalità utente a 32 bit compilato da un compilatore standard a 32 bit potrebbe non allineare correttamente questi tipi a 64 bit nativi, il driver miniport a 64 bit potrebbe non essere in grado di accedere con precisione ai dati dal driver di visualizzazione in modalità utente a 32 bit. È tuttavia possibile forzare l'allineamento usando le direttive del compilatore pragma appropriate. Anche se l'uso delle direttive del compilatore pragma potrebbe causare un leggero spreco di spazio nei sistemi operativi a 32 bit, ciò consente di usare driver di visualizzazione identici in modalità utente a 32 bit e a 64 bit. Se non è possibile forzare l'allineamento usando le direttive del compilatore pragma appropriate, il driver di visualizzazione in modalità utente a 32 bit che viene eseguito usando WOW64 in un sistema operativo a 64 bit deve essere diverso dal driver di visualizzazione in modalità utente a 32 bit in esecuzione in un sistema operativo a 32 bit.