Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Aplikacje systemu Windows mogą teraz tworzyć procesy systemu Linux działające w podsystemie Windows dla systemu Linux (WSL) i korzystać z nich za pomocą wtyczek WSL. Ten artykuł zawiera omówienie sposobu ich działania i rozpoczynania korzystania z nich.
Opis funkcji wtyczki
Wtyczki WSL zapewniają następujące podstawowe funkcje:
- Umożliwia aplikacjom określenie pliku wykonywalnego systemu Windows uruchamianego po uruchomieniu maszyny wirtualnej WSL
- Plik wykonywalny systemu Windows może tworzyć procesy systemu Linux wewnątrz biblioteki WSL i komunikować się bezpośrednio z nimi przy użyciu zwirtualizowanego gniazda
Dzięki tym aplikacjom systemu Windows można opierać się na środowiskach WSL i zapewniać dodatkowe funkcje związane z podsystemem Windows dla systemu Linux.
Instalowanie wtyczki
Jako twórca wtyczki WSL możesz zainstalować wtyczkę na maszynie, ustawiając klucz rejestru, aby wskazać plik DLL wtyczki.
Jako użytkownik programu WSL każda używana aplikacja automatycznie zainstaluje wtyczki WSL w ramach normalnego procesu instalacji.
Tworzenie własnej wtyczki
Aby uruchomić projekt wtyczki, należy skompilować bibliotekę dll Win32. Najprostszym sposobem skonfigurowania przy użyciu tego rozwiązania jest wypróbowanie przykładowego projektu wtyczki WSL. Można to zrobić, klonując przykładowe repozytorium wtyczki WSL do folderu git clone lokalnego i otwierając je w programie Visual Studio.
Po otwarciu dllmain.cpp projektu przejdź do pliku i zobaczysz listę funkcji dostępnych dla wtyczek WSL.
Następnie możesz nacisnąć kartę "Kompilacja" i skompilować projekt, który zwróci bibliotekę DLL gotową do użycia, prawdopodobnie w obszarze wsl-plugin-sample\x64\Debug\WSLPluginSample.dll.
Testowanie wtyczki
Wtyczki WSL będą uruchamiane tylko wtedy, gdy są podpisane cyfrowo. Aby to przetestować, należy włączyć podpisywanie testowe na maszynie.
Włączanie podpisywania testów i tworzenie certyfikatu testowego
Otwórz okno programu PowerShell z podwyższonym poziomem uprawnień i włącz podpisywanie testowe , uruchamiając następujące polecenie:
## If this command results in "The value is protected by Secure Boot policy and cannot be modified or deleted"
## Then reboot the PC, go into BIOS settings, and disable Secure Boot. BitLocker may also affect your ability to modify this setting.
Bcdedit.exe -set TESTSIGNING ON
Po włączeniu podpisywania testowego (może być wymagane ponowne uruchomienie) w wierszu polecenia programu PowerShell z podwyższonym poziomem uprawnień, który znajduje się w katalogu pliku WSLPluginSample.dll utworzonego powyżej utworzymy certyfikat testowy WSL:
# Create the cert
$certname = "WSLPluginTestCert"
$cert = New-SelfSignedCertificate -Subject "CN=$certname" -CertStoreLocation "Cert:\CurrentUser\My" -KeyExportPolicy Exportable -KeySpec Signature -KeyLength 2048 -KeyAlgorithm RSA -HashAlgorithm SHA256 -Type CodeSigningCert
# Export it to a local path
Export-Certificate -Cert $cert -FilePath ".\$certname.cer"
# Sign the DLL file
Set-AuthenticodeSignature -FilePath "C:\dev\Path\To\Your\WSLPlugin.dll" -Certificate $cert
Ostatnio zaimportuj certyfikat do zaufanego głównego urzędu certyfikacji:
Import-Certificate -FilePath ".\$certname.cer" -CertStoreLocation Cert:\LocalMachine\Root"
Aby uzyskać więcej informacji, zobacz stronę tworzenia dokumentacji certyfikatu z podpisem własnym .
Instalowanie wtyczki
W tym samym oknie programu PowerShell z podwyższonym poziomem uprawnień uruchom poniższe polecenie, aby zainstalować wtyczkę i pamiętaj, aby zmienić ścieżkę do biblioteki DLL wtyczki na istniejącą ścieżkę:
Set-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Lxss\Plugins" -Name "demo-plugin" -Value "C:\Path\to\plugin.dll" -Force
Aby użyć wtyczki, uruchom ponownie usługę wsl za pomocą polecenia:
Stop-Service -Name "wslservice" -Force
wsl.exe echo "test"
Wtyczka powinna zostać załadowana. Aby uzyskać więcej informacji, jeśli wtyczka nie może załadować wtyczki, zobacz sekcję Rozwiązywanie problemów i dodatkowe informacje .
A następnie po zakończeniu możesz uruchomić to polecenie, aby usunąć wtyczkę (pamiętaj, że musisz ponownie uruchomić usługę WSL, aby zaczęły obowiązywać):
Remove-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Lxss\Plugins" -Name "demo-plugin" -Force
Rozwiązywanie problemów i dodatkowe informacje
Typowe kody błędów:
- Wsl/Service/CreateInstance/CreateVm/Plugin/ERROR_MOD_NOT_FOUND —> nie można załadować biblioteki DLL wtyczki. Sprawdź, czy ścieżka rejestracji wtyczki jest poprawna
- Wsl/Service/CreateInstance/CreateVm/Plugin/TRUST_E_NOSIGNATURE —> biblioteka DLL wtyczki nie jest podpisana lub jego podpis nie jest zaufany przez komputer
- Wsl/Service/CreateInstance/CreateVm/Plugin/* —> biblioteka DLL wtyczki zwróciła błąd w WSLPLUGINAPI_ENTRYPOINTV1 lub OnVmStarted()
- Wsl/Service/CreateInstance/Plugin/* —> biblioteka DLL wtyczki zwróciła błąd w elemecie OnDistributionStarted()
Wtyczki — miejsce użytkownika systemu Linux
Procesy systemu Linux utworzone za pomocą narzędzia ExecuteBinary() będą działać w głównej przestrzeni nazw maszyny wirtualnej WSL2. Ta przestrzeń nazw nie jest skojarzona z żadną dystrybucją i ma bardzo minimalny system plików głównych oparty na mariner.
Ten system plików jest zapisywalnym tmpfs, co oznacza, że wszystkie zmiany wprowadzone w nim zostaną porzucone po zamknięciu maszyny wirtualnej WSL2.
Zawartość głównej przestrzeni nazw można sprawdzić, uruchamiając polecenie wsl --debug-shell , gdy program WSL jest uruchomiony.
Uwagi dodatkowe
- Wszystkie wtyczki WSL są synchroniczne, co oznacza, że WSL będzie czekać na ukończenie haków wtyczki przed kontynuowaniem.
- Każdy błąd zwrócony przez wtyczkę jest uznawany za krytyczny przez WSL (co oznacza, że dystrybucja użytkownika nie zostanie uruchomiona)
- Kod wtyczki działa w tej samej przestrzeni adresowej co usługa WSL. Wszelkie awarie w wtyczki spowodują awarię całej usługi WSL, co może spowodować utratę danych
Windows Subsystem for Linux