Windows Update ist eine sehr wichtige Systeminfrastruktur bei Windows, aber in einigen Szenarien möchten Benutzer möglicherweise vorübergehend das Verhalten der automatischen Updates steuern. Beispielsweise Testumgebungen, ältere Software-Kompatibilitätsumgebungen, spezielle Geräte, die langfristig ausgeführt werden, oder Szenarien, in denen ein automatischer Neustart des Systems zu einem bestimmten Zeitpunkt verhindert werden muss.
UpdatesLock Es ist ein leichtes Windows-Tool, das für diese Bedürfnisse entwickelt wurde. Projektadresse:
hhht110 / UpdateLock GitHub-Repository
Im Gegensatz zu vielen Szenarien, die auf Skripts, PowerShell oder Laufzeiten von Drittanbietern angewiesen sind, nutzt UpdateLock Native C + + / Win32 Implementiert, läuft als eine einzige Datei EXE und verwendet unterschiedliche Systemrichtlinien für Windows 7, Windows 10 und Windows 11.
Dieser Artikel beschreibt vor allem das Projekt aus Sicht der Realisierung. Das Deaktivieren von System-Updates kann die Systemsicherheit verringern und sollte bei der tatsächlichen Verwendung gemäß der Verwendung des Geräts und der Sicherheitsrichtlinie sorgfältig entschieden werden.
Warum sollte ich UpdateLock nutzen?
Windows Update ist nicht einfach "ein" oder "aus".
Es gibt deutliche Unterschiede zwischen Windows-Versionen in Bezug auf den Aktualisierungsmechanismus, Richtlinienelemente und zugehörige Dienste. Insbesondere Windows 7 und Windows 10 / 11 sind in Bezug auf das Update-Management - Modell nicht identisch.
Daher muss ein echtes Update-Control - Tool für mehrere Windows-Versionen ein paar Probleme lösen:
- Wie erkenne ich die aktuelle Windows-Version?
- Welche Strategien müssen in den verschiedenen Systemen geändert werden?
- Wie kann man vermeiden, dass Systemdateien grob gelöscht werden oder Upgrade-Komponenten beschädigt werden?
- Wie kann ich die ursprüngliche Konfiguration vor der Änderung speichern?
- Wie kann man die Änderung wiederherstellen, wenn sie fehlschlägt?
- Wie kann man nach der Wiederherstellung überprüfen, ob die Konfiguration wirklich erfolgreich ist?
- Wie funktioniert das ohne. NET, PowerShell oder andere Zusatzkomponenten?
UpdateLock ist im Wesentlichen um diese Fragen konzipiert.
Das Projekt README definiert es als ein „Win7 / 10 / 11 Auto-Update - Shutdown-Tool", das native Win32 x86 EXE verwendet und Systemkonfigurationsänderungen über die Windows Registry API und die Service Control Manager API durchführt.
2. Das größte Feature des Projekts: native Win32
UpdateLock wählt keine PowerShell, Batchverarbeitung oder reg.exe、sc.exe Solche externen Befehle werden stattdessen direkt auf die Windows-API aufgerufen.
Wie man aus dem Quellcode sieht, enthält es direkt:
windows.hcommctrl.hshellapi.hshlobj.hsddl.haclapi.hwincrypt.hobjbase.hwuapi.h
Die Kernlogik basiert direkt auf der Win32 - API.
Die Vorteile dieses Designs sind sehr offensichtlich.
1. Nicht angewiesen auf PowerShell
Viele Windows-Automatisierungskripte führen PowerShell aus, wie zum Beispiel:
Set-Service
Set-ItemProperty
Get-Service
UpdateLock hingegen ist nicht auf diese Befehle angewiesen.
Das bedeutet, dass es keine Fragen wie die Verfügbarkeit von PowerShell, die Einschränkung der Ausführungsrichtlinie für das Skript oder die Auflösung externer Befehlausgabe berücksichtigen muss.
2. Keine Abhängigkeit von. NET Runtime
Das Projekt wurde mit einem statischen CRT-Modus erstellt und zielt darauf ab, direkt unter Windows 7 SP1, Windows 10 und Windows 11 auszuführen.
Der Endbenutzer sieht sich daher eher mit einem traditionellen:
UpdateLock.exe
Es ist nicht erforderlich, dass zuerst ein Paket für die Betriebsumgebung installiert wird.
3. Eine direktere Fehlerbehandlung
Der direkte Aufruf der Win32 - API bedeutet auch, dass das Programm eindeutigere Systemfehlercodes erhalten kann.
im Quellcode definiert ist. ThrowWin32()Sie konvertiert den Win32 - Fehlercode in eine verständliche Fehlermeldung, z. B.:
Win32 5:拒绝访问
Diese Methode ist einfacher, als einfach zu bestimmen, ob ein externer Befehl einen Rückgabewert gibt.
Warum unterscheiden sich Win7 und Win10 / 11
Dies ist ein wichtiger Aspekt im UpdateLock-Design.
Statt eine „Strategien für die Welt" zu verfolgen, wird das Projekt Windows 7 explizit von Windows 10 / 11 getrennt.
Windows 7 - Windows 7
Die Verarbeitung von Windows 7 beinhaltet hauptsächlich:
NoAutoUpdateDisableWindowsUpdateAccesswuauserv
Von denen wuauserv Der Windows Update-Dienst.
Das bedeutet, dass das Szenario von Win7 neben der Änderung der Richtlinien auch den Windows Update-Dienst über den Service Control Manager von Windows beendet und deaktiviert.
Das Projekt wurde jedoch nicht weiter verarbeitet:
- Bits
- CryptSvC
- TrustedInstaller
- Softwareverteilung
- Catroot2
- Systemdokumentation
Diese Zurückhaltung ist wirklich sehr wichtig.
Ein System-Tool, das den Update-Cache direkt entfernt, das Systemverzeichnis modifiziert oder sogar die Systemdateien ersetzt, um "Updates vollständig zu schließen", kann leicht von einem Konfigurationswerkzeug zu einem Systemzerstörungswerkzeug werden.
Das UpdateLock-Programm ist eindeutig eher dazu neigt:
Nur die Konfiguration, die für die Erfüllung des Ziels erforderlich ist, wird geändert.
Windows 10 / 11: Hauptsächlich über Richtliniensteuerung
Windows 10 und Windows 11 werden unterschiedlich behandelt.
Das Projekt umfasst hauptsächlich folgende Strategien:
ExcludeWUDriversInQualityUpdate
SetUpdateNotificationLevel
UpdateNotificationLevel
NoAutoUpdate
NoAutoRebootWithLoggedOnUsers
AUOptions
Am bemerkenswertesten ist es, AUOptions。
Beim Schließen fixiert das Projekt es nicht einfach auf einen bestimmten Wert, sondern übernimmt:
Entfernen Sie beim Schließen und schreiben Sie beim Wiederherstellen in den ursprünglichen Zustand zurück.
Dies spiegelt eine wichtige Konfigurations-Management - Idee wider:
"Wiederherstellen" sollte nicht bedeuten, dass das Programm den Standardwert wiederherstellt, sondern dass es den Zustand vor dem Ausführen des Programms wiederherstellt.
Beispielsweise kann die ursprüngliche Konfiguration des Benutzers sein:
AUOptions = 4
Nachdem das Programm einen Schließvorgang ausgeführt hat, kann dieser Wert gelöscht werden.
Wenn der Benutzer die Wiederherstellung auswählt, schreibt das Programm neu:
AUOptions = 4
Anstatt einen anderen Standardwert auf eigene Faust zu schreiben.
Version 2.1 beschränkt den Zugang zu Windows Update weiter
Mit UpdateLock 2.1 wurde ein weiteres hinzugefügt:
SetDisableUXWUAccess=1
Ziel dieser Richtlinie ist es nicht, den Windows Update-Dienst zu stoppen, sondern den Zugang zur Benutzeroberfläche für Windows Update weiter zu beschränken.
Einfach gesagt, reduzieren Sie die Benutzer, die über die Windows Update-Seite:
- Manuelle Überprüfung von Updates
- Updates herunterladen
- Installieren von Updates
Möglichkeiten für Operationen.
Hier gibt es einen wichtigen Unterschied:
Windows 10 / 11 wird nicht sofort eingestellt. wuauserv, BITS, Usosvc oder Update Orchestrator.
Dies zeigt, dass die Projekt-Autoren nicht die Idee haben, „alle Dienste zu deaktivieren, wenn Sie Updates sehen", sondern versuchen, die von Windows selbst bereitgestellten Richtlinienmechanismen zu nutzen.
Aus Sicht der Systemstabilität ist dies ein relativ konservativer Plan.
6. Backup und Wiederherstellung gehören zu den zentralen Designs dieses Projekts
Wenn Sie nur das Registrierungsformular ändern, ist es nicht schwer.
Was wirklich schwierig ist, ist:
Wie kann man nach der Änderung zuverlässig wiederherstellen?
UpdateLock ist in dieser Hinsicht vollständig.
Das Richtlinien-Backup von Windows 10 / 11 befindet sich unter:
%ProgramData%\UpdateLock\policy-backup-v1.txt
Die Zugriffsbeschränkungen für die Windows Update-Benutzeroberfläche werden separat gespeichert:
%ProgramData%\UpdateLock\windows-update-access-backup-v1.txt
Windows 7 verwenden:
%ProgramData%\UpdateLock\windows7-original-state-v1.txt
Dieses Design bedeutet, dass das Programm den ursprünglichen Zustand aufzeichnet, bevor es das System modifiziert.
Anstatt einfach davon auszugehen:
恢复 = 删除我刚刚写入的值
Beide haben einen wesentlichen Unterschied.
Zum Beispiel,
用户原配置
↓
读取并保存
↓
UpdateLock 修改
↓
Windows Update 被限制
↓
用户选择恢复
↓
重新写入原配置
Damit kann man wirklich „Wiederherstellung" erreichen.
7. RAII im Quellcode: Vermeidung von Ressourcenlecks
Als natives C + + - Windows-Programm verwendet UpdateLock auch RAII zur Verwaltung von Systemressourcen.
Im Quellcode können mehrere typische Pakete gesehen werden:
ScopedHandle
ScopedRegKey
ScopedServiceHandle
Zum Beispiel,
struct ScopedRegKey {
HKEY value = nullptr;
~ScopedRegKey() {
if (value) RegCloseKey(value);
}
};
Dieses Design löst ein typisches C + + / Win32 - Problem.
Die Win32 - API wird häufig verwendet, wie:
HANDLE
HKEY
SC_HANDLE
Ressourcen beherrschen.
Wenn es auf der Mitte des Programms eine Ausnahme auftritt, kann es leicht auftreten:
打开资源
↓
执行操作
↓
中途失败
↓
没有释放资源
RAII ermöglicht es, den Lebenszyklus von Ressourcen an C + + - Objekte zu binden.
Folglich:
{
ScopedRegKey key;
// 操作注册表
}
Wenn Sie den Umfang verlassen, wird der Registrierungsgriff automatisch freigegeben.
Dies ist besonders wichtig für ein Systemwerkzeug, das häufig mit Registrierung, Diensten und Dateien arbeiten muss.
8. Die Registrierung ist kein einfaches „Schreiben"
Die Logik der Registrierung im Quellcode lohnt sich ebenfalls eine Analyse.
Das Programm definiert eine ähnliche Beschreibung der Politik:
struct PolicyValue {
const wchar_t* path;
const wchar_t* name;
};
Anschließend benutzt:
ReadDwordState()
SetDword()
DeleteDword()
RestorePolicy()
VerifyPolicy()
Es entsteht eine klare Operationskette.
Abstrakt kann man als:
Read
↓
Backup
↓
Modify
↓
Read Back
↓
Verify
Anstatt:
Modify
↓
Done
Dies ist ein wichtiger Unterschied zwischen System-Tools und einfachen Skripts.
9. Nach der Änderung muss man „wiederlesen".
UpdateLock hat einen sehr praktischen Mechanismus:
Nach dem Schreiben wird die Registrierung erneut gelesen, um zu überprüfen.
Im Quellcode kann man sehen:
void VerifyPolicy(const PolicyState& expected)
Es ruft die Lesfunktion erneut auf und vergleicht dann:
exists
value
ob sie mit den Erwartungen übereinstimmt.
Wenn es nicht übereinstimmt, werfen Sie einen Fehler.
Das bedeutet, dass das Verfahren nicht gesehen wird:
RegSetValueExW()
Bei erfolgreicher Rückgabe wird angenommen, dass die gesamte Operation abgeschlossen ist.
Sondern:
写入成功
↓
重新读取
↓
比较预期状态
↓
确认一致
Für Werkzeuge, die Systemrichtlinien betreffen, kann diese Konstruktion die Zuverlässigkeit des Betriebs erheblich verbessern.
10. Rückkehr zum Scheitern
Im weiteren Sinne kann dieses Design auch einen vollständigen Transaktionsprozess bilden:
保存原始状态
↓
修改策略 A
↓
修改策略 B
↓
修改策略 C
↓
某一步失败
↓
恢复 A
↓
恢复 B
↓
恢复 C
Das heißt, es ist nicht einfach, eine Reihe von unabhängigen Registrierungsschreibvorgängen auszuführen.
Wenn es auf halbem Weg fehlschlägt, kann das Programm versuchen, den zuvor modifizierten Inhalt in den ursprünglichen Zustand wiederherzustellen.
Dies ist für die Windows-Systemkonfigurationswerkzeuge von entscheidender Bedeutung.
Denn die größte Angst, dass die Systemkonfiguration geändert wird, ist nicht "komplettes Scheitern", sondern:
Halb gelungen.
Zum Beispiel,
策略 1 修改成功
策略 2 修改成功
策略 3 修改失败
Ohne einen Rollback-Mechanismus erhalten die Benutzer am Ende einen halb modifizierten Status.
Auch bei der Sicherung der Dokumente selbst wird die Sicherheit berücksichtigt.
Es gibt ein weiteres Detail im Quellcode, das leicht übersehen wird:
Das Programm erstellt:
%ProgramData%\UpdateLock
Verzeichnisberechtigungen erstellen.
Der Quellcode verwendet einen Sicherheitsdeskriptor:
D:P(A;OICI;FA;;;SY)(A;OICI;FA;;;BA)
Das bedeutet, dass der Zugriff auf das Backup-Verzeichnis auf Systemkonten und Administratoren beschränkt ist.
Dieses Design ist sinnvoll.
Da die Backup-Dateien den Status der Systemrichtlinien protokollieren, kann es auftreten, wenn normalen Benutzern erlaubt wird, diese Dateien nach Belieben zu ändern:
程序保存状态
↓
文件被篡改
↓
用户点击恢复
↓
程序恢复恶意/错误配置
Für die Systemkonfigurierung:
Sicherungsdateien sind keine gewöhnlichen Textdateien.
Es muss auch Integrität und Kompetenz berücksichtigt werden.
Warum sollte man Base64 verwenden?
Der Quellcode bietet auch:
Base64Encode()
Base64Decode()
Es wird auch die Umwandlung zwischen UTF - 8 und UTF - 16 kombiniert.
Die Windows-API verwendet umfangreich Unicode-Zeichnfolgen, während die Sicherungsdatei selbst im UTF - 8 - Textformat ist.
Daher müssen Projekte behandelt werden:
Windows UTF-16
↓
UTF-8
↓
Base64
↓
备份文件
Bei der Wiederherstellung umgekehrt.
Der Vorteil dieses Designs besteht darin, dass das Backup-Dateiformat eindeutiger ist und gleichzeitig Analysenprobleme durch spezielle Zeichen, Zeilenwechsel oder lokale Kodierungsumgebungen vermieden werden.
13. Administratorrechte und Schutz von einzelnen Instanzen
Weil es geändert wurde:
HKEY_LOCAL_MACHINE
sowie Ressourcen auf Systemebene wie Windows-Dienste, so dass das Programm Administratorrechte benötigt.
Darüber hinaus wurde der Schutz für einzelne Instanzen eingefügt.
Im Quellcode ist definiert:
const wchar_t* const kMutexName =
L"Global\\UpdateLock.SingleInstance.7A64EA9A";
Mit Windows Mutex können Benutzer verhindern, dass mehrere UpdateLock-Instanzen gleichzeitig gestartet werden.
Warum braucht man ein einzelnes Beispiel?
Änderungen der Systemkonfiguration sind normalerweise nicht für gleichzeitige Aktionen geeignet.
Wenn zwei Beispiele gleichzeitig ausgeführt werden:
实例 A:读取旧配置
实例 B:读取旧配置
实例 A:写入新配置
实例 B:写入新配置
实例 A:备份
实例 B:备份
Das endgültige Backup-Status kann Probleme auftreten.
Folglich:
Der Schutz von einzelnen Instanzen ist tatsächlich auch Teil der Konfigurationstransaktionssicherheit.
14. Kein „gewalttätiges zerstören" von Windows Update
Aus technischer Sicht ist UpdateLock eine positive Sache, dass es eine klare Kontrolle über die Grenzen der Modifikation gibt.
Er hat seine Ziele nicht erweitert:
删除 SoftwareDistribution
删除 Catroot2
禁用所有相关服务
删除更新文件
修改系统文件
阻止 Windows Update 进程启动
Vielmehr konzentrieren sich sie sich hauptsächlich auf:
Windows Update Policy
+
必要的服务控制
+
备份与恢复
Dies ist eine Art, die besser im Einklang mit den System-Tool - Design-Prinzipien steht:
Versuchen Sie, die Anforderungen über die vom Betriebssystem bereitgestellte Konfigurationsschnittstelle zu implementieren, anstatt die Systemmechanismen zu umgehen.
15. Welche Probleme löst es für den normalen Nutzer?
Aus Benutzerperspektive lässt sich der Wert von UpdateLock in einem Satz zusammenfassen:
Mit einem nativen, leichten Windows-Programm können Sie komplexe Update-Richtlinien ändern, sichern, wiederherstellen und validieren.
Der Benutzer muss es nicht manuell öffnen:
注册表编辑器
本地组策略
服务管理器
命令提示符
PowerShell
Danach ändern sie sich.
Das Verfahren ist für die Fertigstellung verantwortlich:
识别系统
↓
读取原配置
↓
备份
↓
修改策略
↓
验证
↓
必要时回滚
Bei der Wiederherstellung geht es umgekehrt:
读取备份
↓
恢复原配置
↓
回读
↓
验证
Dies ist viel freundlicher als für normale Benutzer, die Registrierung manuell zu bedienen.
16. Es gibt auch klare Gebrauchsgrenzen.
Besonders hervorzuheben sei:
Das Deaktivieren oder Einschränken von Windows Update ist nicht kostenlos.
Zunächst einmal ist Windows Update nicht nur für Systempatches verantwortlich, sondern auch für Treiber und so weiter.
Das Projekt README weist insbesondere darauf hin, dass nach dem Schließen von Treiber-Updates für Windows Update die neu angeschlossenen USB-Geräte oder andere Hardware möglicherweise nicht automatisch die Treiber online erhalten.
Wenn also ein Gerät neue Hardware installieren muss, können Sie Folgendes in Betracht ziehen:
恢复 Windows Update
↓
安装/获取驱动
↓
重新关闭更新策略
Darüber hinaus wird es nicht empfohlen, Schließen - oder Wiederherstellenvorgänge durchzuführen, während Windows Updates installiert oder deinstalliert.
Bei der Produktion von Umweltgeräten sollte auch im Voraus bestätigt werden:
- die Existenz einer Unternehmensupdate-Strategie;
- ob es Sicherheits-Patches gibt;
- Ob Sie sich auf Windows Update verlassen, um Treiber zu erhalten;
- Einheitliches Terminalmanagementsystem;
- Ob es eine Wiederherstellung der Systemkonfiguration erfordert.
Mit anderen Worten:
UpdateLock ist ein Systemkonfigurationswerkzeug und kein Ersatz für die Windows-Update - Mechanismen.
XVII. Aufbauweise
Das Projekt verwendet die Visual Studio Build Tools, die MSVC v141 - Toolkette und das Windows 10 SDK 19041.
im native Verzeichnis Ausführung:
build-native.cmd
Natürlich kann ein nativer Aufbau durchgeführt werden.
Das Projekt README zeigt, dass die Build-Output befindet sich in:
native\build
Das Skript wird gleichzeitig generiert:
UpdateLock.exe
und native Testprogramme.
Diese Projektstruktur eignet sich für Entwickler, die die Programmierung von Win32 - Systemen studieren möchten.
Sie können direkt aus dem Quellcode sehen:
Win32 API
↓
Registry API
↓
SCM API
↓
文件 API
↓
安全描述符 API
↓
GUI
Anstatt sich hinter einer Vielzahl von Frameworks von Dritten zu verstecken.
18. Wie bewerten Sie dieses Projekt?
Im Hinblick auf die „funktionale Komplexität" ist UpdateLock kein besonders umfangreiches Projekt.
Aber wenn man die „Engineeringqualität der System-Tools" betrachtet, enthält es viele Designs, die es wert sind, zu lernen:
1. Die native API
Vermeiden Sie die Abhängigkeit von PowerShell, CMD, reg.exe und sc.exe
2. Zustand Sicherung
Die ursprüngliche Konfiguration wird vor der Änderung aufgenommen.
3. Wiederhergestellt werden kann
Die Wiederherstellung ist der ursprüngliche Zustand des Benutzers und nicht die einfache Wiederherstellung der Standardwerte.
4. Zurücklesen Überprüfung
Bestätigung nach dem Schreiben erneut lesen.
5. Scheitern zurück.
Vermeiden Sie möglichst eine Halbveränderung des Systems.
6. RAII
Automatische Verwaltung von Win32 - Ressourcen.
7. Befugnisse Kontrolle
Zugriff auf das Backup-Verzeichnis beschränken.
8. Einziges Beispiel
Vermeiden Sie mehrere Konfigurationsvorgänge gleichzeitig.
Diese Designs gehen über das einfache "Schließen von Windows Update-Skript" hinaus.
19. Was kann man von diesem Projekt lernen?
Wenn Sie die Windows C + + - Entwicklung lernen, ist UpdateLock nicht nur für "Wie man Windows Update schließt" wichtig.
Noch besser ist es, die Techniken dahinter zu lernen:
不要直接修改
↓
先读取状态
不要假设修改成功
↓
写入后验证
不要覆盖用户配置
↓
先备份
不要只考虑成功路径
↓
设计失败回滚
不要依赖外部命令
↓
直接调用系统 API
不要无限扩大修改范围
↓
只操作必要的系统接口
Diese Prinzipien gelten auch für viele andere Systemwerkzeuge, wie z.B.:
- Windows-Dienst - Konfigurator;
- Verwaltungstools für Registrierungsrichtlinien;
- Systeminitialisierungstools;
- Unternehmensterminal-Konfigurationswerkzeuge;
- Der lokale Sicherheitsrichtlinien-Manager;
- Systemwartungsprozesse.
20. Schlussfolgerung
UpdateLock ist ein kleines natives Windows-Tool, aber es verkörpert eine typische Idee für die Entwicklung von System-Tools:Weniger Abhängigkeiten, direkte Aufrufe von System-APIs, klare Änderungen an Grenzen und Sicherung, Authentifizierung und Wiederherstellung im Mittelpunkt.
Es versucht nicht, das Windows Update-Problem zu beheben, indem es Systemdateien entfernt oder alle damit verbundenen Dienste grob deaktiviert, sondern entwickelt eine separate Strategie für die Unterschiede zwischen Windows 7 und Windows 10 / 11.
Insbesondere:
原始状态备份
+
策略修改
+
回读验证
+
失败回滚
+
完整恢复
Es handelt sich dabei um eine sehr wichtige Schließung des gesamten Projekts.
Für den normalen Benutzer bietet es ein einfaches Windows Update-Steuerungswerkzeug; für Entwickler ist es mehr wert, einen Teil zu untersuchen, der die Windows Update-Steuerung verwendet. Win32 - Registrierungsoperationen, Dienststeuerung, Berechtigungsverwaltung, RAII, Atom-Datei - Schreiben und Systemkonfiguration-Transaktionsverarbeitung。
Wenn Sie das Ziel haben, native C + + für Windows zu lernen, ist dieses Projekt ein guter kleiner Fall: Der Code ist nicht groß, aber er deckt viele Probleme ab, auf die echte Windows-Systemtools stoßen.
Projektadresse:
https://github.com/hhht110/UpdateLock
Hinweis: Dieser Artikel basiert auf dem aktuellen README und dem Quellcode des UpdateLock-Repositories. Die Windows-Update - Richtlinien können sich je nach Systemversion, Patch und Unternehmensverwaltungsrichtlinie ändern, und das Verhalten sollte auf die tatsächlichen Testergebnisse des Zielsystems basieren.