!lpc

Important Lpc est maintenant émulé dans alpc : utilisez l’extension !alpc à la place.

L’extension !lpc affiche des informations sur tous les ports d’appel de procédure locale (LPC) et sur les messages dans le système cible.

!lpc message MessageID 
!lpc port Port 
!lpc scan Port 
!lpc thread Thread 
!lpc PoolSearch 
!lpc

Paramètres

Message
(Windows Server 2003, Windows XP et Windows 2000 uniquement) Affiche des informations sur un message, comme le port du serveur qui contient le message dans la file d’attente et, le cas échéant, le thread en attente de ce message.

MessageID
(Windows Server 2003, Windows XP et Windows 2000 uniquement) Spécifie l’ID du message à afficher. Si la valeur de ce paramètre est 0, ou si ce paramètre est omis, la commande !lpc message affiche une liste récapitulative des messages. (Dans Windows 2000 avec Service Pack 1 (SP1), le résumé inclut tous les messages de la zone LPC. Dans Windows 2000 avec Service Pack 2 (SP2), dans Windows XP et dans les versions ultérieures de Windows, le résumé inclut tous les messages du pool de noyaux. Les messages paginés ne sont pas inclus.)

port
(Windows Server 2003, Windows XP et Windows 2000 uniquement) Affiche des informations sur le port, telles que le nom du port, son état sémaphore, les messages dans ses files d’attente, les threads présents dans sa file en attente d’exécution, son nombre de descripteurs, ses références et les ports associés.

numériser
(Windows Server 2003, Windows XP et Windows 2000 uniquement) Affiche des informations récapitulatives sur le port spécifié et sur tous les ports qui y sont connectés.

Port
(Windows Server 2003, Windows XP et Windows 2000 uniquement) Spécifie l’adresse hexadécimale du port à afficher. Si la commande !lpc port est utilisée et que Port est égal à 0 ou omis, une liste récapitulative de tous les ports LPC s’affiche. Si la commande !lpc scan est utilisée, Port doit spécifier l’adresse d’un port réel.

fil
(Windows Server 2003, Windows XP et Windows 2000 uniquement) Affiche les informations sur tous les ports qui contiennent le thread spécifié dans leurs files de port en arrêt.

Fil
(Windows Server 2003, Windows XP et Windows 2000 uniquement) Spécifie l’adresse hexadécimale du thread. Si ce paramètre a la valeur 0 ou est omis, la commande !lpc thread affiche une liste récapitulative de tous les threads qui effectuent des opérations LPC.

PoolSearch
(Windows Server 2003 et Windows XP uniquement) Détermine si la commande !lpc message recherche les messages dans le pool de noyaux. Chaque fois que le paramètre !lpc PoolSearch est utilisé, il est activé ou désactivé (le paramètre initial consiste à ne pas effectuer de recherche dans le pool de noyau). Cela affecte uniquement les commandes !lpc message qui spécifient une valeur différente de zéro pour MessageID.

DLL

Kdexts.dll

Informations supplémentaires

Pour plus d’informations sur les LPC, consultez la documentation du kit de développement Windows (WDK) et Microsoft Windows Internals (Au cœur de Windows) de Mark Russinovich et David Solomon.

Notes

Cette extension n’est pas prise en charge dans Windows Vista ou les versions ultérieures de Windows.

Dans Windows Server 2003, Windows XP et Windows 2000, l’utilisation de !lpc sans argument affiche l’aide de cette extension dans la fenêtre de commande du débogueur.

Si vous avez un thread marqué en attente d’une réponse à un message, utilisez la commande !lpc message avec l’ID du message retardé. Cette commande affiche le message spécifié, le port qui le contient et tous les threads associés.

Si le message est introuvable et qu’il n’y a pas eu d’erreurs de lecture (par exemple, « Impossible d’accéder au segment de zone »), le serveur a reçu le message.

Dans ce cas, le port du serveur peut généralement être trouvé grâce à la commande !lpc thread. Les threads qui attendent des réponses sont liés à une file d’attente de communication serveur. Cette commande affiche tous les ports qui contiennent le thread spécifié. Une fois que vous connaissez l’adresse du port, utilisez la commande !lpc port. Vous pouvez obtenir des informations plus spécifiques sur chaque thread grâce à la commande !lpc thread avec l’adresse de chaque thread.

Voici des exemples de sortie de cette extension à partir d’un système Windows XP :

Dans cet exemple, tous les ports LPC sont affichés.

kd> !lpc port
Scanning 225 objects
       1  Port: 0xe1405650 Connection: 0xe1405650  Communication: 0x00000000  'SeRmCommandPort' 
       1  Port: 0xe141ef50 Connection: 0xe141ef50  Communication: 0x00000000  'SmApiPort' 
       1  Port: 0xe13c5740 Connection: 0xe13c5740  Communication: 0x00000000  'ApiPort' 
       1  Port: 0xe13d9550 Connection: 0xe13d9550  Communication: 0x00000000  'SbApiPort' 
       3  Port: 0xe13d8830 Connection: 0xe141ef50  Communication: 0xe13d8910  ' 
80000004  Port: 0xe13d8910 Connection: 0xe141ef50  Communication: 0xe13d8830  ' 
       3  Port: 0xe13d8750 Connection: 0xe13d9550  Communication: 0xe13a4030  ' 
       .....

Dans l’exemple précédent, le port à l’adresse e14ae238 ne contient aucun message : autrement dit, tous les messages ont été récupérés et aucun nouveau message n’a été reçu.

kd> !lpc port e14ae238

Server connection port e14ae238  Name: ApiPort
 Handles: 1   References: 107
    Server process  : 84aa0140 (csrss.exe)
    Queue semaphore : 84a96da8
 Semaphore state 0 (0x0)
    The message queue is empty
    The LpcDataInfoChainHead queue is empty

Dans l’exemple précédent, le port à l’adresse 0xe14ae238 contient des messages qui ont été mis en file d’attente, mais qui n’ont pas encore été récupérés par le serveur.

kd> !lpc port 0xe14ae238

Server connection port e14ae238  Name: ApiPort
 Handles: 1   References: 108
    Server process  : 84aa0140 (csrss.exe)
    Queue semaphore : 84a96da8
 Semaphore state 0 (0x0)
        Messages in queue:
 0000 e20d9b80 - Busy  Id=0002249c  From: 0584.0680  Context=00000021  [e14ae248 . e14ae248]
 Length=0098007c  Type=00000001 (LPC_REQUEST)
                   Data: 00000000 0002021e 00000584 00000680 002f0001 00000007
    The message queue contains 1 messages
    The LpcDataInfoChainHead queue is empty

Les autres exemples sur Windows XP concernent les autres options qui peuvent être utilisées avec cette extension.

kd> !lpc message 222be
Searching message 222be in threads ...
Client thread 842a4db0 waiting a reply from 222be
Searching thread 842a4db0 in port rundown queues ...

Server communication port 0xe114a3c0
    Handles: 1   References: 1
    The LpcDataInfoChainHead queue is empty
        Connected port: 0xe1e7b948      Server connection port: 0xe14ae238

Client communication port 0xe1e7b948
    Handles: 1   References: 3
    The LpcDataInfoChainHead queue is empty

Server connection port e14ae238  Name: ApiPort
 Handles: 1   References: 107
    Server process  : 84aa0140 (csrss.exe)
    Queue semaphore : 84a96da8
 Semaphore state 0 (0x0)
    The message queue is empty
    The LpcDataInfoChainHead queue is empty
Done.
kd> !lpc thread 842a4db0
Searching thread 842a4db0 in port rundown queues ...

Server communication port 0xe114a3c0
    Handles: 1   References: 1
    The LpcDataInfoChainHead queue is empty
        Connected port: 0xe1e7b948      Server connection port: 0xe14ae238

Client communication port 0xe1e7b948
    Handles: 1   References: 3
    The LpcDataInfoChainHead queue is empty

Server connection port e14ae238  Name: ApiPort
 Handles: 1   References: 107
    Server process  : 84aa0140 (csrss.exe)
    Queue semaphore : 84a96da8
 Semaphore state 0 (0x0)
    The message queue is empty
    The LpcDataInfoChainHead queue is empty
kd> !lpc scan e13d8830
Scanning 225 objects
       3  Port: 0xe13d8830 Connection: 0xe141ef50  Communication: 0xe13d8910  ' 
80000004  Port: 0xe13d8910 Connection: 0xe141ef50  Communication: 0xe13d8830  ' 
Scanning 3 objects