Dela via


Granska 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. I hela nätverket kan datorer fortfarande köra program som installerar och använder en icke-stödd version av VC Runtime. 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 artikeln 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 artikeln innehåller stegen för att manuellt aktivera NTFS-filgranskning och granska granskningshändelser för att avgöra vilka program som anropar de versioner av VC Runtime som inte stöds. Eftersom det finns flera filer som ett program kan använda, visar den här artikeln även hur du använder PowerShell och 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. Välj Windows+R för att öppna dialogrutan Run. Ange sedan och tryck på Enter för att öppna Redigeraren för lokal grupprincip.
  2. Gå till Datorkonfiguration>Windows Inställningar>Säkerhetsinställningar>Advanced Audit Policy Configuration>Systemgranskningsprinciper>Object Access.
  3. Dubbelklicka på Granska filsystem. I dialogrutan Granska filsystemegenskaper väljer du Konfigurera följande granskningshändelserLyckadesOK.
  4. Stäng Lokal grupprincipredigerare.

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

  1. Visa en lista över de aktuella inställningarna från kommandoraden med .
  2. Aktivera objektåtkomst med .

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 för Revisionspost väljer du en huvudansvarig och anger sedan namnet på den användare eller grupp som du vill lägga till, till exempel (Alla). Välj sedan OK.
  5. Under Typ, verifiera att Framgång har valts.
  6. Välj Visa förhandsbehörigheterRensa allaTraverse-mappen/kör filenOK.
  7. Observera att en ny rad i granskningsposterna matchar det du har valt. 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. Välj Windows+R för att öppna dialogrutan Run. Ange sedan eventvwr.msc och välj Enter för att öppna Zobrazovač udalostí.
  2. Gå till Säkerhet-loggarna i Zobrazovač udalostí genom att expandera Windows-loggar>Säkerhet. I resultatfönstret visas säkerhetshändelser.
  3. Hitta granskningshändelserna genom att välja Filtrera aktuell logg... i fönstret Åtgärder. Om du vill begränsa händelserna till Händelse-ID 4663 (granskningsframgång för filsystemkategorin) anger du 4663 i textrutan Inkluderar/exkluderar händelse-ID :n.

Ett exempel på granskning av filåtkomsthändelse 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

Följ dessa steg för att uppdatera filgranskningsbehörigheter med PowerShell:

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

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 verktyg för att hämta händelseposter för olika händelseloggar, enligt följande PowerShell-kod som visar alla poster av händelse 4663 för filåtkomstgranskning 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 Visual C++ 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.

Installationsplatser för VC Runtime

I följande tabell visas var varje version av VC Runtime är installerad.

Visual Studio-version Installerade platser
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