> Windows Syscalls
ntoskrnl.exeT1486T1070.004T1485

NtSetInformationFile

Définit des métadonnées de fichier via FILE_INFORMATION_CLASS — renommer, supprimer, allouer, fin de fichier…

Prototype

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

Arguments

NameTypeDirDescription
FileHandleHANDLEinHandle ouvert. L'accès requis dépend de FileInformationClass (DELETE pour disposer/renommer).
IoStatusBlockPIO_STATUS_BLOCKoutReçoit le statut de l'opération et la valeur Information propre à la classe.
FileInformationPVOIDinTampon correspondant à la classe demandée (ex. FILE_RENAME_INFORMATION, FILE_DISPOSITION_INFORMATION_EX).
LengthULONGinTaille en octets du tampon FileInformation.
FileInformationClassFILE_INFORMATION_CLASSinÉnum sélectionnant l'opération, ex. FileRenameInformation (10), FileDispositionInformation (13), FileDispositionInformationEx (64).

IDs de syscalls par version de Windows

Version de WindowsID de syscallBuild
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

Module noyau

ntoskrnl.exeNtSetInformationFile

APIs liées

SetFileInformationByHandleMoveFileExWDeleteFileWNtQueryInformationFileNtCreateFile

Stub du syscall

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

Notes non documentées

SSN stable à `0x27` sur tous les builds Windows supportés. La puissance réside dans l'énumération `FILE_INFORMATION_CLASS` — plus de 70 classes, dont quatre comptent vraiment : `FileRenameInformation` / `FileRenameInformationEx` (renommer/déplacer, y compris par-dessus des noms verrouillés avec FLAGS_POSIX_SEMANTICS sur les builds modernes), `FileDispositionInformation` / `FileDispositionInformationEx` (marquer pour suppression ; la variante Ex, ajoutée à RS1, supporte `FILE_DISPOSITION_FORCE_PERMANENTLY_CHECK_ACCESS` et `FILE_DISPOSITION_POSIX_SEMANTICS` pour le unlink-while-open), `FileAllocationInformation` (préallouer l'espace disque pour des écritures ransomware rapides) et `FileEndOfFileInformation` (tronquer). Dispose/rename passent par IRP_MJ_SET_INFORMATION et sont vus par chaque minifilter de la pile.

Usage courant par les malwares

Deux abus dominants : (1) **renommage atomique des ransomwares avec changement d'extension**. Chiffrer le fichier sur place puis `FileRenameInformation` vers `<original>.locked` — fonctionne même si un autre processus a le fichier ouvert lorsque `FILE_RENAME_POSIX_SEMANTICS` est positionné. (2) **Auto-suppression résistant à un EDR maintenant le handle ouvert**. Ouvrir l'EXE en cours, appeler `NtSetInformationFile` avec `FileRenameInformationEx` vers un chemin alternatif long, puis `FileDispositionInformationEx` avec `FILE_DISPOSITION_POSIX_SEMANTICS | FILE_DISPOSITION_DELETE` — le fichier disparaît immédiatement bien que le handle soit encore utilisé, technique documentée par Jonas Lykkegaard / LloydLabs sous le nom `delete-self-poc`. Également utilisé par les wipers pour tronquer les fichiers critiques avant disposition finale.

Opportunités de détection

Sysmon Event ID 23 (FileDelete) et 26 (FileDeleteDetected — capture le contenu des fichiers supprimés quand l'archive store est activé) détectent les opérations dispose a posteriori. L'événement ETW `SetInformation` de Microsoft-Windows-Kernel-File porte la FileInformationClass ; filtrer sur les classes 10, 13, 64 et 65 (FileRenameInformationEx) donne un signal focalisé. Des renommages en masse sur une courte fenêtre avec un motif d'extension cohérent (`.locked`, `.encrypted`, suffixes aléatoires de 5 caractères) est l'indicateur ransomware classique — la plupart des EDR l'implémentent en heuristique minifilter, les hooks user-mode étant contournés par syscalls directs. L'auto-suppression apparaît comme un renommage de l'image principale d'un processus suivi de FileDispositionInformationEx alors que la section image est encore mappée — un signal extrêmement net.

Exemples de syscalls directs

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

Mappings MITRE ATT&CK

Last verified: 2026-05-20