Julkaisupäivä:25. helmikuuta 2025
Versio:.NET 8 ja uudemmat.NET Framework, kaikki versiot
Yhteenveto
Microsoft on ottanut käyttöön suojausparannuksia Windowsin viimeaikaisiin versioihin. Nämä suojausparannukset muokkaavat tilapäisen polun käsittelyä ja saattavat aiheuttaa sen, että tietyt .NET Framework ja .NET-ohjelmointirajapinnat, kutenSystem.IO.Path.GetTempPath(), palauttavat toisen sijainnin korjaustiedoston asentamisen jälkeen.
Toimenpide pakollinen
Mitään toimia ei tarvita .NET Framework tai . NET-pohjainen sovellus. Sovelluksesi hyötyy automaattisesti ympäristöösi sovellettavista suojausparannuksista. Useimmat sovellukset eivät havaitse käyttäytymismuutoksia.
Tämän artikkelin loppuosassa kerrotaan, miten voit selvittää, voivatko nämä suojausparannukset vaikuttaa sovelluksesi suorituksenaikaisiin toimintoihin. Tässä artikkelissa on myös ohjeet suorituksenaikaisen toiminnan mukauttamiseen tarvittaessa
Soveltuva ohjelmisto
Tämä artikkeli koskee seuraavia ohjelmistoja:
-
.NET 8 ja uudemmat versiot
-
.NET Framework, kaikki versiot heinäkuun 2024 suojauspäivityksistä ja sitä seuraavista päivityksistä lähtien
Vain seuraavissa Windows update -versioissa:
-
Windows 10, versio 22H2, kun KB5052077 asennetaan
-
Windows Server 2019, kun KB5053594 on asennettu
-
Windows Server 2016, kun KB5053594 on asennettu
Tämä artikkeli ei koske .NET Framework- tai .NET-versiota, joka on käytössä Windows 11, Windows Server 2022 tai uudemmissa versioissa.
Tämä artikkeli ei koske .NET-versiota, kun sitä käytetään muissa kuin Windows-ympäristöissä.
Yksityiskohtainen kuvaus ja vaikutuslauseke
Edellä mainittujen Windows-päivitysten KB:iden jälkeen Microsoft on tuonut Win32 GetTempPath2 -ohjelmointirajapinnan vanhempiin Windowsin markkinaversioihin toimiakseen turvallisempana korvaajana vanhemmalle Win32 GetTempPath -ohjelmointirajapinnalle. Sisäisesti .NET Framework ja .NET käyttävät näitä Win32-ohjelmointirajapintoja System.IO.Path.GetTempPath() -menetelmän käyttöönottoon: Win32- GetTempPath2 ohjelmointirajapinta on ensisijainen, jos se on olemassa, ja Win32- GetTempPath ohjelmointirajapintaa käytetään varasuunnitelmana, jos GetTempPath2:ta ei ole.
Koska nämä suorituskykyilmaisimien avulla uudet Win32- GetTempPath2 -ohjelmointirajapinnat ovat käytettävissä soveltuvissa ympäristöissä, .NET Framework ja .NET alkavat käyttää GetTempPath2:ta, kun KB:t on asennettu.
Ensisijainen käyttäytymismuutos on se, että soittajat, jotka toimivat JÄRJESTELMÄN käyttäjätietoina, tarkkailevat System.IO.Path.GetTempPath() menetelmän palauttamista %WINDIR%\SystemTemp oletusarvoisesti, kun taas soittajat, jotka toimivat muuna kuin SYSTEM-tunnistetietona, tarkkailevat menetelmän palauttavan edelleen olemassa olevan arvon.
Jos sovellus täyttää kaikki alla olevat ehdot, muutos voi vaikuttaa sinuun:
-
Sovelluksesi käyttää suorituksenaikaista ja käyttöjärjestelmäympäristöä, joka on lueteltu aiemman "Sovellettava ohjelmisto" -otsikon alla; ja
-
Sovellus toimii JÄRJESTELMÄN tunnistetietoina. ja
-
Voit määrittää %TMP% tai %TEMP% ympäristömuuttujan manuaalisesti ohjaamaan tilapäistiedoston vakiosijainnin uudelleen. (Katso Win32- GetTempPath ohjelmointirajapinnan ohjeiden Huomautukset-osa .)
Jos täytät kaikki nämä ehdot, kun Windowsin KB:t on asennettu, saatat tarkkailla sovelluksen kirjoittamista muuhun tilapäishakemistoon kuin aiottuun hakemistoon.
Tämä käyttäytymismuutos voi näkyä minkä tahansa .NET Framework tai . NET:n tarjoama ohjelmointirajapinta, joka lopulta perustuu GetTempPath2:een. Yleisimmät aloituskohdat ovat seuraavat:
Tätä ei ole tarkoitettu kattavaksi luetteloksi menetelmistä, joiden toiminta voi muuttua, kun suorituskykyilmaisimet on asennettu.
Sen selvittäminen, suoritetaanko sovellus SYSTEM-tunnistetiedoilla
.NET Framework- tai .NET-sovelluksen henkilöllisyyden määrittämiseen on useita eri mekanismeja
IIS-pohjaiset verkkosovellukset
IIS viittaa JÄRJESTELMÄ-tunnistetietoihin nimellä "LOCALSYSTEM". Siirry IIS-hallinnassa (inetmgr.exe) Sovellusvarannot-välilehteen nähdäksesi kaikki sovellusvarannot ja niihin liittyvät käyttäjätiedot. Voit myös valita käyttäjätiedot avattavasta Ryhmittelyperuste-valikosta, jotta localsystem-käyttäjätietoina suoritettavat sovellusvarannot näkyvät helpommin.
Alla olevassa näyttökuvassa näkyy esimerkki sovellusvarannosta ("MyAppPool"), joka on määritetty toimimaan LOCALSYSTEM-muodossa. Kaikki sovellukset, jotka suoritetaan tässä sovellusvarannossa, suoritetaan SYSTEM-tunnistetietoina.
Voit käyttää näitä tietoja ohjelmallisesti myös järjestelmänvalvojan suorittamasta PowerShell-istunnosta alla olevan komentosarjan avulla.
Import-Module IISAdministration Get-IISAppPool | where {$_.ProcessModel.IdentityType -eq "LocalSystem"}
Tässä PowerShell-komentosarjassa järjestelmätason MyAppPool-sovellusvarantoon määritetyssä laitteessa, kuten yllä olevassa näyttökuvassa näkyy, seuraava PowerShell-komentosarja näyttää, että "MyAppPool" on käynnissä SYSTEM-käyttäjätietojen alla.
Name Status CLR Ver Pipeline Mode Start Mode ---- ------ ------- ------------- ---------- MyAppPool Started v4.0 Integrated OnDemand
Windows-palvelut
Jos .NET Framework tai . NET-pohjainen sovellus on rekisteröity Windows-palveluksi, voit tarkastella siihen liittyviä tunnistetietoja Services Managerin avulla.
Suorita järjestelmänvalvojan komentokehotteessa services.msc. Näyttöön tulee Services Manager -käyttöliittymä.
Jos Kirjaudu sisään nimellä -sarakkeessa näkyy palvelun tunnistetietojen "Paikallinen järjestelmä", palvelu on käynnissä JÄRJESTELMÄN tunnistetietojen alla.
Voit tehdä kyselyjä myös PowerShellin kautta Get-Service cmdlet-komennolla. Jos haluat esimerkiksi tehdä kyselyjä MyService-nimisen palvelun tiedoista, käytä seuraavaa komentoa.
(Get-Service MyService).UserName -ieq "LocalSystem"
Jos palvelu on rekisteröity toimimaan SYSTEM-tunnistetiedoilla, tämä tulostaa Tosi konsoliin.
Muut mekanismit
Työkalut, kuten Tehtävienhallinta (taskmgr.exe) tai Sysinternals Process Explorer , voivat myös kertoa, onko sovellus käynnissä SYSTEM-käyttäjätietojen alla.
Tehtävienhallinnassa voit tarkastella järjestelmän kaikkia käynnissä olevia prosesseja Tiedot-näkymässä. Etsi sitten mielenkiinnon prosessi ja tarkastele merkintää Käyttäjänimi-sarakkeessa .
Jos Käyttäjänimi-arvossa lukee "JÄRJESTELMÄ", prosessi suoritetaan JÄRJESTELMÄN käyttäjätietojen alla.
Voit myös etsiä mielenkiinnon kohteen Sysinternals Process Explorerissa ja kirjoittaa Ominaisuudet-näkymän ja katsoa sitten Kuva-välilehden Käyttäjä-kenttää.
Jos Käyttäjä-arvossa lukee "NT AUTHORITY\SYSTEM", prosessi suoritetaan JÄRJESTELMÄN käyttäjätietojen alla.
JÄRJESTELMÄ-tason prosessien tilapäispolun muuttaminen
Alla olevassa PowerShell-komentosarjassa näytetään, miten voit luoda uuden hakemiston C:\NewSystemTemp\ ja rajoittaa hakemiston käytön vain SYSTEM-käyttäjätietojen alla suoritettaviin prosesseihin. Älä yritä muuttaa tiedostoilla jo täytetyn hakemiston käyttöoikeusluetteloita.
Tämä komentosarja on suoritettava järjestelmänvalvojan suorittamasta PowerShell-istunnosta.
mkdir C:\NewSystemTemp\ $acl = New-Object System.Security.AccessControl.DirectorySecurity $acl.SetSecurityDescriptorSddlForm("O:SYG:SYD:PAI(A;OICI;FA;;;SY)(A;OICI;FA;;;BA)") Set-Acl C:\NewSystemTemp\ -AclObject $acl
Voit varmistaa, että tämä toiminto onnistui suorittamalla komennon
icacls C:\NewSystemTemp\
Joka tuottaa seuraavan tuloksen, joka osoittaa menestystä:
C:\NewSystemTemp\ NT AUTHORITY\SYSTEM:(OI)(CI)(F) BUILTIN\Administrators:(OI)(CI)(F) Successfully processed 1 files; Failed processing 0 files
Kun hakemisto on luotu, määritä %SYSTEMTEMP% ympäristömuuttuja järjestelmätason laajuudella. Voit määrittää tämän Järjestelmän Ohjauspaneeli -käyttöliittymän kautta tai voit määrittää sen ohjelmallisesti PowerShellin kautta:
[Environment]::SetEnvironmentVariable("SYSTEMTEMP", "C:\NewSystemTemp", [EnvironmentVariableTarget]::Machine)
Käynnistä sitten kone uudelleen.
%SYSTEMTEMP% -ympäristömuuttujan muuttaminen ei muuta System.IO.Path.GetTempPath() palautusarvoa .NET Framework- ja .NET-sovelluksissa, jotka toimivat muuna tunnistetietona kuin SYSTEM-funktiona. Nämä sovellukset noudattavat edelleen samaa ratkaisulogiikkaa kuin aina, mukaan lukien %TMP% tai %TEMP% ympäristömuuttujien noudattaminen, jos niitä esiintyy.
Vastaavasti %TMP% - tai %TEMP% ympäristömuuttujan määrittäminen ei muuta System.IO.Path.GetTempPath() palautusarvoa .NET Framework- ja .NET-sovelluksissa, jotka toimivat SYSTEM-tunnistetietoina.
Lisätietoja
Lisätietoja .NET Framework- ja .NET-toiminnoista on Path.GetTempPath-sovelluksen .NET-ohjeissa.
Lisätietoja Windows-käyttöjärjestelmän toiminnasta on Windowsin ohjeissa Win32 GetTempPath2 -ohjelmointirajapinnassa.