NtAlpcDisconnectPort
Ferme proprement le côté client d'une connexion ALPC, signalant le serveur avant la libération du handle.
Prototype
NTSTATUS NtAlpcDisconnectPort( HANDLE PortHandle, ULONG Flags );
Arguments
| Name | Type | Dir | Description |
|---|---|---|---|
| PortHandle | HANDLE | in | Handle vers le port de communication ALPC à déconnecter (le handle client par-connexion renvoyé par NtAlpcConnectPort). |
| Flags | ULONG | in | Drapeaux ALPC_DISCONNECT_*. ALPC_DISCONNECT_FLAG_NO_DISCONNECT_MESSAGE (1) supprime la notification LPC_PORT_CLOSED au serveur. |
IDs de syscalls par version de Windows
| Version de Windows | ID de syscall | Build |
|---|---|---|
| Win10 1507 | 0x80 | win10-1507 |
| Win10 1607 | 0x80 | win10-1607 |
| Win10 1703 | 0x81 | win10-1703 |
| Win10 1709 | 0x81 | win10-1709 |
| Win10 1803 | 0x82 | win10-1803 |
| Win10 1809 | 0x82 | win10-1809 |
| Win10 1903 | 0x82 | win10-1903 |
| Win10 1909 | 0x82 | win10-1909 |
| Win10 2004 | 0x84 | win10-2004 |
| Win10 20H2 | 0x84 | win10-20h2 |
| Win10 21H1 | 0x84 | win10-21h1 |
| Win10 21H2 | 0x84 | win10-21h2 |
| Win10 22H2 | 0x84 | win10-22h2 |
| Win11 21H2 | 0x84 | win11-21h2 |
| Win11 22H2 | 0x84 | win11-22h2 |
| Win11 23H2 | 0x84 | win11-23h2 |
| Win11 24H2 | 0x86 | win11-24h2 |
| Server 2016 | 0x80 | winserver-2016 |
| Server 2019 | 0x82 | winserver-2019 |
| Server 2022 | 0x84 | winserver-2022 |
| Server 2025 | 0x86 | winserver-2025 |
Module noyau
APIs liées
Stub du syscall
4C 8B D1 mov r10, rcx B8 86 00 00 00 mov eax, 0x86 F6 04 25 08 03 FE 7F 01 test byte ptr [0x7FFE0308], 1 75 03 jne short +3 0F 05 syscall C3 ret CD 2E int 2Eh C3 ret
Notes non documentées
`NtAlpcDisconnectPort` est l'au-revoir poli d'une connexion ALPC — il envoie un message `LPC_PORT_CLOSED` à la file du serveur et démonte la paire de ports de connexion. `NtClose` sur le même handle termine *aussi* la connexion, mais sans notification in-band, laissant le serveur découvrir le client mort uniquement lorsqu'il tentera la prochaine réponse. La plupart des appelants user-mode passent par `NtClose` directement ; `NtAlpcDisconnectPort` explicite est surtout utilisé par le runtime RPC (`rpcrt4.dll`) lorsqu'un binding LRPC est arrêté avec `RpcBindingFree`. Les vues ALPC par-connexion, contextes de sécurité et réservations de message sont libérés en même temps.
Usage courant par les malwares
Intérêt offensif faible — c'est du ménage. L'usage notable est le *nettoyage post-exploit* : les PoC LPE ALPC qui abusent de l'état serveur appellent typiquement `NtAlpcDisconnectPort` (ou ferment le handle) juste après avoir gagné la course, pour que la vue du serveur de l'échange paraisse normale et que les crash dumps ne conservent pas l'objet port de connexion malveillant résident. Le flag `ALPC_DISCONNECT_FLAG_NO_DISCONNECT_MESSAGE` peut servir à priver délibérément un serveur de notification `LPC_PORT_CLOSED` — utile si le serveur ne nettoie l'état par-connexion qu'à la réception de ce message ; un fuzzer ou un PoC peut s'en servir pour leaker de l'état serveur entre runs.
Opportunités de détection
Pas un signal de détection utile pris isolément. Les déconnexions dominent le trafic ALPC sur toute station active. Le seul angle fructueux est la *corrélation* : un processus client qui émet une rafale de cycles `NtAlpcConnectPort` … `NtAlpcSendWaitReceivePort` … `NtAlpcDisconnectPort` contre le même serveur rapidement est candidat au fuzzing ALPC ou au déclenchement d'exploit. Le provider ETW `Microsoft-Windows-Kernel-ALPC` (si activé) journalise les déconnexions ; le tear-down RPC correspondant apparaît dans `Microsoft-Windows-RPC`.
Exemples de syscalls directs
cPolite client teardown
// Cleanly close an LRPC client port. The server receives an LPC_PORT_CLOSED message
// before the handle is freed, allowing prompt per-connection cleanup on its side.
#include <windows.h>
#include <winternl.h>
NTSTATUS NTAPI NtAlpcDisconnectPort(HANDLE, ULONG);
void CloseLrpcClient(HANDLE hPort) {
NtAlpcDisconnectPort(hPort, 0); // 0 = send the courtesy LPC_PORT_CLOSED
NtClose(hPort); // release the handle table entry
}asmx64 direct stub (Win11 24H2)
; Direct syscall stub for NtAlpcDisconnectPort (SSN 0x86 on Win11 24H2 / Server 2025)
NtAlpcDisconnectPort PROC
mov r10, rcx ; PortHandle
mov eax, 86h ; SSN
syscall
ret
NtAlpcDisconnectPort ENDPMappings MITRE ATT&CK
Last verified: 2026-05-20