Application Verifier (Windows 7 und Windows Server 2008 R2 Application Quality Cookbook)

Betroffene Plattformen

Clients – Windows XP, Windows Vista, Windows 7
Server – Windows Server 2003, Windows Server 2008, Windows Server 2008 R2

BESCHREIBUNG

Fördern und erzwingen Application Verifier als Qualitätsgate für die entwicklung. Dies umfasst mehrere Verbesserungen:

  • Wir haben zusätzliche Überprüfungen durchgeführt, um Probleme zu beheben, Windows-Fehlerberichterstattung das Team bei der Verwendung des Threadpools festgestellt hat.
  • Wir haben 32- und 64-Bit-Versionen des Pakets kombiniert, um Änderungen in Windows 7 zu erfüllen, einschließlich der Anforderungen zum Testen von 32-Bit-Komponenten unter einer 64-Bit-Version von Windows sowie zur allgemeinen Vereinfachung.
  • Wir haben zusätzliche Überprüfungen für Multithreadanwendungen, das Ausführen von 32-Bit-Anwendungen auf 64-Bit-Windows sowie viele Fehlerbehebungen durchgeführt.

Diese Änderungen sollten keine negativen Auswirkungen auf Benutzer haben, die die Threadüberprüfungen nicht aktivieren. Diejenigen, die dies tun, sollten zusätzliche Unterstützung bei der Ermittlung und Diagnose vorhandener Threadpool-Nutzungsprobleme erhalten. Unabhängig davon, ob Sie Threadüberprüfungen aktivieren, profitieren Sie von den anderen Verbesserungen und Fehlerbehebungen in diesem Dienst.

Bei der Verwendung dieses Diensts gibt es zwar geringfügige Leistungssentwerte, die Leistungsstufen sollten jedoch akzeptabel bleiben, da sie in der Regel nicht in Einzelhandelsumgebungen ausgeführt werden.

Verwendung

Allgemeine Informationen

So stellen Sie reliable Windows-Anwendungen zur Verfügung:

  1. Testen Sie Anwendungen, die in nicht verwaltetem (nativem) Code mit Application Verifier debugger und mit einem Ganzseiten-Heap geschrieben wurden, bevor Sie sie für Kunden freigeben.
  2. Führen Sie die schritte aus, die Application Verifier, um Fehlerbedingungen zu beheben.
  3. Nachdem Ihre Anwendung freigegeben wurde, überwachen Sie regelmäßig die von der Anwendung erfassten Anwendungsfehlerberichte Windows-Fehlerberichterstattung.

Threadpoolüberprüfungen sind standardmäßig unter der Überprüfungsüberschrift "Grundlagen" aktiviert. Da dies in der Standardeinstellung enthalten ist, müssen Benutzer nur Application Verifier code mit den Standardeinstellungen ausführen, um die neuen Überprüfungen zu nutzen.

Details

Sie sollten mindestens die Application Verifier mit ausgewählter Einstellung Grundlagen ausführen. Dies ist für WinLogo und WinQual erforderlich. Die Einstellung Grundlagen überprüft Folgendes:

  • Details zum Beenden von Ausnahmen: Stellt sicher, dass Anwendungen Zugriffsverletzungen nicht mithilfe der strukturierten Ausnahmebehandlung ausblenden.
  • Handles Stop Details –Tests, um sicherzustellen, dass die Anwendung nicht versucht, ungültige Handles zu verwenden
  • Heaps – Stop-Details – Überprüfung auf Probleme mit Speicherbeschädigungen im Heap
  • Details zum Beenden der Eingabe/Ausgabe: Überwacht die Ausführung von asynchronen E/A-Vorgängen und führt verschiedene Überprüfungen durch.
  • Details zum Beenden von Lecks: Erkennt Lecks, indem die von einer DLL erstellten Ressourcen nachverfolgt werden, die zum Zeitpunkt des Entladens der DLL nicht frei werden.
  • Details zum Beenden von Sperren – Überprüft die richtige Verwendung für kritische Abschnitte.
  • Details zum Beenden des Arbeitsspeichers: Stellt sicher, dass APIs für Manipulationen virtueller Leerzeichen ordnungsgemäß verwendet werden (z. B. VirtualAlloc, MapViewOfFile).
  • TLS-Stoppdetails: Stellt sicher, dass threadbasierte Storage-APIs ordnungsgemäß verwendet werden.
  • Threadpool Stop Details (Details zum Beenden des Threadpools) – Stellt die korrekte Verwendung von Threadpool-APIs sicher und erzwingt Konsistenzprüfungen für Workerthreadzustände nach einem Rückruf.

Wenn Ihre Anwendung von einer "Pre-Vista"-Anwendung migriert wird, sollten Sie "LuaPriv" (auch als UAC-Überprüfungen bezeichnet) nutzen. Der Predictor für eingeschränkte Benutzerkontenberechtigungen (LuaPriv) hat zwei Hauptziele:

  • Vorhersage: Wenn Sie eine Anwendung mit Administratorrechten ausführen, sollten Sie vorhersagen, ob diese Anwendung auch funktioniert, wenn sie mit weniger Berechtigungen ausgeführt wird (im Allgemeinen als normaler Benutzer). Wenn die Anwendung z. B. in Dateien schreibt, die nur Administratorzugriff zulassen, kann diese Anwendung nicht in dieselbe Datei schreiben, wenn sie als Nichtadministrator ausgeführt wird.
  • Diagnose: Identifizieren Sie bei der Ausführung ohne Administratorrechte potenzielle Probleme, die möglicherweise bereits bei der aktuellen Ausführung vorhanden sind. Wenn die Anwendung im vorherigen Beispiel versucht, in eine Datei zu schreiben, die nur Administratorgruppenmitgliedern Zugriff gewährt, wird der Anwendung der Fehler ACCESS _ DENIED angezeigt. Wenn die Anwendung nicht ordnungsgemäß funktioniert, kann dieser Vorgang der Verursacher sein.

LuaPriv identifiziert die folgenden Arten von Problemen:

Potenzielles Problem Beschreibung
Eingeschränkte Namespaces Das Erstellen eines benannten Synchronisierungsobjekts (Ereignis, Semaphor, Mutex usw.) ohne Namespace kann die Ausführung ohne Berechtigungen auf einigen Betriebssystemen erschweren, da das Betriebssystem das Objekt möglicherweise in einem eingeschränkten Namespace platzieren kann. Zum Erstellen eines solchen Objekts in einem eingeschränkten Namespace (z. B. dem globalen Namespace) ist SeCreateGlobalPrivilege erforderlich, das nur Administratoren gewährt wird.
LuaPriv kennzeichnet beide Probleme, wenn sie erkannt werden.
Hard Administrator Checks Einige Anwendungen verhören das Sicherheitstoken des Benutzers, um herauszufinden, wie viele Berechtigungen er besitzt. In diesen Fällen kann die Anwendung ihr Verhalten abhängig davon ändern, wie viel Leistung der Benutzer seiner Meinung nach hat.
LuaPriv kennzeichnet API-Aufrufe, die diese Informationen zurückgeben.
Anfordern von Berechtigungen Eine Anwendung versucht möglicherweise, eine sicherheitsrelevante Berechtigung (z. B. SeTcbPrivilege oder SeSecurityPrivilege) zu aktivieren, bevor sie einen Vorgang ausführen kann, der dies erfordert.
LuaPriv-Flags versuchen, sicherheitsrelevante Berechtigungen zu aktivieren.
Fehlende Berechtigungen Wenn eine Anwendung versucht, eine Berechtigung zu aktivieren, über die der Benutzer nicht verfügt, signalisiert sie wahrscheinlich, dass die Anwendung die Berechtigung erwartet, was zu Verhaltensunterschieden führen kann.
LuaPriv kennzeichnet fehlerhafte Berechtigungsanforderungen.
INI-File Vorgänge Versuche, in zugeordnete INI-Dateien (WritePrivateProfileSection und ähnliche APIs) zu schreiben, können als Benutzer ohne Administratorrechte fehlschlagen.
LuaPriv kennzeichnet solche Vorgänge.
Zugriff verweigert Wenn die Anwendung versucht, auf ein Objekt zu zugreifen (Datei, Registrierungsschlüssel usw.), der Versuch jedoch aufgrund unzureichenden Zugriffs fehlschlägt, erwartet die Anwendung wahrscheinlich, dass sie mit mehr Berechtigungen ausgeführt wird, als sie besitzt.
LuaPriv kennzeichnet objektoffene Versuche, die mit ACCESS DENIED und _ ähnlichen Fehlern fehlschlagen.
Verweigern von ACEs Wenn ein Objekt aces verweigern in seiner DACL auflistet, verweigert es explizit den Zugriff auf bestimmte Entitäten.
Dies ist ungewöhnlich und erschwert die Vorhersage, daher kennzeichnet LuaPriv ACEs verweigern, wenn sie gefunden werden.
Zugriff eingeschränkt Wenn eine Anwendung versucht, ein Objekt für Rechte zu öffnen, die normalen Benutzern nicht gewährt werden (z. B. wenn versucht wird, in eine Datei zu schreiben, die nur von Administratoren geschrieben werden kann), funktioniert die Anwendung wahrscheinlich nicht gleich, wenn sie als normaler Benutzer ausgeführt wird.
LuaPriv kennzeichnet solche Vorgänge.
MAXIMAL _ ZULÄSSIG Wenn eine Anwendung ein Objekt für MAXIMUM ALLOWED öffnet, erfolgt die tatsächliche Zugriffsüberprüfung für das _ Objekt an anderer Stelle. Der meiste Code, der dies tut, funktioniert nicht ordnungsgemäß und funktioniert bei der Ausführung ohne Berechtigungen mit sicherheit unterschiedlich.
LuaPriv kennzeichnet daher alle Incidents von MAXIMUM _ ALLOWED.

Häufig übersehene Probleme werden in den nebulous Misc Checks erfasst:

  • Details zum Beenden von gefährlichen APIs
  • Details zum Beenden von dirty stacks
  • Zeitrollover

Wir haben eine neue Druckverifizierer hinzugefügt. Diese Ebene hilft beim Suchen und Beheben von Problemen, die beim Aufrufen des Drucksubsystems durch eine Anwendung entstehen können. Die Druckverifizierer sind auf die beiden Ebenen des Drucksubsystems, die PrintAPI-Ebene und die PrintDriver-Ebene, festgelegt.

Druck-API-Ebene

Print Verifier testet die Schnittstelle zwischen einem Programm und Winspool.drv und prntvpt.dll und testet die Schnittstellen dieser DLLs. Sie können die Regeln zum Aufrufen von Funktionen in dieser Schnittstelle im MSDN-Hilfeabschnitt für APIs überprüfen, die von winspool.drv und prntvpt.dll.

Drucktreiberebene

Print Verifier testet auch die Schnittstelle zwischen einem Hauptdrucktreiber wie UNIDRV.DLL, UNIDRUI.DLL, PSCRIPT5.DLL, PS5UI.DLL oder MXDWDRV.DLL und den Druckertreiber-Plug-Ins. Informationen zu dieser Schnittstelle finden Sie im MSDN und im WDK.

Beachten Sie, dass einige dieser Überprüfungen nur für Windows 7 gelten, während andere einfach eine bessere Leistung Windows 7.

In der Regel führen nur Debugversionen die Application Verifier aus, sodass die Leistung im Allgemeinen kein Problem ist. Wenn leistungsprobleme durch die Verwendung dieser oder einer anderen Überprüfung Application Verifier werden, führen Sie eine Überprüfung nach der anderen durch, bis Sie alle erforderlichen Überprüfungen durchgeführt haben.

Fast 10 % der Anwendungsabstürze auf Windows auf Heapbeschädigungen. Diese Abstürze können nach dieser Tatsache fast nicht mehr debuggt werden. Die beste Möglichkeit, diese Probleme zu vermeiden, ist das Testen mit den Seitenhapfeatures in Application Verifier. Es gibt zwei Varianten des Seitenhaps: "Full" und "Light". Full ist die Standardeinstellung. Er erzwingen das sofortige Beenden eines Debuggers, wenn eine Beschädigung erkannt wird. Dieses Feature MUSS unter dem Debugger ausgeführt werden. Dies ist jedoch auch die ressourcenintensiveste Ressource. Wenn ein Benutzer Zeitsteuerungsprobleme hat und bereits ein Szenario unter "Vollständiger" Seitenhap ausgeführt hat, werden diese Probleme wahrscheinlich durch Festlegen auf "Light" behandelt. Darüber hinaus stürzt der Light Page-Heap erst ab, wenn der Prozess beendet wird. Sie stellt zwar eine Stapelüberwachung für die Zuordnung bereit, kann jedoch erheblich länger für die Diagnose als die Nutzung der vollständigen Entsprechung dauern.

Überwachen Sie den Zuverlässigkeitsstatus der Anwendungen über das Winqual-Webportal. In diesem Portal werden die über Windows-Fehlerberichterstattung erfassten Fehlerberichte angezeigt, sodass die häufigsten Fehler leicht zu identifizieren sind. Weitere Informationen finden Sie unter Windows-Fehlerberichterstattung: Erste Schritte. Microsoft berechnet für diesen Dienst keine Gebühren.

Um WinQual nutzen zu können, müssen Sie:

  1. Registrieren Sie Ihr Unternehmen für WinQual, wofür eine VeriSign-ID erforderlich ist. Sie finden Windows 7 Informationen zu WinQual im Entwicklerportal unter Windows Vista SP1 \ Windows Server 2008 gruppiert. Es wird in Kürze einen Windows 7 Standort haben.
  2. Ordnen Sie die ISV-Anwendungen einem Produktnamen und dem ISV-Namen zu, wodurch die Fehlerberichte mit dem Unternehmen verknüpft werden. Andere ISVs können Ihre Fehlerberichte nicht anzeigen.
  3. Verwenden Sie das Portal, um die wichtigsten Probleme zu identifizieren. ISVs können auch Antworten erstellen, die Kunden darüber informieren, welche Schritte nach einem Fehler unternommen werden müssen. Das Antwortsystem unterstützt weltweit mehr als 10 Sprachen.

Ein weiterer Hinweis: Application Verifier ist nur so gut wie die Codepfade, für die Sie sie ausführen. Der Wert der Kombination dieses Tools mit einem Code Coverage-Tool kann nicht überzeichnet werden.

Debugtools für Windows:

Application Verifier:

WinQual: