NtQueryDriverEntryOrder
Lee la lista DriverOrder UEFI de la plataforma — el orden en que cargan las entradas Driver#### UEFI al arranque.
Prototipo
NTSTATUS NtQueryDriverEntryOrder( PULONG Ids, PULONG Count );
Argumentos
| Name | Type | Dir | Description |
|---|---|---|---|
| Ids | PULONG | out | Arreglo asignado por el llamador que recibe la lista ordenada de IDs Driver####. |
| Count | PULONG | in/out | En entrada: capacidad de Ids en entradas. En salida: número de IDs devueltos. |
IDs de syscalls por versión de Windows
| Versión de Windows | ID de syscall | Build |
|---|---|---|
| Win10 1507 | 0x12C | win10-1507 |
| Win10 1607 | 0x132 | win10-1607 |
| Win10 1703 | 0x137 | win10-1703 |
| Win10 1709 | 0x13A | win10-1709 |
| Win10 1803 | 0x13C | win10-1803 |
| Win10 1809 | 0x13D | win10-1809 |
| Win10 1903 | 0x13E | win10-1903 |
| Win10 1909 | 0x13E | win10-1909 |
| Win10 2004 | 0x144 | win10-2004 |
| Win10 20H2 | 0x144 | win10-20h2 |
| Win10 21H1 | 0x144 | win10-21h1 |
| Win10 21H2 | 0x145 | win10-21h2 |
| Win10 22H2 | 0x145 | win10-22h2 |
| Win11 21H2 | 0x14B | win11-21h2 |
| Win11 22H2 | 0x14D | win11-22h2 |
| Win11 23H2 | 0x14D | win11-23h2 |
| Win11 24H2 | 0x14F | win11-24h2 |
| Server 2016 | 0x132 | winserver-2016 |
| Server 2019 | 0x13D | winserver-2019 |
| Server 2022 | 0x14A | winserver-2022 |
| Server 2025 | 0x14F | winserver-2025 |
Módulo del kernel
APIs relacionadas
Stub del syscall
4C 8B D1 mov r10, rcx B8 4F 01 00 00 mov eax, 0x14F 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
Notas no documentadas
Compañero de la familia BCD `NtQueryBootEntryOrder` pero operando sobre entradas **drivers** UEFI en vez de entradas del cargador de SO. La variable NVRAM DriverOrder controla qué drivers de plataforma (Driver0000, Driver0001, ...) carga el firmware antes de ceder el control al cargador de SO; consultarla es la ruta de inspección de solo lectura. Requiere SeSystemEnvironmentPrivilege. En sistemas no UEFI/CSM la syscall devuelve STATUS_NOT_IMPLEMENTED. El comando `bcdedit /enum FIRMWARE` es la superficie de modo usuario más comúnmente vista ejerciendo esta ruta.
Uso común por malware
Valor de reconocimiento durante tradecraft centrado en firmware: un atacante a punto de intentar persistencia UEFI puede enumerar DriverOrder para (a) entender qué drivers OEM/plataforma se ejecutan primero, (b) identificar un slot cuyo número esté sin usar para que una entrada Driver#### implantada sea recogida, o (c) confirmar que un Driver#### ya implantado precede al traspaso al cargador de SO. Combinar con NtQuerySystemEnvironmentValueEx para enumeración completa. Solo lectura por sí mismo — sin daño directo a nivel kernel.
Oportunidades de detección
El volumen de llamadas legítimas es extremadamente bajo — esencialmente bcdedit.exe, manage-bde y herramientas firmware OEM. ETW Microsoft-Windows-Kernel-General registra accesos de lectura de firmware incluyendo DriverOrder. La transición de habilitación de privilegio (SeSystemEnvironmentPrivilege vía NtAdjustPrivilegesToken) es el punto de control defensivo más temprano. Emparejar telemetría de contexto de proceso con el evento de auditoría para señalar malware en modo usuario enumerando la configuración de arranque.
Ejemplos de syscalls directos
asmx64 direct stub (Win11 24H2)
; Direct syscall stub for NtQueryDriverEntryOrder (SSN 0x14F, Win11 24H2)
NtQueryDriverEntryOrder PROC
mov r10, rcx
mov eax, 14Fh
syscall
ret
NtQueryDriverEntryOrder ENDPcEnumerate UEFI DriverOrder
// Privilege gate first.
BOOLEAN was;
RtlAdjustPrivilege(SE_SYSTEM_ENVIRONMENT_PRIVILEGE, TRUE, FALSE, &was);
ULONG ids[32] = {0};
ULONG count = ARRAYSIZE(ids);
NTSTATUS s = NtQueryDriverEntryOrder(ids, &count);
if (NT_SUCCESS(s)) {
for (ULONG i = 0; i < count; ++i) {
// ids[i] is the Driver#### identifier in load order.
// Pair with NtQuerySystemEnvironmentValueEx(L"Driver####", EFI_GLOBAL_VARIABLE,...)
// to dereference each entry's device-path and load-options.
}
}Mapeos MITRE ATT&CK
Last verified: 2026-05-20