> Windows Syscalls
ntoskrnl.exeT1559T1106

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

NameTypeDirDescription
PortHandleHANDLEinHandle vers le port de communication ALPC à déconnecter (le handle client par-connexion renvoyé par NtAlpcConnectPort).
FlagsULONGinDrapeaux 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 WindowsID de syscallBuild
Win10 15070x80win10-1507
Win10 16070x80win10-1607
Win10 17030x81win10-1703
Win10 17090x81win10-1709
Win10 18030x82win10-1803
Win10 18090x82win10-1809
Win10 19030x82win10-1903
Win10 19090x82win10-1909
Win10 20040x84win10-2004
Win10 20H20x84win10-20h2
Win10 21H10x84win10-21h1
Win10 21H20x84win10-21h2
Win10 22H20x84win10-22h2
Win11 21H20x84win11-21h2
Win11 22H20x84win11-22h2
Win11 23H20x84win11-23h2
Win11 24H20x86win11-24h2
Server 20160x80winserver-2016
Server 20190x82winserver-2019
Server 20220x84winserver-2022
Server 20250x86winserver-2025

Module noyau

ntoskrnl.exeNtAlpcDisconnectPort

APIs liées

NtAlpcConnectPortNtAlpcSendWaitReceivePortNtAlpcAcceptConnectPortNtCloseRpcBindingFree

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 ENDP

Mappings MITRE ATT&CK

Last verified: 2026-05-20