Visual C++ Runtime-versiegebruik controleren
Microsoft Visual C++ Redistributable en Visual Studio C++ Runtime (gezamenlijk VC Runtime) zijn essentiële onderdelen van veel toepassingen. In uw netwerk kunnen op computers nog steeds toepassingen worden uitgevoerd die een out-of-support-versie van de VC Runtime installeren en gebruiken. U kunt NTFS-bestandscontrole gebruiken om gebruik te identificeren als een stap voor het vervangen van deze toepassingen door toepassingen die een ondersteunde versie van de VC Runtime gebruiken. Deze handleiding begeleidt u bij het instellen van NTFS-bestandscontrole, biedt tips voor probleemoplossing en markeert de voordelen van regelmatige controles.
Zie Microsoft Visual C++ Redistributable nieuwste ondersteunde downloadsvoor meer informatie over de versies van VC Runtime die niet meer worden ondersteund.
Ntfs-bestandscontrole inschakelen om het VC Runtime-gebruik te bepalen
Deze handleiding bevat de stappen voor het handmatig inschakelen van NTFS-bestandscontrole en het controleren van controlegebeurtenissen om te bepalen welke toepassingen de niet-ondersteunde versies van de VC Runtime aanroepen. Omdat er verschillende bestanden zijn die kunnen worden gebruikt door een toepassing, laat deze handleiding ook zien hoe u de Get-Acl
- en Set-Acl
-cmdlets van PowerShell kunt gebruiken om controlemachtigingen bij te werken. Zie Een basiscontrolebeleid toepassen op een bestand of mapvoor meer informatie over het configureren van controlebeleid voor een bestand of map.
Objecttoegangscontrole handmatig inschakelen op het systeem
Objecttoegang moet zijn ingeschakeld voordat u controle op bestandsniveau inschakelt:
- Open de Editor voor lokaal groepsbeleid door op
Windows
+R
te drukken om het uitvoeren dialoogvenster te openen. Typgpedit.msc
en druk op Enter-. - Navigeer naar Computerconfiguratie>Windows-instellingen>Beveiligingsinstellingen>Geavanceerde Auditbeleid Configuratie>Systeem Auditbeleid>Objecttoegang.
- Dubbelklik op Audit File System. Selecteer in het dialoogvenster eigenschappen van bestandssysteem controlerenDe volgende controlegebeurtenissen configureren>Geslaagde>OK-.
- Sluit de Editor voor lokaal groepsbeleid.
U kunt ook auditpol.exe
gebruiken om objecttoegang in te schakelen:
- Geef de huidige instellingen van de opdrachtregel weer met
AuditPol.exe /get /category:"Object Access"
. - Objecttoegang met
AuditPol.exe /set /category:"Object Access" /subcategory:"File System" /success:enable
inschakelen.
Controle op een bestand handmatig inschakelen
Als u wilt controleren welk proces toegang heeft tot een VC Runtime-bestand, schakelt u controle in op het VC Runtime-bestand:
- Klik met de rechtermuisknop op het bestand dat u wilt controleren, selecteer Eigenschappenen selecteer vervolgens het tabblad Security. Zie geïnstalleerde VC Runtime-locatiesvoor meer informatie over het vinden van geïnstalleerde VC Runtime-bestanden.
- Selecteer Geavanceerde.
- Selecteer in het dialoogvenster Geavanceerde beveiligingsinstellingen het tabblad Controle en selecteer vervolgens Doorgaan.
- Als u een nieuwe controleregel wilt toevoegen, selecteert u Toevoegen. Selecteer in het dialoogvenster Controlevermelding een principal, vul vervolgens de naam in van de gebruiker of groep die u wilt toevoegen, zoals (Iedereen), en klik daarna op OK.
- Selecteer in Typedat Succes is geselecteerd.
- Selecteer Geavanceerde machtigingen weergeven>Alles wissen>Map doorzoeken/bestand uitvoeren>OK.
- Er moet nu een nieuwe rij zijn in de Controle- vermeldingen die overeenkomen met wat u hebt geselecteerd. Selecteer OK-.
- Selecteer in het dialoogvenster EigenschappenOK.
De controleregel is nu ingeschakeld voor het bestand.
Auditlogboeken handmatig controleren
Ntfs-bestandscontrole genereert 'Gebeurtenis 4663: Er is een poging gedaan om toegang te krijgen tot een object' voor elk bestand met de controlemachtiging en wordt geopend door een proces.
- Open de Evenementenweergave door op
Windows
+R
te drukken om het dialoogvenster Uitvoeren te openen. Typeventvwr.msc
en druk op Enter-. - Navigeer naar de Beveiligingslogboeken in de Gebeurtenisweergave door de Windows-logboeken>Beveiliginguit te vouwen. In het resultatenvenster worden beveiligingsevenementen weergegeven.
- Zoek de auditevenementen door Huidig logboek filteren... te kiezen in het deelvenster Acties. Verfijn de gebeurtenissen tot Gebeurtenis-id 4663 (Audit geslaagd voor de bestandssysteemcategorie) door 4663 in te voeren in het invoerveld Gebeurtenis-id's inclusief/uitsluiten.
Zie '4663(S): Er is een poging gedaan om toegang te krijgen tot een object' voor een voorbeeld van een controlegebeurtenis voor bestandstoegang 4663.
PowerShell gebruiken om vc-runtimegebruik te controleren
Als overzicht voert u de volgende stappen uit om bestandscontrolemachtigingen bij te werken met PowerShell:
- Definieer de auditregel van het bestandssysteem die op de bestand(en) van toepassing is.
- Haal de beveiligingsdescriptor van een bestand op met
Get-Acl
. - De controleregel toepassen op de beveiligingsdescriptor.
- Pas de bijgewerkte beveiligingsdescriptor toe op het oorspronkelijke bestand met
Set-Acl
. - Bestandstoegangscontrole gebeurtenis 4663 records weergeven met
Get-WinEvent
.
PowerShell: Controleer VC Runtime-bestanden zonder ondersteuning
Met de volgende PowerShell-code kunt u geïnstalleerde VC Runtime-bestanden controleren die niet meer worden ondersteund.
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: Controlegebeurtenissen van bestanden weergeven
PowerShell biedt Get-WinEvent
voor het ophalen van gebeurtenisrecords voor verschillende gebeurtenislogboeken, zoals wordt weergegeven in de volgende PowerShell-code waarin alle controlegebeurtenisrecords 4663 in de afgelopen 24 uur worden vermeld:
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
Volgende stappen na het controleren van VC Runtime-gebruik
Nadat u hebt vastgesteld welke processen gebruikmaken van de VC Runtime-bestanden of welke toepassingen de VC Redistributable hebben geïnstalleerd, verwijdert u deze toepassingen of voert u een upgrade uit naar nieuwere versies die niet afhankelijk zijn van niet-ondersteunde VC Runtimes.
Voor sommige Microsoft-toepassingen zijn oudere versies van de VC Runtime vereist. Zie voor meer informatie Visual C++ Redistributable- en runtimebibliotheken | Microsoft Learn.
VC Runtime-installatielocaties
Hier ziet u waar elke versie van de VC Runtime is geïnstalleerd:
Visual Studio-versie | geïnstalleerde locatie(s) |
---|---|
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 |
Zie ook
Visual C++-bestanden opnieuw distribueren
De meest recente ondersteunde Visual C++-downloads
veelgestelde vragen over de levenscyclus van - Visual C++ Herdistribueerbare en runtimebibliotheken
binaire C++-compatibiliteit tussen Visual Studio-versies