> Windows Syscalls
ntoskrnl.exeT1559T1106

NtAlpcDisconnectPort

Schließt die Client-Seite einer ALPC-Verbindung sauber und signalisiert den Server, bevor das Handle freigegeben wird.

Prototyp

NTSTATUS NtAlpcDisconnectPort(
  HANDLE  PortHandle,
  ULONG   Flags
);

Argumente

NameTypeDirDescription
PortHandleHANDLEinHandle auf den zu trennenden ALPC-Kommunikationsport (das per-Verbindungs-Client-Handle, das NtAlpcConnectPort liefert).
FlagsULONGinALPC_DISCONNECT_*-Flags. ALPC_DISCONNECT_FLAG_NO_DISCONNECT_MESSAGE (1) unterdrückt die LPC_PORT_CLOSED-Benachrichtigung an den Server.

Syscall-IDs pro Windows-Version

Windows-VersionSyscall-IDBuild
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

Kernel-Modul

ntoskrnl.exeNtAlpcDisconnectPort

Verwandte APIs

NtAlpcConnectPortNtAlpcSendWaitReceivePortNtAlpcAcceptConnectPortNtCloseRpcBindingFree

Syscall-Stub

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

Undokumentierte Hinweise

`NtAlpcDisconnectPort` ist die höfliche Verabschiedung einer ALPC-Verbindung — er sendet eine `LPC_PORT_CLOSED`-Nachricht in die Queue des Servers und reißt das Connection-Port-Paar ab. `NtClose` auf dem gleichen Handle beendet die Verbindung *auch*, aber ohne In-Band-Benachrichtigung, sodass der Server den toten Client erst beim nächsten Reply-Versuch entdeckt. Die meisten User-Mode-Aufrufer gehen direkt über `NtClose`; expliziter `NtAlpcDisconnectPort` wird vor allem vom RPC-Runtime (`rpcrt4.dll`) genutzt, wenn ein LRPC-Binding mit `RpcBindingFree` heruntergefahren wird. Per-Connection-ALPC-Views, Security-Contexts und Message-Reservierungen werden im selben Schritt freigegeben.

Häufige Malware-Nutzung

Geringes offensives Interesse — Housekeeping. Bemerkenswerte Nutzung ist *Post-Exploit-Cleanup*: ALPC-LPE-PoCs, die Server-seitigen State missbrauchen, rufen `NtAlpcDisconnectPort` (oder schließen das Handle) typischerweise direkt nach dem Race-Gewinn, damit die Server-Sicht des Austauschs normal aussieht und Crash Dumps das bösartige Connection-Port-Objekt nicht resident halten. Das Flag `ALPC_DISCONNECT_FLAG_NO_DISCONNECT_MESSAGE` kann genutzt werden, um einen Server gezielt um die `LPC_PORT_CLOSED`-Benachrichtigung zu bringen — nützlich, wenn der Server per-Connection-State nur beim Empfang dieser Nachricht aufräumt; ein Fuzzer oder PoC kann das nutzen, um Server-State zwischen Runs zu leaken.

Erkennungs­möglichkeiten

Allein kein nützliches Detection-Signal. Disconnects dominieren den ALPC-Traffic auf jeder aktiven Workstation. Der einzige fruchtbare Winkel ist *Korrelation*: ein Client-Prozess, der eine Flut von `NtAlpcConnectPort` … `NtAlpcSendWaitReceivePort` … `NtAlpcDisconnectPort`-Zyklen gegen denselben Server in dichter Folge absetzt, ist ein Kandidat für ALPC-Fuzzing oder Exploit-Triggering. Der ETW-Provider `Microsoft-Windows-Kernel-ALPC` (falls aktiv) loggt Disconnects; das entsprechende RPC-Teardown taucht in `Microsoft-Windows-RPC` auf.

Direkte Syscall-Beispiele

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

MITRE ATT&CK-Mappings

Last verified: 2026-05-20