Thủ phạm thực sự của đèn LED HDD nhấp nháy trên máy tính xách tay Acer của tôi là dịch vụ có tên nội bộ BrcmCardReader với tên dài là Dịch vụ đầu đọc thẻ Broadcom.Ngay sau khi tôi dừng dịch vụ, nháy mắt cũng dừng lại. Và dĩ nhiên tôi không phải vô hiệu hóa CD-ROM hoặc che đèn LED bằng băng để đạt được điều này. Trái ngược với những gì được viết trong các bài đăng khác ở đây, bản thân hệ điều hành không được viết quá tệ để thăm dò ý kiến. Nhưng dịch vụ này được viết bởi Broadcom là một câu chuyện khác.
Trước tiên tôi đã cố gắng tìm ra nguyên nhân gây ra chớp mắt chỉ để thấy rằng đó là một cái gì đó giống như wbem wmiprvse.exe đã làm những việc như IRP_MJ_QUERY_INFORMATION
và IRP_MJ_QUERY_VOLUME_INFORMATION
cho mọi ổ đĩa. Như tôi biết rằng wmiprvse thực sự là một thành phần thực thi WMI được viết bởi Microsoft, tôi thậm chí đã thử sử dụng Nhật ký sự kiện để theo dõi hoạt động WMI, như được ghi lại trên MSDN. Nó không hữu ích, tôi chỉ có thể quan sát
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 rõ ràng thực hiện công việc kém trong dấu vết này: CIMWin32, id máy chủ lưu trữ, hướng dẫn của nhà cung cấp và đường dẫn tất cả chỉ đến nhị phân thực thi WMI, chứ không phải chương trình thực hiện truy vấn WMI. Vì vậy, tại thời điểm đó tôi không thể phát hiện ra rằng Dịch vụ đầu đọc thẻ Broadcom làm điều đó như không có gì được ghi vào nó, đó là lý do tại sao tôi trích dẫn tất cả những điều này để giảm bớt nỗi đau cho bất kỳ ai đặt các mục này vào máy tìm kiếm. Việc không thể biết ai thực sự chỉ huy hoạt động cũng là lời giải thích tại sao một số người ở đây tuyên bố rằng "đó là một hệ điều hành:" bất cứ ai dừng lại ở thời điểm này sẽ không thấy gì khác. Nhưng tôi biết rằng wmiprvse không tự làm điều đó, tôi biết rằng phải có một số quy trình khác.
Vì vậy, cuối cùng một ngày sau khi tôi thực hiện sao lưu hình ảnh cho toàn bộ hệ thống của mình, tôi bắt đầu với phương pháp vũ phu, tắt từng thứ một, cho đến khi chớp mắt dừng lại. Vì vậy, bây giờ tôi chắc chắn. Đó là Dịch vụ đọc thẻ Broadcom . Và vì tôi thực sự là một lập trình viên, tôi thậm chí đã kiểm tra các chuỗi bên trong c:\Program Files\Broadcom\MemoryCard\BrcmCardReader.exe
và tôi đã tìm thấy chính xác những gì nó làm, ngay khi nó được bật:
SELECT * FROM __InstanceDeletionEvent WITHIN 1 WHERE TargetInstance ISA 'Win32_LogicalDisk'
SELECT * FROM __InstanceCreationEvent WITHIN 0.1 WHERE TargetInstance ISA 'Win32_LogicalDisk'
Vì chớp mắt xảy ra rất thường xuyên, rõ ràng là nó đang bỏ phiếu liên tục. Đó là chương trình dịch vụ tồi tệ đến khó tin. Quan sát mệnh đề FORIN trong các truy vấn. Cụ thể, Microsoft ghi lại cách các cấu trúc như vậy hoạt động trong WMI:
http://technet.microsoft.com/en-us/magazine/2006.09.wmievents.aspx
Lưu ý rằng mệnh đề FORIN chỉ định khoảng thời gian bỏ phiếu cho các lớp sự kiện nội tại. Do lớp được theo dõi không có nhà cung cấp sự kiện tương ứng, nên cơ chế bỏ phiếu WMI được sử dụng để kiểm tra định kỳ nếu một sự kiện nội tại đã xảy ra đối với lớp cụ thể. Khoảng thời gian bỏ phiếu này được chỉ định bởi từ khóa FORIN và được tính bằng giây.
Vì vậy, bây giờ tôi biết rằng các lập trình viên dịch vụ Broadcom đã quyết định thăm dò ý kiến __InstanceDeletionEvent
của mỗi đĩa logic mỗi giây và __InstanceCreationEvent
thậm chí 10 lần mỗi giây ! Và họ quản lý để liên quan đến COM, các quy trình riêng biệt và thực hiện điều này qua WMI / wmiprvse theo cách không thể quan sát được (ít nhất là tôi đã không phát hiện ra) rằng dịch vụ của họ đang làm điều này!
Xấu, lập trình xấu đáng kinh ngạc.
Và có giải pháp thích hợp cho các dịch vụ và ứng dụng : RegisterDeviceNotification
. Một thông báo thực sự (nghĩa là im lặng khi không có gì mới xảy ra) có thể được nhận bởi các dịch vụ thông qua SERVICE_CONTROL_DEVICEEVENT
sự kiện. Xem ví dụ:
/programming/706352/use-registerdevicenotification-for-all-usb-devices
Sau khi biết tất cả những điều này, việc tìm kiếm Dịch vụ đầu đọc thẻ Broadcom thực sự trả về một vài bài đăng của những người đã phát hiện ra nó trước đó: trên Community.acer.com (Tôi đang trích dẫn những bài đăng mà tôi chưa tìm thấy permalinks):
"Vladan Re: Trình điều khiển đầu đọc thẻ Aspire 5750Z, Win 8 11-29-2012 06:29 AM
Chỉ cần phát hiện ra rằng Dịch vụ đọc thẻ Broadcom đang khiến hdd dẫn đến nhấp nháy nhiều lần mỗi giây, mọi lúc. Dừng và cài đặt dịch vụ này thành thủ công hoặc thậm chí bị vô hiệu hóa khắc phục sự cố nhấp nháy mà không ảnh hưởng đến chức năng đọc thẻ. "
trên bleepingcomputer.com:
"Cheesenbranston Đăng ngày 28 tháng 5 năm 2013 - 04:47 AM
Tôi đã gặp vấn đề tương tự kể từ khi cài đặt Win8 pro x64 dưới dạng cài đặt mới, tức là không phải là bản nâng cấp. Trong Trình quản lý tác vụ mặc dù thông lượng đĩa dường như không sử dụng đặc biệt cao liên tục ở mức 100%. Tôi tin rằng tôi đã xác định được sự cố là dịch vụ Đầu đọc thẻ Broadcom. "
và trên Amazon.co.uk, đánh giá của SJ Harvey vào ngày 1 tháng 2 năm 2013:
http://www.amazon.co.uk/review/R3GZB5OXP4SNP7/ref=cm_cr_rdp_perm?ie=UTF8&ASIN=B009QZCYU4&linkCode=&nodeID=&tag=
Một điều mà THỰC SỰ làm tôi khó chịu (lưu ý thì quá khứ) là ánh sáng ổ đĩa nhấp nháy liên tục. Đó không phải là hoạt động của ổ cứng và sau một vài giờ tôi đã truy tìm được thủ phạm. Đó là dịch vụ Broadcom Card-Reader .
Anh ta còn đề nghị chuyển dịch vụ sang thủ công, trên máy tính của tôi, tôi phải vô hiệu hóa hoàn toàn.
Vì vậy, mọi người thậm chí còn báo cáo việc sử dụng tài nguyên cao hơn, ngoài đèn LED chỉ nhấp nháy.
Giải pháp cuối cùng: vô hiệu hóa " Dịch vụ đầu đọc thẻ Broadcom " : trong Dịch vụ đi đến các thuộc tính của nó, dừng nó và thay đổi loại khởi động thành "bị vô hiệu hóa". Việc chớp mắt cuối cùng sẽ dừng lại. Tôi thực sự muốn biết mục đích của nó là gì - tôi đang thiếu gì khi tắt nó đi? Có vẻ như nó được lập trình kém đến mức nào, tôi sẽ không ngạc nhiên khi toàn bộ mục đích của dịch vụ là thay đổi một số biểu tượng khi lắp thẻ nhớ! Điều tôi chắc chắn là việc lạm dụng WMI thực sự là lập trình tồi.