Dela via


Så här granskar du användning av Visual C++ Runtime-version

Microsoft Visual C++ Redistributable och Visual Studio C++ Runtime (tillsammans "VC Runtime") är viktiga komponenter i många program. På ert nätverk kan datorer fortfarande köra program som installerar och använder en version av VC Runtime som inte längre stöds. Du kan använda NTFS-filgranskning för att identifiera sådan användning som ett steg mot att ersätta dessa program med program som använder en version av VC Runtime som stöds. Den här guiden beskriver hur du konfigurerar NTFS-filgranskning, ger felsökningstips och visar fördelarna med regelbundna granskningar.

För mer information om de versioner av VC Runtime som inte längre stöds, se Microsoft Visual C++ Redistributable senaste stödda nedladdningar.

Aktivera NTFS-filgranskning för att fastställa VC Runtime-användning

Den här guiden innehåller stegen för att manuellt aktivera NTFS-filgranskning och granska granskningshändelser för att avgöra vilka program som anropar versionerna av VC Runtime som inte stöds. Eftersom det finns flera filer som kan användas av ett program visar den här guiden också hur du använder PowerShells Get-Acl- och Set-Acl-cmdletar för att uppdatera granskningsbehörigheter. Mer information om hur du konfigurerar granskningsprinciper för en fil finns i Tillämpa en grundläggande granskningsprincip på en fil eller mapp.

Aktivera granskning av objektåtkomst manuellt i systemet

Objektåtkomst måste vara aktiverat innan du aktiverar granskning på filnivå:

  1. Öppna den lokala grupprincipredigeraren genom att trycka på Windows + R för att öppna Kör-dialogrutan . Skriv sedan gpedit.msc och tryck på Retur.
  2. Gå till Datorkonfiguration>Windows-inställningar>Säkerhetsinställningar>Avancerad granskningsprincipkonfiguration>Systemgranskningsprinciper>Objektåtkomst.
  3. Dubbelklicka på Granska filsystem. I dialogrutan Granska filsystemegenskaper väljer du Konfigurera följande granskningshändelser>Lyckades>OK.
  4. Stäng den lokala grupprincipredigeraren .

Du kan också använda auditpol.exe för att aktivera objektåtkomst:

  1. Visa en lista över de aktuella inställningarna från kommandoraden med AuditPol.exe /get /category:"Object Access".
  2. Aktivera objektåtkomst med AuditPol.exe /set /category:"Object Access" /subcategory:"File System" /success:enable.

Aktivera granskning av en fil manuellt

Om du vill övervaka vilken process som kommer åt en VC Runtime-fil aktiverar du granskning av VC Runtime-filen:

  1. Högerklicka på filen som du vill granska, välj Egenskaperoch välj sedan fliken Säkerhet. Mer information om hur du hittar installerade VC Runtime-filer finns i installerade VC Runtime-platser.
  2. Välj Avancerat.
  3. I dialogrutan Avancerade säkerhetsinställningar väljer du fliken Granskning och väljer sedan Fortsätt.
  4. Om du vill lägga till en ny granskningsregel väljer du Lägg till. I dialogrutan Granskningspost väljer du ett huvudnamn och anger sedan namnet på den användare eller grupp som du vill lägga till, till exempel (Alla)och väljer sedan OK.
  5. I Typ, kontrollera att Framgång är valt.
  6. Välj Visa förhandsbehörigheter>Rensa alla>Traverse-mappen/kör filen>OK.
  7. Det bör nu finnas en ny rad i Revisionsposter som matchar dina val. Välj OK.
  8. I dialogrutan Egenskaper väljer du OK.

Granskningsregeln är nu aktiverad för filen.

Granska granskningsloggar manuellt

NTFS-filgranskning genererar "Händelse 4663: Ett försök gjordes att komma åt ett objekt" för varje fil som innehåller granskningsbehörigheten och som nås av en process.

  1. Öppna Händelsevisaren genom att trycka på Windows + R för att öppna dialogrutan Kör. Skriv sedan eventvwr.mscoch tryck på Retur.
  2. Gå till Security-loggarna i Loggboken genom att expandera Windows-loggar>Security. I resultatfönstret visas säkerhetshändelser.
  3. Hitta granskningshändelserna genom att välja Filtrera aktuell logg... i fönstret Åtgärder. Begränsa sökningen av händelser till händelse-ID 4663 (granskningsframgång för filsystemkategorin) genom att ange 4663 i textrutan Inkludera/exkludera händelse-ID:n.

Ett exempel på en granskningshändelse för filåtkomst 4663 finns i "4663(S): Ett försök gjordes att komma åt ett objekt."

Använda PowerShell för att granska VC Runtime-användning

Som en översikt följer uppdatering av behörigheter för filgranskning med PowerShell följande steg:

  1. Definiera den granskningsregeln för filsystemet som ska tillämpas på filerna.
  2. Hämta filens säkerhetsbeskrivare med Get-Acl.
  3. Tillämpa granskningsregeln på säkerhetsbeskrivningen.
  4. Använd den uppdaterade säkerhetsbeskrivningen på den ursprungliga filen med Set-Acl.
  5. Visa granskningshändelse 4663-poster för filåtkomst med Get-WinEvent.

PowerShell: Granska VC Runtime-filer som inte stöds

Med följande PowerShell-kod kan du granska installerade VC Runtime-filer som inte längre stöds.

function Get-AuditRuleForFile {
    $auditRuleArguments =   'Everyone'              <# identity #>,
                            'ExecuteFile, Traverse' <# fileSystemRights #>,
                            'Success'               <# flags #>
    $auditRule = New-Object System.Security.AccessControl.FileSystemAuditRule($auditRuleArguments)

    return $auditRule
}

function Set-FileAuditRule {
    param (
        [Parameter(Mandatory = $true)]
        [ValidateNotNullOrEmpty()]
        [string]$file,
        [Parameter(Mandatory = $true)]
        [ValidateNotNullOrEmpty()]
        [System.Security.AccessControl.FileSystemAuditRule]$auditRule
    )

    $existingAcl = Get-Acl -Path $file
    $existingAcl.AddAuditRule($auditRule) | Out-Null
    Set-Acl -Path $file -AclObject $existingAcl
}

$newAuditRule = Get-AuditRuleForFile

# Visual Studio Redistributable for 2005 (VC++ 8.0) and 2008 (VC++ 9.0)
Get-ChildItem "$ENV:SystemRoot\WinSxS\Fusion" -filter '*.dll' -ErrorAction SilentlyContinue -Recurse |
Where-Object FullName -IMatch 'microsoft\.vc[89]0' |
ForEach-Object {
    Set-FileAuditRule $_.FullName $newAuditRule
}

# Visual Studio Redistributable for 2010 (VC++ 10.0), 2012 (VC++ 11.0) and 2013 (VC++ 12.0)
$languageCodes = 'chs|cht|deu|enu|esn|fra|ita|jpn|kor|rus'
$versions = '(1[012]0)'
$regex = "^((atl|msvc[pr]|vcamp|vccorlib|vcomp)$versions|mfc$versions(u|$languageCodes)?|mfcm$versions(u)?)\.dll$"
Get-ChildItem "$ENV:SystemRoot\SysWOW64","$ENV:SystemRoot\System32" -filter '*.dll' |
Where-Object Name -imatch $regex |
ForEach-Object {
    Set-FileAuditRule $_.FullName $newAuditRule
}

PowerShell: Visa filgranskningshändelser

PowerShell tillhandahåller Get-WinEvent för att hämta poster från olika händelseloggar, som visas i följande PowerShell-kod som listar alla händelser med gransknings-ID 4663 under de senaste 24 timmarna.

function Get-AuditEntries {
    param (
        [Parameter(Mandatory = $true)]
        [ValidateNotNullOrEmpty()]
        [System.DateTime]$oldestTime
    )
    Get-WinEvent -FilterHashtable @{LogName='Security';Id=4663;StartTime=(Get-Date $oldestTime)} |
    ForEach-Object {
        $record = [ordered]@{}
        $record['TimeCreated'] = $_.TimeCreated
        $accessName = ($_.Message |
            Select-String -Pattern "Accesses:[\t\s]+(?<Accesses>.+)").Matches.Groups[1]
        ([xml]$_.ToXML()).Event.EventData.ChildNodes |
        ForEach-Object -Begin {
            $record[$accessName.Name]=$accessName.Value.Trim()
        } -Process {
            $record[$_.Name] = $_.'#text'
        }
        [PSCustomObject]$record
    } |
    Where-Object { $_.ObjectName -imatch '\.dll$'}
}

Get-AuditEntries -oldestTime (Get-Date).AddHours(-24)
TimeCreated : 11/20/2024 5:00:11 AM
Accesses : Execute/Traverse
SubjectUserSid : \*\*\*\*\*
SubjectUserName : \*\*\*\*\*
SubjectDomainName : WORKGROUP
SubjectLogonId : \*\*\*\*\*
ObjectServer : Security
ObjectType : File
ObjectName : C:\\Windows\\WinSxS\\amd64\_microsoft.vc90.crt\_1fc8b3b9a1e18e3b\_9.0.30729.9635\_none\_08e2c157a83ed5da\\msvcr90.dll
HandleId : 0x93c
AccessList : %%4421
AccessMask : 0x20
ProcessId : 0x24d4
ProcessName : C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe
ResourceAttributes : S:AI

Nästa steg efter granskning av VC Runtime-användning

När du har fastställt vilka processer som använder VC Runtime-filerna, eller vilka program som har installerat VC Redistributable, avinstallerar du programmen eller uppgraderar dem till nyare versioner som inte är beroende av VC-körning som inte stöds.

Vissa Microsoft-program kräver äldre versioner av VC Runtime. Mer information finns i vanliga frågor och svar om Visual C++ Redistributable- och runtime-bibliotek | Microsoft Learn.

Installationsplatser för VC Runtime

Här installeras varje version av VC Runtime:

Visual Studio Version Installerad plats(er)
Visual Studio 2013 (VC++ 12.0) %SystemRoot%\\System32, %SystemRoot%\\SysWOW64
Visual Studio 2012 (VC++ 11.0) %SystemRoot%\\System32, %SystemRoot%\\SysWOW64
Visual Studio 2010 (VC++ 10.0) %SystemRoot%\\System32, %SystemRoot%\\SysWOW64
Visual Studio 2008 (VC++ 9.0) %SystemRoot%\\WinSxS\\Fusion
Visual Studio 2005 (VC++ 8.0) %SystemRoot%\\WinSxS\\Fusion

Se även

Omdistribuera Visual C++-filer
De senaste stödda nedladdningarna av Visual C++
vanliga frågor och svar om livscykel – Visual C++ Redistributable- och körningsbibliotek
binär C++-kompatibilitet mellan Visual Studio-versioner