> Windows Syscalls
ntoskrnl.exeT1083T1106T1518.001

NtQueryInformationByName

Interroge des informations de fichier par chemin sans handle ouvert, introduit dans Windows 10 RS5.

Prototype

NTSTATUS NtQueryInformationByName(
  POBJECT_ATTRIBUTES       ObjectAttributes,
  PIO_STATUS_BLOCK         IoStatusBlock,
  PVOID                    FileInformation,
  ULONG                    Length,
  FILE_INFORMATION_CLASS   FileInformationClass
);

Arguments

NameTypeDirDescription
ObjectAttributesPOBJECT_ATTRIBUTESinAttributs d'objet décrivant le chemin du fichier cible. ObjectName est le chemin NT.
IoStatusBlockPIO_STATUS_BLOCKoutReçoit le statut final et le nombre d'octets écrits dans FileInformation.
FileInformationPVOIDoutTampon de l'appelant qui reçoit la classe d'information demandée.
LengthULONGinTaille de FileInformation en octets.
FileInformationClassFILE_INFORMATION_CLASSinClasse identifiant l'information à retourner (ex. FileStatInformation, FileStatBasicInformation).

IDs de syscalls par version de Windows

Version de WindowsID de syscallBuild
Win10 17030x13Bwin10-1703
Win10 17090x13Ewin10-1709
Win10 18030x140win10-1803
Win10 18090x141win10-1809
Win10 19030x142win10-1903
Win10 19090x142win10-1909
Win10 20040x148win10-2004
Win10 20H20x148win10-20h2
Win10 21H10x148win10-21h1
Win10 21H20x149win10-21h2
Win10 22H20x149win10-22h2
Win11 21H20x14Fwin11-21h2
Win11 22H20x151win11-22h2
Win11 23H20x151win11-23h2
Win11 24H20x153win11-24h2
Server 20190x141winserver-2019
Server 20220x14Ewinserver-2022
Server 20250x153winserver-2025

Module noyau

ntoskrnl.exeNtQueryInformationByName

APIs liées

GetFileAttributesExNtQueryInformationFileNtCreateFileNtQueryAttributesFileNtQueryFullAttributesFile

Stub du syscall

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

Introduit dans Windows 10 1709 (usage officiellement documenté à partir de RS5/1803), NtQueryInformationByName fusionne le triplet historique `NtCreateFile → NtQueryInformationFile → NtClose` en un seul syscall quand l'appelant n'a besoin que des métadonnées. En interne le noyau doit toujours traverser la pile filesystem du répertoire parent et acquérir un FILE_OBJECT transitoire, mais n'installe jamais de handle dans la table de handles de l'appelant — d'où moins d'événements bruyants Sysmon Event ID 11/15 et zéro turn-over de table de handles. Seules quelques valeurs `FILE_INFORMATION_CLASS` sont acceptées (FileStatInformation, FileStatBasicInformation, FileStatLxInformation, FileCaseSensitiveInformation, FileStorageReserveIdInformation).

Usage courant par les malwares

Utilisé par les scanners, les loaders à environment-keying et les droppers de payload étagés sensibles aux EDR pour tester l'existence de fichiers marqueurs (ex. preuve d'un build spécifique d'un EDR sur disque, ou un fichier d'empreinte victime) sans laisser de trace de télémétrie d'open-handle. Comme aucun handle n'est créé, les minifilters filesystem qui dépendent de `IRP_MJ_CREATE` voient l'ouverture comme transitoire et éphémère ; les hooks user-mode sur `NtCreateFile`/`NtOpenFile` sont entièrement contournés — le chemin syscall est directement `NtQueryInformationByName`. Le signal est plus faible que la reconnaissance basée sur NtCreateFile, ce qui est précisément le but. Certains scanners du commerce (profilers style CCleaner, mais aussi des infostealers récents) ont migré vers cette API pour réduire le bruit d'open-file.

Opportunités de détection

Les minifilters filesystem voient toujours l'IRP_MJ_CREATE transitoire — les événements File Sysmon configurés avec `IncludeTransientHandles=true` (option relativement récente) feront surgir ceux-ci. Les événements ETW Microsoft-Windows-Kernel-File `Create` sont émis avec un drapeau `TransitionTrace` distinguant la requête par nom d'une ouverture avec handle tenu. La chasse aux appels `NtQueryInformationByName` ciblant `*.exe`, `*.dll` ou des chemins d'installation EDR spécifiques depuis un processus non-système est un signal d'anomalie plus fort que le syscall lui-même. Sysmon Event ID 11 (FileCreate) et Event ID 15 (FileCreateStreamHash) ne se déclencheront *pas* — cette absence, couplée à un comportement conditionné par l'existence du fichier, est la détection.

Exemples de syscalls directs

cCheck for EDR install marker without opening a handle

// Probe for the presence of an EDR DLL on disk using the new RS5+ syscall.
#include <windows.h>
#include <winternl.h>

typedef struct _FILE_STAT_BASIC_INFORMATION {
    LARGE_INTEGER FileId;
    LARGE_INTEGER CreationTime;
    LARGE_INTEGER LastAccessTime;
    LARGE_INTEGER LastWriteTime;
    LARGE_INTEGER ChangeTime;
    LARGE_INTEGER AllocationSize;
    LARGE_INTEGER EndOfFile;
    ULONG FileAttributes;
    ULONG ReparseTag;
    ULONG NumberOfLinks;
    ULONG DeviceType;
    ULONG DeviceCharacteristics;
    ULONG Reserved;
    LARGE_INTEGER VolumeSerialNumber;
    FILE_ID_128 FileId128;
} FILE_STAT_BASIC_INFORMATION;

typedef NTSTATUS (NTAPI *PNTQUERYINFORMATIONBYNAME)(
    POBJECT_ATTRIBUTES, PIO_STATUS_BLOCK, PVOID, ULONG, ULONG);

BOOL FileExistsQuietly(LPCWSTR ntPath) {
    UNICODE_STRING us;
    RtlInitUnicodeString(&us, ntPath);

    OBJECT_ATTRIBUTES oa;
    InitializeObjectAttributes(&oa, &us, OBJ_CASE_INSENSITIVE, NULL, NULL);

    FILE_STAT_BASIC_INFORMATION info;
    IO_STATUS_BLOCK iosb;

    PNTQUERYINFORMATIONBYNAME f = (PNTQUERYINFORMATIONBYNAME)GetProcAddress(
        GetModuleHandleA("ntdll.dll"), "NtQueryInformationByName");

    return f && f(&oa, &iosb, &info, sizeof(info), 75 /* FileStatBasicInformation */) == 0;
}

asmx64 direct stub (Win11 24H2, SSN 0x153)

NtQueryInformationByName PROC
    mov  r10, rcx
    mov  eax, 153h
    syscall
    ret
NtQueryInformationByName ENDP

Mappings MITRE ATT&CK

Last verified: 2026-05-20