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
| Name | Type | Dir | Description |
|---|---|---|---|
| PortHandle | HANDLE | in | Handle auf den zu trennenden ALPC-Kommunikationsport (das per-Verbindungs-Client-Handle, das NtAlpcConnectPort liefert). |
| Flags | ULONG | in | ALPC_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-Version | Syscall-ID | 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 |
Kernel-Modul
Verwandte APIs
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.
Erkennungsmö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 ENDPMITRE ATT&CK-Mappings
Last verified: 2026-05-20