Dela via


WSL-plugin-program

Windows-program kan nu skapa och interagera med Linux-processer som körs i Windows-undersystemet för Linux (WSL) med WSL-plugin-program. Den här artikeln ger en översikt över hur de fungerar och hur du kommer igång med dem.

Förstå plugin-funktioner

WSL-plugin-program tillhandahåller följande kärnfunktioner:

  • Tillåter att program anger en körbar Windows-fil som startar när den virtuella WSL-datorn startas
  • Den körbara Windows-filen kan skapa Linux-processer i WSL och kan kommunicera direkt med dem med hjälp av en virtualiserad socket

Med dessa kan Windows-program bygga på WSL-funktioner och tillhandahålla ytterligare funktioner relaterade till Windows-undersystemet för Linux.

Installera ett plugin-program

Som skapare av WSL-plugin-program kan du installera plugin-programmet på en dator genom att ange en registernyckel så att den pekar på plugin-programmets DLL-fil.

Och som WSL-användare installerar alla program som du använder automatiskt WSL-plugin-program som en del av deras normala installationsprocess.

Skapa ett eget plugin-program

För att starta ett plugin-projekt måste du skapa en Win32-dll. Det enklaste sättet att konfigurera detta är att prova vårt exempelprojekt för WSL-plugin-programmet. Du kan göra detta genom att klona WSL-exempellagringsplatsen för plugin-programmet till en lokal mapp med git clone och öppna den i Visual Studio.

När du öppnar projektet navigerar du till dllmain.cpp filen så visas listan över funktioner som är tillgängliga för WSL-plugin-program.

Du kan sedan trycka på fliken "Skapa" och skapa projektet, vilket ger en DLL som du kan använda, troligen under wsl-plugin-sample\x64\Debug\WSLPluginSample.dll.

Testa plugin-programmet

WSL-plugin-program körs endast om de är digitalt signerade. För att testa detta måste du aktivera testsignering på datorn.

Aktivera testsignering och skapa en testcertifiering

Öppna ett upphöjt PowerShell-fönster och aktivera testsignering genom att köra det här kommandot:

## 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

När testsignering har aktiverats (en omstart kan krävas) skapar vi ett WSL-testcertifikat i en upphöjd PowerShell-kommandotolk som finns i katalogen för din WSLPluginSample.dll fil som skapades ovan:

# 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

Importera certifikatet senast till den betrodda rotcertifikatutfärdare:

Import-Certificate -FilePath ".\$certname.cer" -CertStoreLocation Cert:\LocalMachine\Root"

Mer information finns på sidan om hur du skapar ett självsignerat certifikatdokument .

Installera plugin-programmet

I samma upphöjda PowerShell-fönster kör du kommandot nedan för att installera plugin-programmet och se till att ändra sökvägen till plugin-DLL:en till din befintliga sökväg:

Set-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Lxss\Plugins" -Name "demo-plugin" -Value "C:\Path\to\plugin.dll" -Force

Om du vill använda plugin-programmet startar du om wsl-tjänsten via:

Stop-Service -Name "wslservice" -Force
wsl.exe echo "test"

Plugin-programmet bör nu läsas in. Mer information om plugin-programmet kunde inte läsas in finns i avsnittet Felsökning och ytterligare information .

Och när du är klar kan du köra det här kommandot för att ta bort plugin-programmet (kom ihåg att du måste starta om WSL-tjänsten för att den ska börja gälla):

Remove-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Lxss\Plugins" -Name "demo-plugin" -Force

Felsökning och ytterligare information

Vanliga felkoder:

  • Wsl/Service/CreateInstance/CreateVm/Plugin/ERROR_MOD_NOT_FOUND –> Det gick inte att läsa in plugin-DLL:n. Kontrollera att registreringssökvägen för plugin-programmet är korrekt
  • Wsl/Service/CreateInstance/CreateVm/Plugin/TRUST_E_NOSIGNATURE –> Plugin-DLL:n är inte signerad eller så är dess signatur inte betrodd av datorn
  • Wsl/Service/CreateInstance/CreateVm/Plugin/* –> Plugin-DLL:n returnerade ett fel i WSLPLUGINAPI_ENTRYPOINTV1 eller OnVmStarted()
  • Wsl/Service/CreateInstance/Plugin/* –> Plugin-DLL:n returnerade ett fel i OnDistributionStarted()

Plugins Linux-användarutrymme

Linux-processer som skapas via ExecuteBinary() körs i rotnamnområdet för den virtuella WSL2-datorn. Det här namnområdet är inte associerat med någon distribution och har ett mycket minimalt Mariner-baserat rotfilsystem.

Filsystemet är en skrivbar tmpfs, vilket innebär att alla ändringar som görs i det tas bort när den virtuella WSL2-datorn stängs av.

Du kan kontrollera innehållet i rotnamnområdet genom att köra wsl --debug-shell medan WSL körs.

Ytterligare överväganden

  • Alla WSL-plugin-krokar är synkrona, vilket innebär att WSL väntar på att plugin-krokarna ska slutföras innan du fortsätter.
  • Alla fel som returneras av ett plugin-program anses vara allvarliga av WSL (vilket innebär att användarens distribution inte startar)
  • Plugin-koden körs i samma adressutrymme som WSL-tjänsten. Alla krascher i ett plugin-program kraschar hela WSL-tjänsten, vilket kan orsaka dataförlust