Jak przeprowadzić inspekcję użycia wersji środowiska uruchomieniowego Visual C++
Pakiet redystrybucyjny Microsoft Visual C++ i środowisko uruchomieniowe Visual Studio C++ (łącznie "środowisko uruchomieniowe VC") są kluczowymi składnikami wielu aplikacji. W całej sieci maszyny mogą nadal uruchamiać aplikacje, które instalują i korzystają z niewspieranej wersji środowiska VC Runtime. Inspekcja plików NTFS umożliwia zidentyfikowanie takiego użycia, jak krok w kierunku zastąpienia tych aplikacji obsługiwanymi wersjami środowiska uruchomieniowego VC. Ten przewodnik przeprowadzi Cię przez proces konfigurowania inspekcji plików NTFS, zawiera porady dotyczące rozwiązywania problemów i wyróżnia korzyści wynikające z regularnych inspekcji.
Aby uzyskać więcej informacji na temat wersji środowiska uruchomieniowego VC, które nie są już obsługiwane, zobacz Microsoft Visual C++ Redistributable, pakiet redystrybucyjny, najnowsze obsługiwane wersje do pobrania.
Włączanie inspekcji plików NTFS w celu określenia użycia środowiska uruchomieniowego VC
Ten przewodnik opisuje kroki umożliwiające ręczne włączenie audytu plików NTFS i przeglądanie zdarzeń audytu w celu określenia, które aplikacje korzystają z nieobsługiwanych wersji środowisk uruchomieniowych VC. Ponieważ istnieje kilka plików, które mogą być używane przez aplikację, w tym przewodniku pokazano również, jak używać cmdletów Get-Acl
i Set-Acl
PowerShell do aktualizowania uprawnień audytu. Aby uzyskać więcej informacji na temat konfigurowania zasad inspekcji dla pliku, zobacz Stosowanie podstawowych zasad inspekcji w pliku lub folderze.
Ręczne włączanie inspekcji dostępu do obiektów w systemie
Przed włączeniem inspekcji na poziomie plików należy włączyć dostęp do obiektów:
- Otwórz edytor lokalnych zasad grupy , naciskając
Windows
+R
, aby otworzyć okno dialogowe Uruchom . Następnie wpiszgpedit.msc
i naciśnij Enter. - Przejdź do Konfiguracja komputera>Ustawienia systemu Windows>Ustawienia zabezpieczeń>Konfiguracja zaawansowanych zasad inspekcji>zasad inspekcji systemu>dostępu do obiektów.
- Kliknij dwukrotnie Przeprowadź inspekcję systemu plików. W oknie dialogowym właściwości systemu plików inspekcji wybierz pozycję Skonfiguruj następujące zdarzenia inspekcji>Powodzenie>OK.
- Zamknij Edytor lokalnych zasad grupy .
Alternatywnie możesz użyć auditpol.exe
, aby włączyć dostęp do obiektu:
- Wyświetl listę bieżących ustawień z wiersza polecenia przy użyciu
AuditPol.exe /get /category:"Object Access"
. - Włącz dostęp do obiektów za pomocą
AuditPol.exe /set /category:"Object Access" /subcategory:"File System" /success:enable
.
Ręczne włączanie inspekcji w pliku
Aby monitorować, który proces uzyskuje dostęp do pliku środowiska uruchomieniowego VC, włącz inspekcję w pliku środowiska uruchomieniowego VC:
- Kliknij prawym przyciskiem myszy plik, który chcesz przeprowadzić inspekcję, wybierz pozycję właściwości , a następnie wybierz kartę Zabezpieczenia. Aby uzyskać więcej informacji na temat znajdowania zainstalowanych plików środowiska uruchomieniowego VC, zobacz zainstalowane lokalizacje środowiska uruchomieniowego VC.
- Wybierz pozycję Advanced.
- W oknie dialogowym Ustawień Zabezpieczeń Zaawansowanych, wybierz kartę Inspekcja, a następnie wybierz Kontynuuj.
- Aby dodać nową regułę inspekcji, wybierz pozycję Dodaj. W oknie dialogowym inspekcji wybierz podmiot, a następnie wpisz nazwę użytkownika lub grupy, którą chcesz dodać, na przykład (Wszyscy), a następnie wybierz OK.
- W polu wpiszi upewnij się, że wybrano Sukces.
- Wybierz Pokaż uprawnienia zaawansowane>Wyczyść wszystko>Przejdź przez folder / wykonaj plik>OK.
- Teraz w Inspekcjach powinien pojawić się nowy wiersz odpowiadający temu, co wybrałeś. Wybierz pozycję OK.
- W oknie dialogowym Właściwości wybierz opcję OK.
Reguła inspekcji jest teraz włączona dla pliku.
Ręczne przeglądanie dzienników inspekcji
Inspekcja plików NTFS generuje "Zdarzenie 4663: Podjęto próbę uzyskania dostępu do obiektu" dla każdego pliku, który zawiera uprawnienie inspekcji i jest uzyskiwany przez proces.
- Otwórz Podgląd zdarzeń, naciskając
Windows
+R
, aby otworzyć okno dialogowe Uruchom . Następnie wpiszeventvwr.msc
i naciśnij Enter. - Przejdź do dzienników zabezpieczeń w podglądzie zdarzeń , rozwijając dzienniki systemu Windows>Security. W okienku wyników są wyświetlane zdarzenia zabezpieczeń.
- Znajdź zdarzenia inspekcji, wybierając Filtruj bieżący dziennik... w okienku Akcje. Zawężaj zdarzenia do identyfikatora zdarzenia 4663 (powodzenie inspekcji dla kategorii systemu plików), wprowadzając 4663 w polu tekstowym Dołączanie/wykluczanie identyfikatorów zdarzeń.
Aby zapoznać się z przykładem zdarzenia inspekcji dostępu do plików 4663, zobacz "4663(S): podjęto próbę uzyskania dostępu do obiektu".
Przeprowadzanie inspekcji użycia środowiska uruchomieniowego VC przy użyciu programu PowerShell
Podsumowując, aktualizacja uprawnień audytu plików za pomocą programu PowerShell obejmuje następujące kroki:
- Zdefiniuj regułę inspekcji systemu plików do zastosowania do plików.
- Uzyskaj deskryptor zabezpieczeń pliku za pomocą
Get-Acl
. - Zastosuj regułę inspekcji do deskryptora zabezpieczeń.
- Zastosuj zaktualizowany deskryptor zabezpieczeń w oryginalnym pliku przy użyciu
Set-Acl
. - Wyświetl rekordy zdarzenia inspekcji dostępu do plików 4663 z
Get-WinEvent
.
PowerShell: przeprowadź inspekcję nieobsługiwanych plików VC Runtime
Poniższy kod programu PowerShell umożliwia inspekcję zainstalowanych plików środowiska uruchomieniowego VC, które nie są już obsługiwane.
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: wyświetlanie zdarzeń inspekcji plików
Program PowerShell udostępnia Get-WinEvent
do uzyskiwania rekordów zdarzeń dla różnych dzienników zdarzeń, jak pokazano w poniższym kodzie PowerShell, który wyświetla listę wszystkich rekordów zdarzeń inspekcji 4663 z ostatnich 24 godzin.
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
Następne kroki po przeprowadzeniu inspekcji użycia środowiska uruchomieniowego VC
Po ustaleniu, które procesy korzystają z plików środowiska uruchomieniowego VC lub które aplikacje zainstalowały pakiet redystrybucyjny VC, odinstaluj te aplikacje lub uaktualnij je do nowszych wersji, które nie zależą od nieobsługiwanych środowisk uruchomieniowych VC.
Niektóre aplikacje firmy Microsoft wymagają starszych wersji środowiska uruchomieniowego VC. Aby uzyskać szczegółowe informacje, zobacz Biblioteki redystrybucyjne i biblioteki środowiska uruchomieniowego Visual C++ — często zadawane pytania | Microsoft Learn.
Lokalizacje instalacji środowiska uruchomieniowego VC
Oto miejsce, w którym zainstalowano każdą wersję środowiska uruchomieniowego VC:
wersji programu Visual Studio | zainstalowane lokalizacje |
---|---|
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 |
Zobacz też
ponowne dystrybuowanie plików Visual C++
Najnowsze obsługiwane wersje Visual C++ do pobrania
Często zadawane pytania dotyczące cyklu życia - biblioteki redystrybucyjne i środowiska uruchomieniowego Visual C++
Binarna zgodność języka C++ między wersjami programu Visual Studio