Comment définir un point d'arrêt dans WlanSvc?

0

Mon WiFi continue de se déconnecter et je contrôle mon ordinateur avec Synergy. J'ai fouillé dans les journaux des événements et constaté que tout commence par un WlanSvcDisconnectRequest (qui fait partie de WlanSvc exécuté sous svchost.) Je suis assez confiant que ce n'est pas une erreur matérielle.

J'en ai assez d'être obligé de rebrancher mon dongle wifi pour le reconnecter (car l'ordinateur est contrôlé avec Synergy et n'a pas de clavier / souris connecté), alors j'ai décidé d'essayer de le déboguer pour voir si je pouvais déterminez ce qui envoie réellement WlanSvcDisconnectRequest toutes les quelques minutes.

J'ai essayé de mon mieux pour voir si je pouvais le déboguer, mais je n'arrive pas à définir le point d'arrêt.

J'utilise la bonne version de WinDbg (64 bits) et l'exécute en tant que processus élevé.

Je l'ai ouvert, trouvé le processus svchost qui exécute le WlanSvc et tenté de définir un point d'arrêt:

0:013> bc *
0:013> bp wlansvc!WlanSvcDisconnectRequest
0:013> bl
 0 e 00007ff8`6d914ba8     0001 (0001)  0:**** wlansvc!WlanSvcDisconnectRequest
0:013> g
Unable to insert breakpoint 0 at 00007ff8`6d914ba8, Win32 error 0n998
    "Invalid access to memory location."
The breakpoint was set with BP.  If you want breakpoints
to track module load/unload state you must use BU.
bp0 at 00007ff8`6d914ba8 failed
WaitForEvent failed
ntdll!DbgBreakPoint+0x1:
00007ff8`75729921 c3              ret

J'ai également essayé de le définir comme un point d'arrêt non résolu:

0:013> bc *
0:013> x wlansvc!WlanSvcDisconnectRequest
00007ff8`6d914ba8 wlansvc!WlanSvcDisconnectRequest = <no type information>
0:013> bu wlansvc!WlanSvcDisconnectRequest
0:013> g
Unable to insert breakpoint 0 at 00007ff8`6d914ba8, Win32 error 0n998
    "Invalid access to memory location."
bp0 at 00007ff8`6d914ba8 failed
WaitForEvent failed
ntdll!DbgBreakPoint+0x1:
00007ff8`75729921 c3              ret

Je n'avais jamais utilisé WinDbg auparavant, mais une grande quantité de recherches sur Google a été faite en vain. Pourquoi suis-je incapable de définir le point d'arrêt pour wlansvc!WlanSvcDisconnectRequest?


Version WinDbg:

Microsoft (R) Windows Debugger Version 10.0.14321.1024 AMD64

Information système:

OS Name:                   Microsoft Windows 10 Pro
OS Version:                10.0.14393 N/A Build 14393
OS Manufacturer:           Microsoft Corporation
OS Configuration:          Standalone Workstation
OS Build Type:             Multiprocessor Free

System Type:               x64-based PC
Processor(s):              1 Processor(s) Installed.
                           [01]: Intel64 Family 6 Model 15 Stepping 2 GenuineIntel ~1867 Mhz

Chemin du symbole:

srv*;C:\Symbols\wlansvc.pdb

Mise à jour: essayé de désactiver ASLR avec EMETS, n'a pas aidé à essayer de définir le point d'arrêt.

Austin Burk
la source
Avez-vous essayé un autre dongle wifi?
harrymc

Réponses:

1

Le problème est que wlansvc!WlanSvcDisconnectRequest est en fait une structure de données stockée dans .rdata section de wlansvc.dll. Il est stocké dans la mémoire en lecture seule et ne contient aucun code. Créer un point d'arrêt n'a donc aucun sens.

Vous pouvez le vérifier par !address wlansvc!WlanSvcDisconnectRequest commander. Il rapportera PAGE_READONLY protection de page pour une région de mémoire donnée.

Si vous voulez interrompre la lecture d’un code qui accède à cette structure, vous devez définir un paramètre. point d'arrêt de données : ba r1 wlansvc!WlanSvcDisconnectRequest

Ou vous pouvez simplement mettre un point d'arrêt standard à wlansvc!IntfDisconnect fonctionner comme cela semble être le seul endroit qui contient une référence à wlansvc!WlanSvcDisconnectRequest structure (qui pourrait être trouvée en utilisant IDA désassembleur par exemple).

ge0rdi
la source
Je vous remercie! J'apprécie vraiment cela. Je vais tenter le coup cet après-midi.
Austin Burk