Le véritable coupable du clignotement de la LED HDD sur mon ordinateur portable Acer était le service nommé en interne BrcmCardReader avec le nom long Broadcom Card Reader Service. Dès que j'ai arrêté le service, le clignotement s'est également arrêté. Et bien sûr, je n'ai pas eu à désactiver le CD-ROM ou à couvrir la LED avec la bande pour y parvenir. Contrairement à ce qui est écrit dans les autres articles ici, le système d'exploitation lui-même n'est pas si mal écrit pour interroger quoi que ce soit. Mais ce service écrit par Broadcom est une autre histoire.
J'ai d'abord essayé de comprendre les causes des clignotements pour constater que c'était quelque chose comme wbem wmiprvse.exe qui faisait des choses comme IRP_MJ_QUERY_INFORMATION
et IRP_MJ_QUERY_VOLUME_INFORMATION
pour chaque lecteur. Comme je savais que wmiprvse est en fait un composant d'exécution WMI écrit par Microsoft, j'ai même essayé d'utiliser le journal des événements pour tracer l'activité WMI, comme documenté sur MSDN. Ce n'était pas utile, je n'ai pu observer que
ProviderInfo for GroupOperationId = 101; Operation = Provider::CreateInstanceEnum - CIMWin32 : Win32_LogicalDisk; HostID = 2368; ProviderName = CIMWin32; ProviderGuid = {d63a5850-8f16-11cf-9f47-00aa00bf345c}; Path = %systemroot%\system32\wbem\cimwin32.dll
Microsoft fait évidemment un mauvais travail dans cette trace: le CIMWin32, l'ID d'hôte, le guide du fournisseur et le chemin pointent tous vers le binaire exécutant le WMI, pas vers le programme faisant des requêtes WMI. Donc, à ce moment-là, je n'ai pas pu découvrir que Broadcom Card Reader Service le faisait comme rien ne le signalait, c'est pourquoi je cite tout cela afin de soulager la douleur de quiconque met ces articles dans la machine de recherche. Cette incapacité à voir qui commande réellement l'activité est aussi l'explication pourquoi certaines personnes ici prétendent que "c'est un système d'exploitation:" quiconque s'arrête à ce stade ne voit rien d'autre. Mais je savais que wmiprvse ne le faisait pas sur lui-même, je savais qu'il devait y avoir un autre processus commandant.
Donc, finalement, un jour après avoir fait une sauvegarde d'image de tout mon système, j'ai commencé avec l'approche par force brute, éteignant les choses une par une, jusqu'à ce que le clignotement s'arrête. Alors maintenant, je suis sûr. Il s'agit du service Broadcom Card Reader . Et comme je suis en fait un programmeur, j'ai même inspecté les chaînes à l'intérieur de c:\Program Files\Broadcom\MemoryCard\BrcmCardReader.exe
et j'ai trouvé ce qu'il fait exactement, dès qu'il est allumé:
SELECT * FROM __InstanceDeletionEvent WITHIN 1 WHERE TargetInstance ISA 'Win32_LogicalDisk'
SELECT * FROM __InstanceCreationEvent WITHIN 0.1 WHERE TargetInstance ISA 'Win32_LogicalDisk'
Étant donné que le clignotement se produit si régulièrement, il est évident qu'il interroge en continu. C'est une programmation incroyablement mauvaise du service. Observez la clause WITHIN dans les requêtes. Plus précisément, Microsoft documente comment ces constructions se comportent dans le WMI:
http://technet.microsoft.com/en-us/magazine/2006.09.wmievents.aspx
Notez que la clause WITHIN spécifie l'intervalle d'interrogation pour les classes d'événements intrinsèques. Étant donné que la classe surveillée n'a pas de fournisseur d'événements correspondant, le mécanisme d'interrogation WMI est utilisé pour vérifier périodiquement si un événement intrinsèque s'est produit pour la classe particulière. Cet intervalle d'interrogation est spécifié par le mot clé WITHIN et mesuré en secondes.
Donc , je sais maintenant que les programmeurs de service Broadcom ont décidé de scrutin pour le __InstanceDeletionEvent
de chaque disque logique à chaque seconde et __InstanceCreationEvent
même 10 fois par seconde ! Et ils parviennent à impliquer COM, à séparer les processus et à le faire via WMI / wmiprvse d'une manière qui n'est pas observable (du moins je ne l'ai pas découvert) que leur service fait ça!
Mauvaise, programmation incroyablement mauvaise.
Et il y a une solution appropriée pour les services et applications: RegisterDeviceNotification
. Une véritable notification (c'est-à-dire silencieuse lorsqu'il ne se passe rien de nouveau) peut être reçue par les services via l' SERVICE_CONTROL_DEVICEEVENT
événement. Voir par exemple:
/programming/706352/use-registerdevicenotification-for-all-usb-devices
Après avoir connu tout cela, la recherche de Broadcom Card Reader Service renvoie en fait quelques articles de personnes qui l'ont découvert plus tôt: sur community.acer.com (je cite les articles pour lesquels je n'ai pas trouvé de permaliens):
"Vladan Re: pilote de lecteur de carte Aspire 5750Z, Win 8 11-29-2012 06:29 AM
Je viens de découvrir que Broadcom Card Reader Service fait que le disque dur clignote plusieurs fois par seconde, tout le temps. L'arrêt et la définition de ce service sur manuel ou même désactivé corrigent le problème de clignotement sans impact sur la fonctionnalité du lecteur de cartes. "
sur bleepingcomputer.com:
"Cheesenbranston Publié le 28 mai 2013 - 04:47
J'ai eu un problème similaire depuis l'installation de Win8 pro x64 comme une nouvelle installation, c'est-à-dire pas une mise à niveau. Dans le Gestionnaire des tâches, bien que le débit du disque ne semblait pas particulièrement élevé, l'utilisation était constamment à 100%. Je crois avoir identifié le problème comme étant le service Broadcom Card Reader. "
et sur Amazon.co.uk, une critique de SJ Harvey le 1er février 2013:
http://www.amazon.co.uk/review/R3GZB5OXP4SNP7/ref=cm_cr_rdp_perm?ie=UTF8&ASIN=B009QZCYU4&linkCode=&nodeID=&tag=
La seule chose qui m'a VRAIMENT dérangé (notez le passé) est que la lumière du lecteur clignotait constamment. Ce n'était pas une activité du disque dur et après quelques heures, j'ai retrouvé le coupable. C'était le service Broadcom Card-Reader .
Il suggère en outre de basculer le service en mode manuel, mais sur mon ordinateur, j'ai dû le désactiver complètement.
Ainsi, les gens ont même signalé une utilisation plus élevée des ressources, à part le simple clignotement de la LED HDD.
La solution finale: désactivez le " Broadcom Card Reader Service " : dans les services, accédez à ses propriétés, arrêtez-le et changez son type de démarrage en "désactivé". Le clignotement s'arrêtera enfin. J'aimerais vraiment savoir à quoi ça sert de toute façon - qu'est-ce qui me manque en l'éteignant? Voyant à quel point il est mal programmé, je ne serais pas surpris que le but du service soit de changer une icône lorsque la carte mémoire est insérée! Ce que je suis sûr, c'est qu'une mauvaise utilisation du WMI est vraiment une mauvaise programmation.