Controllo applicazioni (Windows 7 e Windows Server 2008 R2 Application Quality Cookbook)

Piattaforme interessate

Client - Windows XP, Windows Vista, Windows 7
Server - server Windows Server 2003, Windows Server 2008, Windows Server 2008 R2

Descrizione

Promuovere e applicare il verificatore dell'applicazione come gate di qualità per tutti gli sviluppi. Include diversi miglioramenti:

  • Sono stati forniti controlli aggiuntivi per risolvere i problemi individuati dal team di Segnalazione errori Windows durante l'utilizzo del pool di thread.
  • Sono state combinate versioni a 32 e a 64 bit del pacchetto per risolvere le modifiche in Windows 7, incluse le esigenze di test di componenti a 32 bit in una versione a 64 bit di Windows, nonché per la semplificazione generale.
  • Sono stati inclusi controlli aggiuntivi per le applicazioni multithreading, che eseguono applicazioni a 32 bit in Windows a 64 bit, oltre a molte correzioni di bug.

Queste modifiche non devono influire negativamente sugli utenti che non abilitano i controlli del thread; coloro che devono ricevere supporto aggiuntivo nell'individuazione e nella diagnosi dei problemi di utilizzo del pool di thread esistenti. Indipendentemente dal fatto che si abilitano i controlli del thread, è possibile trarre vantaggio dagli altri miglioramenti e correzioni di bug in questo servizio.

Sebbene si verifichi una leggera penalità sulle prestazioni quando si usa questo servizio, i livelli di prestazioni devono rimanere accettabili perché in genere non vengono eseguiti negli ambienti di vendita al dettaglio.

Utilizzo

Informazioni generali

Per offrire applicazioni di Windows affidabili:

  1. Testare le applicazioni scritte nel codice non gestito (nativo) con Application Verifier nel debugger e con heap a pagina intera prima di rilasciarlo ai clienti.
  2. Seguire i passaggi forniti da Application Verifier per risolvere le condizioni erranti.
  3. Dopo aver rilasciato l'applicazione, monitorare regolarmente i report degli errori dell'applicazione raccolti da Segnalazione errori Windows.

I controlli del pool di thread sono abilitati per impostazione predefinita nell'intestazione di controllo "Nozioni di base". Poiché questa impostazione è inclusa nell'impostazione predefinita, gli utenti devono eseguire solo il controllo dell'applicazione nel codice con le impostazioni predefinite per sfruttare i nuovi controlli.

Dettagli

Almeno, è necessario eseguire Application Verifier con l'impostazione Basics selezionata. Questa operazione è necessaria per WinLogo e WinQual. L'impostazione Nozioni di base controlla quanto segue:

  • Eccezioni Arresta dettagli - Assicura che le applicazioni non nascondono violazioni di accesso usando la gestione delle eccezioni strutturate
  • Gestisce i dettagli di arresto - Test per assicurarsi che l'applicazione non stia tentando di usare handle non validi
  • Dettagli arresto heaps - Verifica i problemi di danneggiamento della memoria nell'heap
  • Dettagli di input/output stop - Monitora l'esecuzione dell'I/O asincrona ed esegue varie convalida
  • Dettagli arresto perdita : rileva perdite rilevando le risorse effettuate da una dll che non viene liberata dal momento in cui la dll è stata scaricata
  • Blocca dettagli arresto - Verifica l'utilizzo corretto per le sezioni critiche
  • Dettagli arresto memoria : assicura che le API per le manipolazioni dello spazio virtuale vengano usate correttamente (ad esempio, VirtualAlloc, MapViewOfFile)
  • Dettagli arresto TLS: assicura che le API locali del thread Archiviazione vengano usate correttamente
  • Dettagli interruzione threadpool - Assicura l'utilizzo corretto delle API di threadpool e applica controlli di coerenza sugli stati del thread di lavoro dopo un callback

Se l'applicazione esegue la migrazione da un'applicazione "Pre-Vista", si vuole sfruttare il controllo "LuaPriv" (noto anche come controlli dell'interfaccia utente). Il predictor dei privilegi dell'account utente limitato (LuaPriv) ha due obiettivi principali:

  • Predittivo: durante l'esecuzione di un'applicazione con privilegi amministrativi, stimare se l'applicazione funzionerebbe anche se l'esecuzione con privilegi inferiori (in genere, come utente normale). Ad esempio, se l'applicazione scrive in file che consentono l'accesso solo agli amministratori, tale applicazione non sarà in grado di scrivere nello stesso file se eseguito come amministratore non.
  • Diagnostica: durante l'esecuzione con privilegi non di amministratore, identificare i potenziali problemi già esistenti con l'esecuzione corrente. Continuando l'esempio precedente, se l'applicazione tenta di scrivere in un file che concede solo l'accesso ai membri del gruppo amministratore, l'applicazione riceverà un errore di ACCESS_DENIED. Se l'applicazione non funziona correttamente, questa operazione può essere il colpevole.

LuaPriv identifica i tipi di problemi seguenti:

Potenziale problema Descrizione
Spazi dei nomi con restrizioni La creazione di un oggetto di sincronizzazione denominato (Evento, Semaphore, Mutex e così via) senza uno spazio dei nomi può complicare l'esecuzione senza privilegi per alcuni sistemi operativi perché il sistema operativo può scegliere di posizionare l'oggetto in uno spazio dei nomi limitato. La creazione di tale oggetto in uno spazio dei nomi con restrizioni (ad esempio lo spazio dei nomi globale) richiede SeCreateGlobalPrivilege, che viene concesso solo agli amministratori.
LuaPriv contrassegna entrambi questi problemi se li rileva.
Controlli di amministratore rigido Alcune applicazioni interrogano il token di sicurezza dell'utente per scoprire quanto privilegi ha. In questi casi, l'applicazione può modificare il suo comportamento a seconda della potenza che pensa che l'utente abbia.
Le chiamate API luaPriv restituiscono queste informazioni.
Privilegi di richiesta Un'applicazione può tentare di abilitare un privilegio rilevante per la sicurezza , ad esempio SeTcbPrivilege o SeSecurityPrivilege, prima di eseguire un'operazione che lo richiede.
I flag LuaPriv tentano di abilitare i privilegi pertinenti per la sicurezza.
Privilegi mancanti Se un'applicazione tenta di abilitare un privilegio che l'utente non ha, probabilmente segnala che l'applicazione prevede il privilegio, che può causare differenze di comportamento.
Flag LuaPriv non riuscite richieste di privilegi.
operazioni INI-File I tentativi di scrittura nei file INI mappati (WritePrivateProfileSection e API simili) possono non riuscire come utente non amministratore.
LuaPriv contrassegna tali operazioni.
Accesso negato Se l'applicazione tenta di accedere a un oggetto (File, chiave del Registro di sistema e così via), ma il tentativo non riesce a causa di un accesso insufficiente, l'applicazione probabilmente prevede l'esecuzione con più privilegi rispetto a quello che ha.
LuaPriv contrassegna i tentativi di apertura dell'oggetto che hanno esito negativo con errori di ACCESS_DENIED e simili.
Nega aces Se un oggetto ha Deny ACEs nell'elenco daCL, nega esplicitamente l'accesso a entità specifiche.
Questo è insolito e rende difficile la stima, quindi LuaPriv contrassegna Nega aces quando li trova.
Accesso limitato Se un'applicazione tenta di aprire un oggetto per i diritti che non vengono concessi agli utenti normali (ad esempio, cercando di scrivere in un file che è scrivibile solo dagli amministratori), l'applicazione probabilmente non funzionerà come un utente normale.
LuaPriv contrassegna tali operazioni.
MAXIMUM_ALLOWED Se un'applicazione apre un oggetto per MAXIMUM_ALLOWED, il controllo di accesso effettivo sull'oggetto si verificherà altrove. La maggior parte del codice che esegue questa operazione non funziona correttamente e funzionerà quasi certamente in modo diverso quando si esegue senza privilegi.
LuaPriv contrassegna quindi tutti gli eventi imprevisti di MAXIMUM_ALLOWED.

 

I problemi comunemente trascurati vengono acquisiti nei controlli misc nebuloso:

  • API pericolose Arresta dettagli
  • Stack sporchi Arresta dettagli
  • Rollover del tempo

È stato aggiunto un nuovo verificatore di stampa. Questo livello consente di trovare e risolvere i problemi che possono causare quando un'applicazione chiama il sottosistema di stampa. Il verificatore di stampa è destinato ai due livelli del sottosistema di stampa, al livello PrintAPI e al livello PrintDriver.

Livello API di stampa

Print Verifier verifica l'interfaccia tra un programma e Winspool.drv e prntvpt.dll e testa le interfacce di tali DLL. È possibile esaminare le regole per chiamare le funzioni in questa interfaccia nella sezione Guida MSDN per le API esportate da winspool.drv e prntvpt.dll.

Livello driver di stampa

Print Verifier verifica anche l'interfaccia tra un driver di stampa principale, ad esempio UNIDRV.DLL, UNIDRUI.DLL, PSCRIPT5.DLL, PS5UI.DLL o MXDWDRV.DLL e i plug-in del driver di stampa. È possibile trovare informazioni su questa interfaccia in MSDN e wdK.

Si noti che alcuni di questi controlli sono solo per Windows 7 e altri saranno semplicemente migliori sotto Windows 7.

In genere, solo le versioni di debug eseguono il verificatore dell'applicazione, pertanto le prestazioni non sono in genere un problema. Se i problemi di prestazioni si verificano dall'uso di questo controllo o da qualsiasi altro controllo del verificatore dell'applicazione, eseguire un controllo alla volta fino a quando non sono stati eseguiti tutti i controlli necessari.

Quasi il 10% degli arresti anomali delle applicazioni nei sistemi Windows è dovuto al danneggiamento dell'heap. Questi arresti anomali sono quasi impossibile eseguire il debug dopo il fatto. Il modo migliore per evitare questi problemi consiste nel testare le funzionalità di Heap di pagina trovate in Verifica applicazioni. Esistono due sapori di Heap pagina: "Full" e "Light". Full è il valore predefinito; forza un debugger arresta immediatamente al rilevamento del danneggiamento. Questa funzionalità deve essere eseguita durante il debugger. Tuttavia, è anche la più richiesta di risorse. Se un utente ha problemi di temporizzazione e ha già eseguito uno scenario nell'heap della pagina "Full", impostandolo su "Light" probabilmente risolverà questi problemi. Inoltre, l'heap della pagina leggera non si arresta in modo anomalo fino all'uscita del processo. Fornisce una traccia dello stack all'allocazione, ma può richiedere molto più tempo per diagnosticare che sfruttare la controparte completa.

Monitorare lo stato di affidabilità delle applicazioni tramite il portale Web Winqual. Questo portale mostra i report degli errori raccolti tramite Segnalazione errori Windows, quindi è facile identificare gli errori più frequenti. Informazioni su questo argomento in Segnalazione errori Windows: Introduzione. Microsoft non viene addebitato per questo servizio.

Per sfruttare WinQual, è necessario:

  1. Registrare l'azienda per WinQual, che richiede un ID VeriSign. È possibile trovare Windows 7 informazioni su WinQual nel portale per sviluppatori raggruppati in Windows Vista SP1 \ Windows Server 2008. Avrà presto una posizione Windows 7.
  2. Eseguire il mapping delle applicazioni ISV a un nome del prodotto e al nome ISV, che collega i report di errore all'azienda. Altri ISV non possono visualizzare i report degli errori.
  3. Usare il portale per identificare i problemi principali. Gli ISV possono anche creare risposte che informano i clienti quali passaggi eseguire dopo un errore. Il sistema di risposta supporta oltre 10 lingue in tutto il mondo.

Un'altra nota: Il verificatore applicazione è valido solo come i percorsi di codice da eseguire su. Il valore di combinare questo strumento con uno strumento code coverage non può essere sovrastatato.

Strumenti di debug per Windows:

Verifica applicazione:

WinQual: