> Windows Syscalls
ntoskrnl.exeT1486T1070.004T1485

NtSetInformationFile

Setzt Dateimetadaten über FILE_INFORMATION_CLASS — Umbenennen, Löschen, Allokieren, EOF usw.

Prototyp

NTSTATUS NtSetInformationFile(
  HANDLE                 FileHandle,
  PIO_STATUS_BLOCK       IoStatusBlock,
  PVOID                  FileInformation,
  ULONG                  Length,
  FILE_INFORMATION_CLASS FileInformationClass
);

Argumente

NameTypeDirDescription
FileHandleHANDLEinOffenes Handle. Der nötige Zugriff hängt von FileInformationClass ab (DELETE für Dispose/Rename).
IoStatusBlockPIO_STATUS_BLOCKoutErhält Operationsstatus und klassenspezifischen Information-Wert.
FileInformationPVOIDinPuffer passend zur angeforderten Klasse (z. B. FILE_RENAME_INFORMATION, FILE_DISPOSITION_INFORMATION_EX).
LengthULONGinGröße des FileInformation-Puffers in Bytes.
FileInformationClassFILE_INFORMATION_CLASSinEnum, der die Operation auswählt, z. B. FileRenameInformation (10), FileDispositionInformation (13), FileDispositionInformationEx (64).

Syscall-IDs pro Windows-Version

Windows-VersionSyscall-IDBuild
Win10 15070x27win10-1507
Win10 16070x27win10-1607
Win10 17030x27win10-1703
Win10 17090x27win10-1709
Win10 18030x27win10-1803
Win10 18090x27win10-1809
Win10 19030x27win10-1903
Win10 19090x27win10-1909
Win10 20040x27win10-2004
Win10 20H20x27win10-20h2
Win10 21H10x27win10-21h1
Win10 21H20x27win10-21h2
Win10 22H20x27win10-22h2
Win11 21H20x27win11-21h2
Win11 22H20x27win11-22h2
Win11 23H20x27win11-23h2
Win11 24H20x27win11-24h2
Server 20160x27winserver-2016
Server 20190x27winserver-2019
Server 20220x27winserver-2022
Server 20250x27winserver-2025

Kernel-Modul

ntoskrnl.exeNtSetInformationFile

Verwandte APIs

SetFileInformationByHandleMoveFileExWDeleteFileWNtQueryInformationFileNtCreateFile

Syscall-Stub

4C 8B D1            mov r10, rcx
B8 27 00 00 00      mov eax, 0x27
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

SSN stabil bei `0x27` über alle unterstützten Windows-Builds. Die Kraft steckt in der `FILE_INFORMATION_CLASS`-Enum — über 70 Klassen, vier davon operativ entscheidend: `FileRenameInformation` / `FileRenameInformationEx` (Umbenennen/Verschieben, mit FLAGS_POSIX_SEMANTICS auch über belegte Namen hinweg auf modernen Builds), `FileDispositionInformation` / `FileDispositionInformationEx` (zur Löschung markieren; die Ex-Variante seit Win10 RS1 unterstützt `FILE_DISPOSITION_FORCE_PERMANENTLY_CHECK_ACCESS` und `FILE_DISPOSITION_POSIX_SEMANTICS` für Unlink-while-open), `FileAllocationInformation` (Plattenplatz vorbelegen für schnelle Ransomware-Writes) und `FileEndOfFileInformation` (Trunkieren). Dispose/Rename laufen über IRP_MJ_SET_INFORMATION und sind allen Minifiltern im Stack sichtbar.

Häufige Malware-Nutzung

Zwei dominante Missbräuche: (1) **atomares Rename mit Extension-Swap durch Ransomware**. Datei in-place verschlüsseln, dann `FileRenameInformation` nach `<original>.locked` — funktioniert mit `FILE_RENAME_POSIX_SEMANTICS` selbst dann, wenn die Datei von einem anderen Prozess offen gehalten wird. (2) **Selbstlöschung trotz EDR, das das Handle offen hält**. Die laufende EXE öffnen, `NtSetInformationFile` mit `FileRenameInformationEx` zu einem langen Alternativpfad rufen, dann `FileDispositionInformationEx` mit `FILE_DISPOSITION_POSIX_SEMANTICS | FILE_DISPOSITION_DELETE` — die Datei wird sofort unlinked, obwohl das Handle noch genutzt wird (Technik von Jonas Lykkegaard / LloydLabs als `delete-self-poc` dokumentiert). Wiper trunkieren damit kritische Dateien vor der finalen Disposition.

Erkennungs­möglichkeiten

Sysmon Event ID 23 (FileDelete) und 26 (FileDeleteDetected — fängt Inhalte gelöschter Dateien bei aktivem Archive Store) erfassen Dispose-Operationen nachträglich. Das ETW-Event `SetInformation` des Providers Microsoft-Windows-Kernel-File trägt die FileInformationClass; Filter auf Klassen 10, 13, 64 und 65 (FileRenameInformationEx) liefert ein fokussiertes Signal. Massen-Renames in kurzem Fenster mit konsistenter neuer Extension (`.locked`, `.encrypted`, zufällige 5-Zeichen-Suffixe) sind das klassische Ransomware-Indiz — die meisten EDRs implementieren das als Minifilter-Heuristik, weil User-Mode-Hooks via direkter Syscalls umgangen werden. Self-Delete zeigt sich als Rename des Hauptimages eines Prozesses, gefolgt von FileDispositionInformationEx, während die Image-Section noch gemappt ist — extrem hochwertiges Signal.

Direkte Syscall-Beispiele

cRansomware-style rename (`x.docx` -> `x.docx.locked`)

// FileRenameInformation == 10
typedef struct _FILE_RENAME_INFORMATION {
    BOOLEAN ReplaceIfExists;
    HANDLE  RootDirectory;
    ULONG   FileNameLength;
    WCHAR   FileName[1];
} FILE_RENAME_INFORMATION, *PFILE_RENAME_INFORMATION;

WCHAR newName[] = L"\\??\\C:\\Users\\v\\report.docx.locked";
SIZE_T nameLen = wcslen(newName) * sizeof(WCHAR);
SIZE_T size = FIELD_OFFSET(FILE_RENAME_INFORMATION, FileName) + nameLen;

PFILE_RENAME_INFORMATION info = LocalAlloc(LPTR, size);
info->ReplaceIfExists = TRUE;
info->RootDirectory   = NULL;
info->FileNameLength  = (ULONG)nameLen;
memcpy(info->FileName, newName, nameLen);

IO_STATUS_BLOCK iosb;
NtSetInformationFile(hFile, &iosb, info, (ULONG)size, FileRenameInformation);

cSelf-delete (POSIX semantics)

// LloydLabs delete-self-poc primitive.
// FileRenameInformationEx == 65, FileDispositionInformationEx == 64
typedef struct _FILE_DISPOSITION_INFORMATION_EX {
    ULONG Flags;
} FILE_DISPOSITION_INFORMATION_EX, *PFILE_DISPOSITION_INFORMATION_EX;

#define FILE_DISPOSITION_DELETE                       0x1
#define FILE_DISPOSITION_POSIX_SEMANTICS              0x2
#define FILE_DISPOSITION_FORCE_IMAGE_SECTION_CHECK    0x4
#define FILE_DISPOSITION_ON_CLOSE                     0x8

// 1) Open current image with DELETE | SYNCHRONIZE.
// 2) Rename to an ADS (`:wat`) via FileRenameInformationEx.
// 3) Re-open with DELETE access.
// 4) Mark for delete:
FILE_DISPOSITION_INFORMATION_EX d = {
    .Flags = FILE_DISPOSITION_DELETE | FILE_DISPOSITION_POSIX_SEMANTICS
};
IO_STATUS_BLOCK iosb;
NtSetInformationFile(hSelf, &iosb, &d, sizeof(d), FileDispositionInformationEx);

asmDirect stub (SSN 0x27)

NtSetInformationFile PROC
    mov  r10, rcx
    mov  eax, 27h
    syscall
    ret
NtSetInformationFile ENDP

MITRE ATT&CK-Mappings

Last verified: 2026-05-20