Estou enfrentando um problema peculiar que não posso consertar. Descobri recentemente que minha atualização do Win 8.1 (com todas as atualizações no WSUS off-line) começa a consumir toda a CPU ao abrir a janela "o dispositivo e as impressoras".
Há um atraso de 5 a 10 'até que os dispositivos apareçam, mas a CPU continua girando mesmo depois que os ícones são exibidos por cerca de 5 a 10' mais minutos.
O arquivo Xperf (graças a @ magicandre1981 para instruções) é postado em Dropbox - 24MB zip descompactado para 145MB.
Olhando pelo explorador de processos da Sysinternals, parece que o problema é causado por MultiByteToUnicodeN
call (infelizmente não consigo postar uma imagem):
ntdll.dl!RtlMultiByteToUnicodeN+0x1cf0
ntdll.dl!RtlMultiByteToUnicodeN+0x1cf0
ntdll.dl!RtlMultiByteToUnicodeN+0x1cf0
ntdll.dl!RtlMultiByteToUnicodeN+0x1cf0
ntdll.dl!RtlMultiByteToUnicodeN+0x1cf0
SHCORE.dll!GetScaleFactorForDevice+0x1d4
FunDisc.dll!DllCanUnloadNow+0x2e8
SHCORE.dll!GetScaleFactorForDevice+0x1d4
SHCORE.dll!GetScaleFactorForDevice+0x1d4
windows.immersiveshell.serviceprovider.dll!
SHCORE.dll!GetScaleFactorForDevice+0x1d4
SHCORE.dll!GetScaleFactorForDevice+0x1d4
SHCORE.dll!GetScaleFactorForDevice+0x1d4
SHCORE.dll!GetScaleFactorForDevice+0x1d4
Explorer.EXE
Alguma idéia de como corrigir isso? Ou eu espero 20 'ou então ou tenho que matar a tarefa do explorador. Eu tentei reinstalar todos os dispositivos sem sucesso; por alguma razão, renderizar esta janela faz com que a tradução unicode coma toda a CPU.
Atualizar com símbolos
Com base no comentário recebido, instalei os símbolos retail para o windows 8.1 e apontei o explorador de processos (conforme explicado em este post para ele, no entanto, a saída parece praticamente o mesmo. Eu olhei para a pilha para um thread e parece que está gastando a maior parte do tempo na sincronização em um objeto:
ntoskrnl.exe!KeSynchronizeExecution+0x2246
ntoskrnl.exe!KeRemoveQueueEx+0x108e
ntoskrnl.exe!KeRemoveQueueEx+0xae9
ntoskrnl.exe!KeWaitForSingleObject+0x22a
ntoskrnl.exe!KeSetBasePriorityThread+0x4ec
ntoskrnl.exe!KeRemoveQueueEx+0x281d
ntoskrnl.exe!KiCheckForKernelApcDelivery+0x23
ntoskrnl.exe!SeQuerySessionIdToken+0x1b99
ntoskrnl.exe!SeQuerySessionIdToken+0x15f9
ntoskrnl.exe!SeQuerySessionIdToken+0x1440
ntoskrnl.exe!FsRtlAllocateExtraCreateParameter+0x744e
ntoskrnl.exe!FsRtlAllocateExtraCreateParameter+0x52c4
ntoskrnl.exe!FsRtlAllocateExtraCreateParameter+0x13c8
ntoskrnl.exe!FsRtlAllocateExtraCreateParameter+0x10da
ntoskrnl.exe!IoDeleteAllDependencyRelations+0x14d0
ntoskrnl.exe!FsRtlAllocateExtraCreateParameter+0xa96
ntoskrnl.exe!FsRtlAllocateExtraCreateParameter+0x898
ntoskrnl.exe!ObReferenceObjectByHandleWithTag+0xe92
ntoskrnl.exe!NtDeviceIoControlFile+0x56
ntoskrnl.exe!setjmpex+0x34b3
ntdll.dll!NtDeviceIoControlFile+0xa
KERNELBASE.dll!GetModuleHandleExA+0xb6
KERNEL32.DLL!DeviceIoControl+0x80
cfgmgr32.dll!SwMemFree+0x6a7
KERNELBASE.dll!SetKernelObjectSecurity+0xc1
ntdll.dll!RtlAcquireSRWLockExclusive+0x31e
ntdll.dll!RtlMultiByteToUnicodeN+0x20a3
KERNEL32.DLL!BaseThreadInitThunk+0xd
ntdll.dll!RtlUserThreadStart+0x1d
Aqui está outra pilha de um dos threads iniciais ( SHCORE.dll!GetScaleFactorForDevice
):
ntoskrnl.exe!KeSynchronizeExecution+0x2246
ntoskrnl.exe!KeRemoveQueueEx+0x108e
ntoskrnl.exe!KeRemoveQueueEx+0xae9
ntoskrnl.exe!KeWaitForSingleObject+0x22a
ntoskrnl.exe!KeSetBasePriorityThread+0x4ec
ntoskrnl.exe!KeRemoveQueueEx+0x281d
ntoskrnl.exe!KiCheckForKernelApcDelivery+0x23
win32k.sys+0x12aaea
win32k.sys+0x6d10d
win32k.sys+0xca699
win32k.sys+0x35a9f
win32k.sys+0x2a514
win32k.sys+0x138e28
win32k.sys+0x19fa8
win32k.sys+0x4921e
ntoskrnl.exe!setjmpex+0x34b3
USER32.dll!WindowFromPhysicalPoint+0x1a
USER32.dll!CallWindowProcW+0x2bf
USER32.dll!SendMessageW+0x111
UxTheme.dll!DrawThemeParentBackgroundEx+0x18f
Comctl32.dll!ImageList_GetIconSize+0xee3
Comctl32.dll!ImageList_GetIconSize+0x1107
Comctl32.dll!DrawScrollBar+0x12bf
USER32.dll!DispatchMessageW+0x154
USER32.dll!CallWindowProcW+0x132
Comctl32.dll!DefSubclassProc+0xb2
Comctl32.dll!DefSubclassProc+0x77
explorerframe.dll!Ordinal111+0x655d
Comctl32.dll!DPA_GetPtr+0x282
Comctl32.dll!DPA_GetPtr+0x152
USER32.dll!DispatchMessageW+0x154
USER32.dll!OffsetRect+0x172
USER32.dll!OffsetRect+0x22d
ntdll.dll!KiUserCallbackDispatcher+0x1f
USER32.dll!WindowFromPhysicalPoint+0x1a
USER32.dll!CallWindowProcW+0x2bf
USER32.dll!SendMessageW+0x111
UxTheme.dll!DrawThemeParentBackgroundEx+0x1a6
explorerframe.dll!Ordinal111+0xabef
explorerframe.dll!Ordinal111+0x6ae5
USER32.dll!DispatchMessageW+0x154
USER32.dll!OffsetRect+0x172
USER32.dll!OffsetRect+0x22d
ntdll.dll!KiUserCallbackDispatcher+0x1f
USER32.dll!WindowFromPhysicalPoint+0x1a
USER32.dll!CallWindowProcW+0x2bf
USER32.dll!SendMessageW+0x111
UxTheme.dll!DrawThemeParentBackgroundEx+0x1a6
explorerframe.dll!Ordinal111+0xaa52
Comctl32.dll!DPA_GetPtr+0x282
Comctl32.dll!DPA_GetPtr+0x152
USER32.dll!GetWindowLongPtrA+0x265
USER32.dll!OffsetRect+0x172
USER32.dll!OffsetRect+0x22d
ntdll.dll!KiUserCallbackDispatcher+0x1f
USER32.dll!SendMessageW+0x1aa
USER32.dll!SendMessageW+0x1bc
explorerframe.dll!Ordinal111+0x546e
explorerframe.dll!Ordinal111+0x10568
explorerframe.dll!Ordinal111+0x11d50
explorerframe.dll!Ordinal111+0x11d00
explorerframe.dll!Ordinal111+0xeee3
SHELL32.dll!SHGetKnownFolderPathWorker+0x84c
SHELL32.dll!SHGetKnownFolderPathWorker+0xa23
SHCORE.dll!GetScaleFactorForDevice+0x333
KERNEL32.DLL!BaseThreadInitThunk+0xd
ntdll.dll!RtlUserThreadStart+0x1d
Note que demorou cerca de 30 'desta vez - teve tempo de instalar os símbolos, ler os posts, fazer alguns diagnósticos e postar de volta e ainda ter o CPU levantado ..
Segunda atualização para símbolos
Graças a @kinokijuf, usei o Debug.dll do Windows Defender e tenho informações mais precisas. Os Threads agora se parecem com o seguinte:
ntdll.dll!TppWorkerThread
ntdll.dll!TppWorkerThread
ntdll.dll!TppWorkerThread
ntdll.dll!TppWorkerThread
ntdll.dll!TppWorkerThread
SHCORE.dll!Microsoft::WRL::FtmBase::MarshalInterface+0x1c
SHCORE.dll!Microsoft::WRL::FtmBase::MarshalInterface+0x1c
FunDisc.dll!CNotificationQUeue::ThreadProc
SHCORE.dll!Microsoft::WRL::FtmBase::MarshalInterface+0x1c
windows.immersiveshell.serviceprovicer.dll!CImmersiveShellController::s_ImmersiveShellComponentsThreadProc
Explorer.EXE!wWinMainCRTStartup
Enquanto os threads de nível superior ainda mostram contenção de thread / lock?:
ntoskrnl.exe!KiSwapContext+0x76
ntoskrnl.exe!KiSwapThread+0x14e
ntoskrnl.exe!KiCommitThreadWait+0x129
ntoskrnl.exe!KeWaitForSingleObject+0x22a
ntoskrnl.exe!KiSchedulerApc+0x74
ntoskrnl.exe!KiDeliverApc+0x1fd
ntoskrnl.exe!KiSwapThread+0x2da
ntoskrnl.exe!KiCommitThreadWait+0x129
ntoskrnl.exe!KeRemoveQueueEx+0x27b
ntoskrnl.exe!IoRemoveIoCompletion+0x8a
ntoskrnl.exe!NtWaitForWorkViaWorkerFactory+0x30a
ntoskrnl.exe!KiSystemServiceCopyEnd+0x13
ntdll.dll!NtWaitForWorkViaWorkerFactory+0xa
ntdll.dll!TppWorkerThread+0x286
KERNEL32.DLL!BaseThreadInitThunk+0xd
ntdll.dll!RtlUserThreadStart+0x1d
Obrigado,