Simulation de ressources faibles
Lorsque l’option Simulation de ressources faibles (appelée simulation aléatoire de ressources faibles dans Windows 8.1) est active, driver Verifier échoue à exécuter des instances aléatoires des allocations de mémoire du pilote, comme cela peut se produire si le pilote s’exécute sur un ordinateur avec une mémoire insuffisante. Cela teste la capacité du pilote à répondre correctement à une mémoire insuffisante et à d’autres conditions de faible ressource.
Le test Low Resources Simulation échoue aux allocations demandées par les appels à plusieurs fonctions différentes, notamment ExAllocatePoolWithXXX, MmGetSystemAddressForMdlSafe, MmProbeAndLockPages, MmMapLockedPagesSpecifyCache et MmMapIoSpace.
À compter de Windows Vista, le test Low Resource Simulation injecte également des erreurs dans IoAllocateIrp, IoAllocateMdl, IoAllocateWorkItem, IoAllocateErrorLogEntry, MmAllocateContiguousMemory, MmAllocateContiguousMemorySpecifyCache, MmAllocatePagesForMdl et MmAllocatePagesForMdlEx. En outre, à compter de Windows Vista, lorsque la simulation de ressources faibles est activée, les appels à KeWaitForMultipleObjects ou KeWaitForSingleObject avec le paramètre Alertable défini sur TRUE peuvent retourner STATUS_ALERTED lors de l’exécution dans le contexte de processus non privilégiés. Cela simule une alerte de thread possible provenant d’un autre thread dans la même application non privilégiée.
Le test Low Resource Simulation injecte également des erreurs dans les fonctions GDI suivantes : EngAllocMem, EngAllocUserMem, EngCreateBitmap, EngCreateDeviceSurface, EngCreateDeviceBitmap, EngCreatePalette, EngCreateClip, EngCreatePath, EngCreateWnd, EngCreateDriverObj, BRUSHOBJ_pvAllocRbrush et CLIPOBJ_ppoGetPath.
Dans Windows 7 et versions ultérieures du système d’exploitation Windows, l’option Simulation de ressources faibles prend en charge la mémoire allouée à l’aide des API de noyau suivantes :
IoAllocateIrp et les autres routines qui peuvent allouer des structures de données de paquets de demandes d’E/S (IRP)
RtlAnsiStringToUnicodeString et d’autres routines de chaînes de bibliothèque d’exécution (RTL)
À compter de Windows 8.1, l’option Simulation de ressources faibles échoue également aux allocations demandées par les appels à MmAllocateNodePagesForMdlEx. En outre, pour certaines fonctions, Driver Verifier remplit désormais la mémoire allouée avec un modèle aléatoire. Mais uniquement dans les situations où la fonction retourne une mémoire non initialisée. Ces fonctions incluent :
- MmAllocatePagesForMdlEx
- MmAllocateNodePagesForMdlEx
- MmAllocateContiguousMemory
- MmAllocateContiguousMemorySpecifyCache
- MmAllocateContiguousMemorySpecifyCacheNode
- MmAllocateContiguousNodeMemory
- MmAllocateNonCachedMemory
Paramètres personnalisés pour la simulation de faibles ressources
Sur Windows Vista et les versions ultérieures de Windows, vous pouvez spécifier les paramètres personnalisés suivants.
Probabilité qu’une allocation donnée échoue. La valeur par défaut est 6 %.
Applications affectées. Ce paramètre limite les allocations d’échec injectées aux applications spécifiées. Par défaut, toutes les allocations sont affectées.
Balises de pool affectées. Ce paramètre limite les erreurs injectées aux allocations avec les balises de pool spécifiées. Par défaut, toutes les allocations sont affectées.
Délai (en minutes) avant l’échec des allocations. Ce délai permet au système de démarrer et de se stabiliser avant que les erreurs ne soient injectées. La valeur par défaut est de huit minutes.
Sur les systèmes d’exploitation antérieurs à Windows Vista, vous ne pouvez pas personnaliser ces paramètres. Le système d’exploitation utilise les valeurs par défaut.
Simulation de ressources faibles sans redémarrage
Vous pouvez activer la simulation de ressources faibles sur Windows 2000 et versions ultérieures de Windows sans redémarrer l’ordinateur à l’aide du paramètre /volatile . Les paramètres entrent en vigueur immédiatement, mais sont perdus si vous arrêtez ou redémarrez l’ordinateur.
Vous pouvez également stocker les paramètres de simulation de ressources faibles dans le Registre en omettant le paramètre /volatile . Ces paramètres ne sont effectifs que lorsque vous redémarrez l’ordinateur, mais ils restent effectifs jusqu’à ce que vous les modifiez.
Activation de cette option
Vous pouvez activer l’option Simulation de ressources faibles pour un ou plusieurs pilotes à l’aide du Gestionnaire du vérificateur de pilotes ou de la ligne de commande Verifier.exe. Pour plus d’informations, consultez Sélection des options du vérificateur de pilote.
Sur la ligne de commande
Sur la ligne de commande, l’option Simulation de ressources faibles est représentée par Bit 2 (0x4). Pour activer la simulation de ressources faibles, utilisez une valeur d’indicateur de 0x4 ou ajoutez 0x4 à la valeur des indicateurs. Par exemple :
verifier /flags 0x4 /driver MyDriver.sys
L’option sera active après le prochain démarrage.
Sur Windows Vista et les versions ultérieures de Windows, vous pouvez utiliser le paramètre /faults ou une valeur d’indicateur de 0x4 pour activer la simulation de ressources faibles. Pour modifier les paramètres de la simulation à faibles ressources, vous devez utiliser /faults. Par exemple :
verifier /faults /driver MyDriver.sys
Sur Windows 2000 et versions ultérieures de Windows, vous pouvez également activer et désactiver La simulation de ressources faibles sans redémarrer l’ordinateur en ajoutant le paramètre /volatile à la commande. Par exemple :
verifier /volatile /flags 0x4 /adddriver MyDriver.sys
Ce paramètre prend effet immédiatement, mais il est perdu lorsque vous arrêtez ou redémarrez l’ordinateur. Pour plus d’informations, consultez Utilisation de paramètres volatiles.
Sur Windows Vista, vous pouvez utiliser le paramètre /faults pour représenter la simulation de ressources faibles avec le paramètre /volatile afin de représenter un paramètre qui est effectif sans redémarrage. La modification du paramètre s’affiche. Par exemple :
0> verifier /volatile /faults /adddriver MyDriver.sys New Low Resources Simulation options: - Use default fault injection probability. - Allocations using any pool tag can be failed. - Simulate low resources conditions in any application. The new settings are in effect until you restart this computer or change them again.
Utilisation du Gestionnaire de vérificateur de pilotes
- Démarrez le Gestionnaire de vérificateur de pilotes. Tapez Vérificateur dans une fenêtre d’invite de commandes.
- Sélectionnez Créer des paramètres personnalisés (pour les développeurs de code), puis cliquez sur Suivant.
- Sélectionnez Sélectionner des paramètres individuels dans une liste complète.
- Sélectionnez Simulation de ressources faibles.
Personnalisation des paramètres (Windows Vista et versions ultérieures)
À partir de Windows Vista, vous pouvez modifier les paramètres par défaut pour les propriétés de délai, de probabilité, d’applications et d’étiquettes de pool de l’option Simulation de ressources faibles. Vous pouvez modifier ces paramètres à l’aide du Gestionnaire du vérificateur de pilotes ou de la ligne de commande Verifier.exe. Pour plus d’informations, consultez Sélection des options du vérificateur de pilote.
Sur la ligne de commande, la syntaxe de ces paramètres est la suivante :
vérificateur [/volatile] /faults[Probabilité|PoolTags|Applications|DelayMins][/driverList|]
Note Les paramètres personnalisés doivent apparaître dans l’ordre affiché. Si vous omettez une valeur, tapez des guillemets pour qu’elle conserve sa place.
Sous-paramètres
/faults
Active l’option Simulation de faibles ressources dans Driver Verifier. (Vous ne pouvez pas utiliser /flags 0x4 avec les sous-paramètres de paramètre personnalisés.)
Probabilité
Spécifie la probabilité que driver Verifier échoue une allocation donnée. Tapez un nombre (au format décimal ou hexadécimal) pour représenter le nombre de chances dans 10 000 que Driver Verifier échoue à l’allocation. La valeur par défaut, 600, signifie 600/10000, ou 6 %.
PoolTags
Limite les allocations que le vérificateur de pilotes peut échouer aux allocations avec les balises de pool spécifiées. Vous pouvez utiliser un caractère générique (*) pour représenter plusieurs balises de pool. Pour répertorier plusieurs balises de pool, séparez les balises par des espaces. Par défaut, toutes les allocations peuvent échouer.
Applications
Limite les allocations que le vérificateur de pilotes peut échouer aux allocations pour le programme spécifié. Tapez le nom d’un fichier exécutable. Pour répertorier les programmes, séparez les noms des programmes par des espaces. Par défaut, toutes les allocations peuvent échouer.
DelayMins
Spécifie le nombre de minutes après le démarrage pendant lesquelles driver Verifier n’échoue pas intentionnellement aux allocations. Ce délai permet aux pilotes de charger et au système de se stabiliser avant le début du test. Tapez un nombre (au format décimal ou hexadécimal). La valeur par défaut est 8 (minutes).
Par exemple, la commande suivante active la simulation de ressources faibles avec une probabilité de 10 % (1000/10 000) et un délai de cinq minutes pour les balises de pool, Tag1 et Fred, et l’application, Notepad.exe.
verifier /faults 1000 "Tag1 Fred" Notepad.exe 5
La commande suivante active Low Resources Simulation avec les valeurs par défaut, sauf qu’elle étend le délai à 10 minutes.
verifier /faults "" "" "" 0xa
Utilisation du Gestionnaire du vérificateur de pilotes
Démarrez le Gestionnaire du vérificateur de pilotes. Tapez Vérificateur dans une fenêtre d’invite de commandes.
Sélectionnez Créer des paramètres personnalisés (pour les développeurs de code), puis cliquez sur Suivant.
Sélectionnez Sélectionner des paramètres individuels dans une liste complète.
Sélectionnez Simulation de ressources faibles, puis cliquez sur Suivant.
Modifiez les paramètres des propriétés de délai, de probabilité, d’applications et de balises de pool selon vos besoins.
Affichage des résultats
Vous pouvez surveiller le nombre de fois où le vérificateur de pilotes échoue intentionnellement aux allocations de ressources en affichant le compteur global Erreurs injectées du vérificateur de pilotes. Ce compteur affiche le nombre total d’allocations de ressources que driver Verifier a délibérément échoué depuis le dernier démarrage.
Vous pouvez afficher ce compteur dans un fichier journal du vérificateur de pilote (/log), sur la ligne de commande (/query) ou dans le Gestionnaire du vérificateur de pilote. Dans Windows 2000, pour afficher les compteurs globaux, sélectionnez l’onglet Compteurs globaux . Dans les versions ultérieures de Windows, sélectionnez Afficher les informations sur la tâche pilotes actuellement vérifiée , puis appuyez deux fois sur Suivant . Pour plus d’informations, consultez Surveillance des compteurs globaux.
Vous pouvez également afficher le nombre d’allocations ayant échoué intentionnellement et le nombre d’allocations totales (pour calculer la probabilité) à l’aide de l’extension de débogueur !verifier. L’exemple suivant montre un exemple de la sortie !verifier .
Dans cet exemple, injecter des échecs aléatoires de l’API à faible ressource indique que la simulation de faibles ressources est activée. Les allocations de ressources ont échoué délibérément représente le nombre d’allocations ayant échoué intentionnellement et les allocations de pool tentées représentent le nombre total d’allocations.
!verifier
Verify Level 5 ... enabled options are:
Special pool
Inject random low-resource API failures
Summary of All Verifier Statistics
RaiseIrqls 0x2c671f
AcquireSpinLocks 0xca1a02
Synch Executions 0x10a623
Trims 0x0
Pool Allocations Attempted 0x862e0e
Pool Allocations Succeeded 0x8626e3
Pool Allocations Succeeded SpecialPool 0x768060
Pool Allocations With NO TAG 0x0
Pool Allocations Failed 0x34f
Resource Allocations Failed Deliberately 0x3f5
Pour afficher les traces de pile pour les allocations les plus récentes ayant échoué par driver Verifier, utilisez !verifier 4 dans le débogueur du noyau.
L’exemple suivant montre un exemple de sortie de !verifier 4. Par défaut, !verifier 4 affiche les traces de pile des quatre dernières allocations ayant échoué, mais vous pouvez utiliser son paramètre Quantity pour augmenter le nombre de traces de pile affichées. Par exemple, !verifier 0x80 affiche les 128 dernières allocations ayant échoué.
Dans cet exemple, notez que le vérificateur a intercepté et remplacé l’appel du pilote à ExAllocatePoolWithTag. L’une des causes les plus courantes d’incidents de pilote se produit lorsqu’un pilote tente d’allouer de la mémoire, puis utilise le pointeur retourné par la fonction d’allocation avant de vérifier qu’il n’est pas NULL.
kd> !verifier 4
Resource fault injection history:
Tracker @ 8354A000 (# entries: 80, size: 80, depth: 8)
Entry @ 8354B258 (index 75)
Thread: C2638220
816760CB nt!VerifierExAllocatePoolWithTag+0x49
A4720443 win32k!bDeleteAllFlEntry+0x15d
A4720AB0 win32k!GreEnableEUDC+0x70
A47218FA win32k!CleanUpEUDC+0x37
A473998E win32k!GdiMultiUserFontCleanup+0x5
815AEACC nt!MiDereferenceSession+0x74
8146D3B4 nt!MmCleanProcessAddressSpace+0x112
815DF739 nt!PspExitThread+0x603
Entry @ 8354B230 (index 74)
Thread: 8436D770
816760CB nt!VerifierExAllocatePoolWithTag+0x49
A462141C win32k!Win32AllocPool+0x13
A4725F94 win32k!StubGdiAlloc+0x10
L’expérience avec le test de simulation de ressources faibles révèle que la plupart des accidents de pilote sont causés par l’allocation ayant échoué le plus récemment. Dans l’exemple ci-dessus, le plantage était sur le chemin de win32k! GreEnableEUDC. Examinez le code dans le chemin de l’allocation pour trouver la cause de l’incident.
Pour plus d’informations sur !verifier, consultez la documentation Outils de débogage pour Windows .
Pour afficher les paramètres du Registre sur la ligne de commande, utilisez l’option /querysettings . Par exemple :
C:\>verifier /querysettings
Special pool: Disabled
Pool tracking: Disabled
Force IRQL checking: Disabled
I/O verification: Disabled
Enhanced I/O verification: Disabled
Deadlock detection: Disabled
DMA checking: Disabled
Security checks: Disabled
Force pending I/O requests: Disabled
Low resources simulation: Enabled
IRP Logging: Disabled
Miscellaneous checks: Disabled
Low Resources Simulation options:
- Fault injection probability: 1/10000.
- Fail only allocations using pool tags: Tag1 Tag2.
- Simulate low resources conditions only in applications: test1.exe test2.exe.
- Boot time delay: 2 minutes.
Verified drivers:
blah.sys