Udostępnij przez


Problemy z 64-bitową wersją Windows Display Driver Model (WDDM)

Aby umożliwić uruchamianie 32-bitowych aplikacji w 64-bitowym systemie operacyjnym, oprócz 64-bitowego sterownika wyświetlania w trybie użytkownika musi być dostarczany sterownik wyświetlania w trybie 64-bitowym, którego wymagają aplikacje 64-bitowe. Jednak tylko 64-bitowa wersja sterownika miniportu wyświetlacza jest wymagana w 64-bitowym systemie operacyjnym. WOW64 umożliwia uruchamianie aplikacji 32-bitowych na 64-bitowym systemie operacyjnym Windows. Aby uzyskać więcej informacji, zobacz Obsługa 32-bitowych operacji we/wy w sterowniku 64-bitowym.

Aby zainstalować 32-bitowy sterownik wyświetlania w trybie użytkownika w 64-bitowym systemie operacyjnym, należy ustawić następujący wpis w sekcji add-registry pliku INF dla sterownika miniportu wyświetlacza urządzenia graficznego. Musi się tak zdarzyć, aby 32-bitowa nazwa biblioteki DLL sterownika wyświetlania trybu użytkownika została dodana do rejestru podczas instalacji sterownika:

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

Plik INF musi zawierać informacje, aby skierować system operacyjny do skopiowania 32-bitowego sterownika wyświetlania trybu użytkownika do katalogu %systemroot%\SysWOW64. Aby uzyskać więcej informacji, zobacz INF CopyFiles Directive i INF DestinationDirs Section.

Ponieważ WOW64 nie może przetwarzać nieprzezroczystych lub nietypowych struktur danych, takich jak struktura D3DDDICB_ALLOCATE przekazywana za pośrednictwem funkcji pfnAllocateCb , nie może wykonać automatycznej konwersji z 32 bitów do 64 bitów. W związku z tym, aby aplikacja WOW64 działała prawidłowo, podczas pisania 32-bitowego sterownika wyświetlania trybu użytkownika należy wziąć pod uwagę następujące elementy, aby działał w 64-bitowym systemie operacyjnym:

  • Unikaj wskaźników lub typów danych, które są wrażliwe na wiele systemów operacyjnych, takich jak SIZE_T lub HANDLE. Wraz z możliwością zmieniania rozmiaru całej struktury, te typy danych o zmiennej szerokości sprawiają, że wyrównanie i położenie poszczególnych składników różnią się. Jeśli składniki o zmiennej szerokości są nieuniknione, możesz dodać kolejny składnik, aby wskazać, że struktura danych pochodzi ze sterownika wyświetlania 32-bitowego trybu użytkownika. Sterownik miniportu wyświetlacza 64-bitowego może następnie prawidłowo wykonać konwersję.

  • Nawet jeśli nie ma członów o zmiennej szerokości, może być konieczne rozważenie wymagań dotyczących wyrównania specyficznego dla architektury. Na przykład, w przypadku architektury x64 wartość UINT64 (lub QWORD) powinna być wyrównana do 8 bajtów. Ponieważ 32-bitowy sterownik wyświetlania w trybie użytkownika skompilowany przez standardowy kompilator 32-bitowy może nie wyrównać tych natywnych typów 64-bitowych, sterownik miniportu wyświetlacza 64-bitowego może nie być w stanie dokładnie uzyskać dostępu do danych ze sterownika wyświetlania w trybie użytkownika 32-bitowego. Można jednak wymusić wyrównanie przy użyciu odpowiednich dyrektyw kompilatora pragma . Chociaż używanie dyrektyw kompilatora pragma może spowodować niewielkie straty miejsca w 32-bitowych systemach operacyjnych, pozwala to używać identycznych 32-bitowych sterowników wyświetlania trybu użytkownika w 32-bitowych i 64-bitowych systemach operacyjnych. Jeśli nie można wymusić wyrównania przy użyciu odpowiednich dyrektyw kompilatora pragma , sterownik wyświetlania trybu użytkownika 32-bitowego, który działa przy użyciu WOW64 w 64-bitowym systemie operacyjnym, musi być inny niż sterownik wyświetlania w trybie użytkownika 32-bitowym uruchomionym w 32-bitowym systemie operacyjnym.