Función NtQuerySystemInformation (winternl.h)
[NtQuerySystemInformation puede modificarse o no estar disponible en versiones futuras de Windows. Las aplicaciones deben usar las funciones alternativas enumeradas en este tema.]
Recupera la información del sistema especificada.
Sintaxis
__kernel_entry NTSTATUS NtQuerySystemInformation(
[in] SYSTEM_INFORMATION_CLASS SystemInformationClass,
[in, out] PVOID SystemInformation,
[in] ULONG SystemInformationLength,
[out, optional] PULONG ReturnLength
);
Parámetros
[in] SystemInformationClass
Uno de los valores enumerados en SYSTEM_INFORMATION_CLASS, que indican el tipo de información del sistema que se va a recuperar. Estos incluyen los siguientes valores.
SystemBasicInformation
Devuelve el número de procesadores del sistema en una estructura SYSTEM_BASIC_INFORMATION . Use la función GetSystemInfo en su lugar.
SystemCodeIntegrityInformation
Devuelve una estructura SYSTEM_CODEINTEGRITY_INFORMATION que se puede usar para determinar las opciones que aplica la integridad de código en el sistema.
SystemExceptionInformation
Devuelve una estructura de SYSTEM_EXCEPTION_INFORMATION opaca que se puede usar para generar una inicialización imprevisible para un generador de números aleatorios. En su lugar, use la función CryptGenRandom .
SystemInterruptInformation
Devuelve una estructura SYSTEM_INTERRUPT_INFORMATION opaca que se puede usar para generar una inicialización imprevisible para un generador de números aleatorios. En su lugar, use la función CryptGenRandom .
SystemKernelVaShadowInformation
Devuelve una estructura SYSTEM_KERNEL_VA_SHADOW_INFORMATION que se puede usar para determinar la configuración de control de especulación de los ataques que implican cargas de caché de datos no autorizadas (como CVE-2017-5754).
SystemLeapSecondInformation
Devuelve una estructura de SYSTEM_LEAP_SECOND_INFORMATION opaca que se puede usar para habilitar o deshabilitar los segundos bisiesto en todo el sistema. Esta configuración se conservará incluso después de reiniciar el sistema.
SystemLookasideInformation
Devuelve una estructura de SYSTEM_LOOKASIDE_INFORMATION opaca que se puede usar para generar una inicialización imprevisible para un generador de números aleatorios. En su lugar, use la función CryptGenRandom .
SystemPerformanceInformation
Devuelve una estructura de SYSTEM_PERFORMANCE_INFORMATION opaca que se puede usar para generar una inicialización imprevisible para un generador de números aleatorios. En su lugar, use la función CryptGenRandom .
SystemPolicyInformation
Devuelve información de directiva en una estructura de SYSTEM_POLICY_INFORMATION . Use la función SLGetWindowsInformation en su lugar para obtener información de directiva.
SystemProcessInformation
Devuelve una matriz de estructuras de SYSTEM_PROCESS_INFORMATION , una para cada proceso que se ejecuta en el sistema.
Estas estructuras contienen información sobre el uso de recursos de cada proceso, incluido el número de subprocesos y identificadores usados por el proceso, el uso máximo de archivos de página y el número de páginas de memoria que el proceso ha asignado.
SystemProcessorPerformanceInformation
Devuelve una matriz de estructuras de SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION , una para cada procesador instalado en el sistema.
SystemQueryPerformanceCounterInformation
Devuelve una estructura de SYSTEM_QUERY_PERFORMANCE_COUNTER_INFORMATION que se puede usar para determinar si el sistema requiere una transición del kernel para recuperar la información del contador de rendimiento de alta resolución a través de una llamada de función QueryPerformanceCounter .
SystemRegistryQuotaInformation
Devuelve una estructura SYSTEM_REGISTRY_QUOTA_INFORMATION .
SystemSpeculationControlInformation
Devuelve una estructura SYSTEM_SPECULATION_CONTROL_INFORMATION que se puede usar para determinar la configuración de control de especulación de los ataques que implican la inyección de destino de rama (como CVE-2017-5715).
Cada estructura de SYSTEM_SPECULATION_CONTROL_INFORMATION tiene el siguiente diseño:
typedef struct _SYSTEM_SPECULATION_CONTROL_INFORMATION {
struct {
ULONG BpbEnabled : 1;
ULONG BpbDisabledSystemPolicy : 1;
ULONG BpbDisabledNoHardwareSupport : 1;
ULONG SpecCtrlEnumerated : 1;
ULONG SpecCmdEnumerated : 1;
ULONG IbrsPresent : 1;
ULONG StibpPresent : 1;
ULONG SmepPresent : 1;
ULONG SpeculativeStoreBypassDisableAvailable : 1;
ULONG SpeculativeStoreBypassDisableSupported : 1;
ULONG SpeculativeStoreBypassDisabledSystemWide : 1;
ULONG SpeculativeStoreBypassDisabledKernel : 1;
ULONG SpeculativeStoreBypassDisableRequired : 1;
ULONG BpbDisabledKernelToUser : 1;
ULONG SpecCtrlRetpolineEnabled : 1;
ULONG SpecCtrlImportOptimizationEnabled : 1;
ULONG Reserved : 16;
} SpeculationControlFlags;
} SYSTEM_SPECULATION_CONTROL_INFORMATION, * PSYSTEM_SPECULATION_CONTROL_INFORMATION;
Marcar | Significado |
BpbEnabled | Si es TRUE, se admiten y habilitan las características de control de especulación. |
BpbDisabledSystemPolicy | Si es TRUE, las características de control de especulación están deshabilitadas debido a la directiva del sistema. |
BpbDisabledNoHardwareSupport | Si es TRUE, las características de control de especulación están deshabilitadas debido a la ausencia de soporte técnico de hardware. |
SpecCtrlEnumerated | Si es TRUE, el hardware enumera el IA32_SPEC_CTRL MSR de i386/AMD64. |
SpecCmdEnumerated | Si es TRUE, el hardware enumera el IA32_SPEC_CMD MSR de i386/AMD64. |
IbrsPresent | Si es TRUE, el MSR de IBRS i386/AMD64 se trata como presente. |
StibpPresent | Si es TRUE, el MSR de STIBP i386/AMD64 está presente. |
SmepPresent | Si es TRUE, la característica SMEP está presente y habilitada. |
SpeculativeStoreBypassDisableAvailable | Si es TRUE, existe compatibilidad con el sistema operativo para SSBD. |
SpeculativeStoreBypassDisableSupported | Si es TRUE, existe compatibilidad de hardware con SSBD. |
SpeculativeStoreBypassDisabledSystemWide | Si es TRUE, SSBD se establece en todo el sistema. |
SpeculativeStoreBypassDisabledKernel | Si es TRUE, SSBD se establece en kernel. |
SpeculativeStoreBypassDisableRequired | Si es TRUE, se necesita SSBD para evitar ataques de especulación. |
BpbDisabledKernelToUser | Si es TRUE, la predicción de rama indirecta no se vacía en cada kernel a la transición del usuario. |
SpecCtrlRetpolineEnabled | Si es TRUE, Retpoline está habilitado para controladores compatibles. |
SpecCtrlImportOptimizationEnabled | Si es TRUE, la optimización de importación está habilitada. |
Reservado | Marcas reservadas. |
SystemTimeOfDayInformation
Devuelve una estructura SYSTEM_TIMEOFDAY_INFORMATION opaca que se puede usar para generar una inicialización imprevisible para un generador de números aleatorios. En su lugar, use la función CryptGenRandom .
[in, out] SystemInformation
Puntero a un búfer que recibe la información solicitada. El tamaño y la estructura de esta información varían en función del valor del parámetro SystemInformationClass :
SYSTEM_BASIC_INFORMATION
Cuando el parámetro SystemInformationClass es SystemBasicInformation, el búfer al que apunta el parámetro SystemInformation debe ser lo suficientemente grande como para contener una única estructura de SYSTEM_BASIC_INFORMATION que tenga el siguiente diseño:
typedef struct _SYSTEM_BASIC_INFORMATION {
BYTE Reserved1[24];
PVOID Reserved2[4];
CCHAR NumberOfProcessors;
} SYSTEM_BASIC_INFORMATION;
El miembro NumberOfProcessors contiene el número de procesadores presentes en el sistema. Use GetSystemInfo en su lugar para recuperar esta información.
Los demás miembros de la estructura están reservados para uso interno por parte del sistema operativo.
SYSTEM_CODEINTEGRITY_INFORMATION
Cuando el parámetro SystemInformationClass es SystemCodeIntegrityInformation, el búfer al que apunta el parámetro SystemInformation debe ser lo suficientemente grande como para contener una única estructura de SYSTEM_CODEINTEGRITY_INFORMATION que tenga el siguiente diseño:
typedef struct _SYSTEM_CODEINTEGRITY_INFORMATION {
ULONG Length;
ULONG CodeIntegrityOptions;
} SYSTEM_CODEINTEGRITY_INFORMATION, *PSYSTEM_CODEINTEGRITY_INFORMATION;
El miembro Length contiene el tamaño de la estructura en bytes. El autor de la llamada debe establecerlo.
El miembro CodeIntegrityOptions contiene una máscara de bits para identificar las opciones de integridad de código.
Valor | Significado | |
0x01 | CODEINTEGRITY_OPTION_ENABLED | La aplicación de la integridad de código del modo kernel está habilitada. |
0x02 | CODEINTEGRITY_OPTION_TESTSIGN | Integridad de código permite probar el contenido firmado. |
0x04 | CODEINTEGRITY_OPTION_UMCI_ENABLED | La aplicación de la integridad de código en modo de usuario está habilitada. |
0x08 | CODEINTEGRITY_OPTION_UMCI_AUDITMODE_ENABLED | La aplicación de la integridad de código en modo de usuario está habilitada en modo auditoría. Se permitirá que los ejecutables se ejecuten o carguen; sin embargo, se registrarán los eventos de auditoría. |
0x10 | CODEINTEGRITY_OPTION_UMCI_EXCLUSIONPATHS_ENABLED |
Los archivos binarios en modo de usuario que se ejecutan desde determinadas rutas de acceso pueden ejecutarse aunque produzcan errores en las comprobaciones de integridad del código.
Las rutas de exclusión se enumeran en la siguiente clave del Registro en formato REG_MULTI_SZ:
|
0x20 | CODEINTEGRITY_OPTION_TEST_BUILD | La compilación de integridad de código procede de una compilación de prueba. |
0x40 | CODEINTEGRITY_OPTION_PREPRODUCTION_BUILD | La compilación de integridad de código procede de una compilación de preproducción. |
0x80 | CODEINTEGRITY_OPTION_DEBUGMODE_ENABLED | El depurador de kernel está asociado y la integridad de código puede permitir que se cargue código sin firmar. |
0x100 | CODEINTEGRITY_OPTION_FLIGHT_BUILD | La compilación de integridad de código procede de una compilación piloto. |
0x200 | CODEINTEGRITY_OPTION_FLIGHTING_ENABLED | Integridad de código permite el contenido firmado por piloto. El contenido firmado por piloto es contenido firmado por la entidad de certificación raíz de desarrollo de Microsoft 2014. |
0x400 | CODEINTEGRITY_OPTION_HVCI_KMCI_ENABLED | La integridad de código aplicada por el hipervisor está habilitada para los componentes del modo kernel. |
0x800 | CODEINTEGRITY_OPTION_HVCI_KMCI_AUDITMODE_ENABLED | La integridad de código aplicada por el hipervisor está habilitada en modo auditoría. Los eventos de auditoría se registrarán para los componentes del modo kernel que no son compatibles con HVCI. Este bit se puede establecer si CODEINTEGRITY_OPTION_HVCI_KMCI_ENABLED está establecido o no. |
0x1000 | CODEINTEGRITY_OPTION_HVCI_KMCI_STRICTMODE_ENABLED | La integridad de código aplicada por el hipervisor está habilitada para los componentes del modo kernel, pero en modo estricto. |
0x2000 | CODEINTEGRITY_OPTION_HVCI_IUM_ENABLED | La integridad de código aplicada por el hipervisor está habilitada con la aplicación de la firma de componentes del modo de usuario aislado. |
SYSTEM_EXCEPTION_INFORMATION
Cuando el parámetro SystemInformationClass es SystemExceptionInformation, el búfer al que apunta el parámetro SystemInformation debe ser lo suficientemente grande como para contener una estructura de SYSTEM_EXCEPTION_INFORMATION opaca para usarla para generar una inicialización impredecible para un generador de números aleatorios. Para ello, la estructura tiene el siguiente diseño:
typedef struct _SYSTEM_EXCEPTION_INFORMATION {
BYTE Reserved1[16];
} SYSTEM_EXCEPTION_INFORMATION;
Los miembros individuales de la estructura están reservados para uso interno por parte del sistema operativo.
Use la función CryptGenRandom en su lugar para generar datos criptográficos aleatorios.
SYSTEM_INTERRUPT_INFORMATION
Cuando el parámetro SystemInformationClass es SystemInterruptInformation, el búfer al que apunta el parámetro SystemInformation debe ser lo suficientemente grande como para contener una matriz que contenga tantas estructuras de SYSTEM_INTERRUPT_INFORMATION opacos como hay procesadores (CPU) instalados en el sistema. Cada estructura, o la matriz en su conjunto, se puede usar para generar una inicialización imprevisible para un generador de números aleatorios. Para ello, la estructura tiene el siguiente diseño:
typedef struct _SYSTEM_INTERRUPT_INFORMATION {
BYTE Reserved1[24];
} SYSTEM_INTERRUPT_INFORMATION;
Los miembros individuales de la estructura están reservados para uso interno por parte del sistema operativo.
Use la función CryptGenRandom en su lugar para generar datos criptográficos aleatorios.
SYSTEM_KERNEL_VA_SHADOW_INFORMATION
Cuando el parámetro SystemInformationClass es SystemKernelVaShadowInformation, el búfer al que apunta el parámetro SystemInformation debe ser lo suficientemente grande como para contener una única estructura de SYSTEM_KERNEL_VA_SHADOW_INFORMATION que tenga el siguiente diseño:
typedef struct _SYSTEM_KERNEL_VA_SHADOW_INFORMATION {
struct {
ULONG KvaShadowEnabled:1;
ULONG KvaShadowUserGlobal:1;
ULONG KvaShadowPcid:1;
ULONG KvaShadowInvpcid:1;
ULONG KvaShadowRequired:1;
ULONG KvaShadowRequiredAvailable:1;
ULONG InvalidPteBit:6;
ULONG L1DataCacheFlushSupported:1;
ULONG L1TerminalFaultMitigationPresent:1;
ULONG Reserved:18;
} KvaShadowFlags;
} SYSTEM_KERNEL_VA_SHADOW_INFORMATION, * PSYSTEM_KERNEL_VA_SHADOW_INFORMATION;
KvaShadowEnabled indica si está habilitado el sombreado.
KvaShadowUserGlobal indica que el usuario o global está habilitado.
KvaShadowPcid indica si PCID está habilitado.
KvaShadowInvpcid indica si PCID está habilitado y si INVPCID está en uso.
KvaShadowRequired indica si se sabe que el hardware es susceptible a CVE-2017-5754.
KvaShadowRequiredAvailable indica si el sistema operativo admite el campo KvaShadowRequired.
InvalidPteBit indica el bit de dirección física que se usa para entradas de tabla de páginas no válidas o cero si no se establece.
L1DataCacheFlushSupported indica si el hardware admite el vaciado de caché de datos L1.
L1TerminalFaultMitigationPresent indica si el sistema operativo admite la mitigación del sistema operativo del sistema operativo L1 (CVE-2018-3620).
El miembro reservado de la estructura está reservado para uso interno del sistema operativo.
SYSTEM_LEAP_SECOND_INFORMATION
Cuando el parámetro SystemInformationClass es SystemLeapSecondInformation, el búfer al que apunta el parámetro SystemInformation debe ser lo suficientemente grande como para contener una estructura de SYSTEM_LEAP_SECOND_INFORMATION opaca para su uso en la habilitación o deshabilitación de segundos bisiesto en todo el sistema. Esta configuración se conservará incluso después de reiniciar el sistema. Para ello, la estructura tiene el siguiente diseño:
typedef struct _SYSTEM_LEAP_SECOND_INFORMATION {
BOOLEAN Enabled;
ULONG Flags;
} SYSTEM_LEAP_SECOND_INFORMATION
El campo Marcas está reservado para su uso futuro.
SYSTEM_LOOKASIDE_INFORMATION
Cuando el parámetro SystemInformationClass es SystemLookasideInformation, el búfer al que apunta el parámetro SystemInformation debe ser lo suficientemente grande como para contener una estructura de SYSTEM_LOOKASIDE_INFORMATION opaca para su uso en la generación de una inicialización impredecible para un generador de números aleatorios. Para ello, la estructura tiene el siguiente diseño:
typedef struct _SYSTEM_LOOKASIDE_INFORMATION {
BYTE Reserved1[32];
} SYSTEM_LOOKASIDE_INFORMATION;
Los miembros individuales de la estructura están reservados para uso interno por parte del sistema operativo.
Use la función CryptGenRandom en su lugar para generar datos criptográficos aleatorios.
SYSTEM_PERFORMANCE_INFORMATION
Cuando el parámetro SystemInformationClass es SystemPerformanceInformation, el búfer al que apunta el parámetro SystemInformation debe ser lo suficientemente grande como para contener una estructura de SYSTEM_PERFORMANCE_INFORMATION opaca para usarla para generar una inicialización impredecible para un generador de números aleatorios. Para ello, la estructura tiene el siguiente diseño:
typedef struct _SYSTEM_PERFORMANCE_INFORMATION {
BYTE Reserved1[312];
} SYSTEM_PERFORMANCE_INFORMATION;
Los miembros individuales de la estructura están reservados para uso interno por parte del sistema operativo.
Use la función CryptGenRandom en su lugar para generar datos criptográficos aleatorios.
SYSTEM_POLICY_INFORMATION
Cuando el parámetro SystemInformationClass es SystemPolicyInformation, el búfer al que apunta el parámetro SystemInformation debe ser lo suficientemente grande como para contener una única estructura de SYSTEM_POLICY_INFORMATION que tenga el siguiente diseño:
typedef struct _SYSTEM_POLICY_INFORMATION {
PVOID Reserved1[2];
ULONG Reserved2[3];
} SYSTEM_POLICY_INFORMATION;
Los miembros individuales de la estructura están reservados para uso interno por parte del sistema operativo.
Use la función SLGetWindowsInformation en su lugar para obtener información de directiva.
SYSTEM_PROCESS_INFORMATION
Cuando el parámetro SystemInformationClass es SystemProcessInformation, el búfer al que apunta el parámetro SystemInformation contiene una estructura de SYSTEM_PROCESS_INFORMATION para cada proceso. Cada una de estas estructuras va seguida inmediatamente en memoria por una o varias estructuras de SYSTEM_THREAD_INFORMATION que proporcionan información para cada subproceso del proceso anterior. Para obtener más información sobre SYSTEM_THREAD_INFORMATION, consulte la sección sobre esta estructura en este artículo.
El búfer al que apunta el parámetro SystemInformation debe ser lo suficientemente grande como para contener una matriz que contenga tantas estructuras de SYSTEM_PROCESS_INFORMATION como SYSTEM_THREAD_INFORMATION , ya que hay procesos y subprocesos que se ejecutan en el sistema. El parámetro ReturnLength especifica este tamaño.
Cada estructura de SYSTEM_PROCESS_INFORMATION tiene el siguiente diseño:
typedef struct _SYSTEM_PROCESS_INFORMATION {
ULONG NextEntryOffset;
ULONG NumberOfThreads;
BYTE Reserved1[48];
UNICODE_STRING ImageName;
KPRIORITY BasePriority;
HANDLE UniqueProcessId;
PVOID Reserved2;
ULONG HandleCount;
ULONG SessionId;
PVOID Reserved3;
SIZE_T PeakVirtualSize;
SIZE_T VirtualSize;
ULONG Reserved4;
SIZE_T PeakWorkingSetSize;
SIZE_T WorkingSetSize;
PVOID Reserved5;
SIZE_T QuotaPagedPoolUsage;
PVOID Reserved6;
SIZE_T QuotaNonPagedPoolUsage;
SIZE_T PagefileUsage;
SIZE_T PeakPagefileUsage;
SIZE_T PrivatePageCount;
LARGE_INTEGER Reserved7[6];
} SYSTEM_PROCESS_INFORMATION;
El inicio del siguiente elemento de la matriz es la dirección del elemento anterior más el valor del miembro NextEntryOffset . Para el último elemento de la matriz, NextEntryOffset es 0.
El miembro NumberOfThreads contiene el número de subprocesos del proceso.
El miembro ImageName contiene el nombre de la imagen del proceso.
El miembro BasePriority contiene la prioridad base del proceso, que es la prioridad inicial de los subprocesos creados en el proceso asociado.
El miembro UniqueProcessId contiene el identificador de proceso único del proceso.
El miembro HandleCount contiene el número total de identificadores que utiliza el proceso en cuestión; use GetProcessHandleCount para recuperar esta información en su lugar.
El miembro SessionId contiene el identificador de sesión de la sesión de proceso.
El miembro PeakVirtualSize contiene el tamaño máximo, en bytes, de la memoria virtual utilizada por el proceso.
El miembro VirtualSize contiene el tamaño actual, en bytes, de la memoria virtual utilizada por el proceso.
El miembro PeakWorkingSetSize contiene el tamaño máximo, en kilobytes, del conjunto de trabajo del proceso.
El miembro QuotaPagedPoolUsage contiene la cuota actual que se cobra al proceso para el uso del grupo paginado.
El miembro QuotaNonPagedPoolUsage contiene la cuota actual cargada al proceso para el uso del grupo no paginado.
El miembro PagefileUsage contiene el número de bytes de almacenamiento de archivos de página en uso por el proceso.
El miembro PeakPagefileUsage contiene el número máximo de bytes de almacenamiento de archivos de página usado por el proceso.
El miembro PrivatePageCount contiene el número de páginas de memoria asignadas para el uso de este proceso.
También puede recuperar la información PeakWorkingSetSize, QuotaPagedPoolUsage, QuotaNonPagedPoolUsage, PagefileUsage, PeakPagefileUsage y PrivatePageCount mediante la función GetProcessMemoryInfo o la clase Win32_Process .
Los demás miembros de la estructura están reservados para uso interno por parte del sistema operativo.
SYSTEM_THREAD_INFORMATION
Cuando el parámetro SystemInformationClass es SystemProcessInformation, el búfer al que apunta el parámetro SystemInformation contiene una estructura de SYSTEM_PROCESS_INFORMATION para cada proceso. Cada una de estas estructuras va seguida inmediatamente en memoria por una o varias estructuras de SYSTEM_THREAD_INFORMATION que proporcionan información para cada subproceso del proceso anterior. Para obtener más información sobre SYSTEM_PROCESS_INFORMATION, consulte la sección sobre esta estructura en este artículo. Cada estructura de SYSTEM_THREAD_INFORMATION tiene el siguiente diseño:
typedef struct _SYSTEM_THREAD_INFORMATION {
LARGE_INTEGER Reserved1[3];
ULONG Reserved2;
PVOID StartAddress;
CLIENT_ID ClientId;
KPRIORITY Priority;
LONG BasePriority;
ULONG Reserved3;
ULONG ThreadState;
ULONG WaitReason;
} SYSTEM_THREAD_INFORMATION;
El miembro StartAddress contiene la dirección inicial del subproceso.
El miembro ClientId contiene el identificador del subproceso y el proceso que posee el subproceso.
El miembro Priority contiene la prioridad de subproceso dinámico.
El miembro BasePriority contiene la prioridad del subproceso base.
El miembro ThreadState contiene el estado del subproceso actual.
El miembro WaitReason contiene el motivo por el que el subproceso está esperando.
Los demás miembros de la estructura están reservados para uso interno por parte del sistema operativo.
SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION
Cuando el parámetro SystemInformationClass es SystemProcessorPerformanceInformation, el búfer al que apunta el parámetro SystemInformation debe ser lo suficientemente grande como para contener una matriz que contenga tantas estructuras de SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION como hay procesadores (CPU) instalados en el sistema. Cada estructura tiene el siguiente diseño:
typedef struct
_SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION {
LARGE_INTEGER IdleTime;
LARGE_INTEGER KernelTime;
LARGE_INTEGER UserTime;
LARGE_INTEGER Reserved1[2];
ULONG Reserved2;
} SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION;
El miembro IdleTime contiene la cantidad de tiempo que el sistema ha estado inactivo, en intervalos de 100 nanosegundos.
El miembro KernelTime contiene la cantidad de tiempo que el sistema ha dedicado a ejecutar en modo kernel (incluidos todos los subprocesos de todos los procesos, en todos los procesadores), en intervalos de 100 nanosegundos.
El miembro UserTime contiene la cantidad de tiempo que el sistema ha dedicado a ejecutar en modo usuario (incluidos todos los subprocesos de todos los procesos, en todos los procesadores), en intervalos de 100 nanosegundos.
Use GetSystemTimes en su lugar para recuperar esta información.
SYSTEM_QUERY_PERFORMANCE_COUNTER_INFORMATION
Cuando el parámetro SystemInformationClass es SystemQueryPerformanceCounterInformation, el búfer al que apunta el parámetro SystemInformation debe ser lo suficientemente grande como para contener una única estructura de SYSTEM_QUERY_PERFORMANCE_COUNTER_INFORMATION que tenga el siguiente diseño:
typedef struct _SYSTEM_QUERY_PERFORMANCE_COUNTER_INFORMATION {
ULONG Version;
QUERY_PERFORMANCE_COUNTER_FLAGS Flags;
QUERY_PERFORMANCE_COUNTER_FLAGS ValidFlags;
} SYSTEM_QUERY_PERFORMANCE_COUNTER_INFORMATION;
Los miembros Flags y ValidFlags son estructuras QUERY_PERFORMANCE_COUNTER_FLAGS que tienen el siguiente diseño:
typedef struct _QUERY_PERFORMANCE_COUNTER_FLAGS {
union {
struct {
ULONG KernelTransition:1;
ULONG Reserved:31;
};
ULONG ul;
};
} QUERY_PERFORMANCE_COUNTER_FLAGS;
El miembro ValidFlags de la estructura SYSTEM_QUERY_PERFORMANCE_COUNTER_INFORMATION indica qué bits del miembro Flags contienen información válida. Si se requiere una transición del kernel, el bit KernelTransition se establece en ValidFlags y Flags. Si no se requiere una transición del kernel, el bit KernelTransition se establece en ValidFlags y se borra en Marcas.
SYSTEM_REGISTRY_QUOTA_INFORMATION
Cuando el parámetro SystemInformationClass es SystemRegistryQuotaInformation, el búfer al que apunta el parámetro SystemInformation debe ser lo suficientemente grande como para contener una única estructura de SYSTEM_REGISTRY_QUOTA_INFORMATION que tenga el siguiente diseño:
typedef struct _SYSTEM_REGISTRY_QUOTA_INFORMATION {
ULONG RegistryQuotaAllowed;
ULONG RegistryQuotaUsed;
PVOID Reserved1;
} SYSTEM_REGISTRY_QUOTA_INFORMATION;
El miembro RegistryQuotaAllowed contiene el tamaño máximo, en bytes, que el Registro puede alcanzar en este sistema.
El miembro RegistryQuotaUsed contiene el tamaño actual del Registro, en bytes.
Use GetSystemRegistryQuota en su lugar para recuperar esta información.
El otro miembro de la estructura está reservado para uso interno del sistema operativo.
SYSTEM_SPECULATION_CONTROL_INFORMATION
Cuando el parámetro SystemInformationClass es SystemSpeculationControlInformation, el búfer al que apunta el parámetro SystemInformation debe ser lo suficientemente grande como para contener una única estructura de SYSTEM_SPECULATION_CONTROL_INFORMATION que tenga el siguiente diseño:
typedef struct _SYSTEM_SPECULATION_CONTROL_INFORMATION {
struct {
ULONG BpbEnabled:1;
ULONG BpbDisabledSystemPolicy:1;
ULONG BpbDisabledNoHardwareSupport:1;
ULONG SpecCtrlEnumerated:1;
ULONG SpecCmdEnumerated:1;
ULONG IbrsPresent:1;
ULONG StibpPresent:1;
ULONG SmepPresent:1;
ULONG SpeculativeStoreBypassDisableAvailable:1;
ULONG SpeculativeStoreBypassDisableSupported:1;
ULONG SpeculativeStoreBypassDisabledSystemWide:1;
ULONG SpeculativeStoreBypassDisabledKernel:1;
ULONG SpeculativeStoreBypassDisableRequired:1;
ULONG BpbDisabledKernelToUser:1;
ULONG Reserved:18;
} SpeculationControlFlags;
} SYSTEM_SPECULATION_CONTROL_INFORMATION, * PSYSTEM_SPECULATION_CONTROL_INFORMATION;
BpbEnabled indica si se admiten y habilitan las características de control de especulación.
BpbDisabledSystemPolicy indica si las características de control de especulación están deshabilitadas debido a la directiva del sistema.
BpbDisabledNoHardwareSupport si las características de control de especulación están deshabilitadas debido a la ausencia de soporte técnico de hardware.
EspecificaciónCtrlEnumerado si el IA32_SPEC_CTRL MSR está enumerado por hardware.
SpecCmdEnumerated indica si el IA32_SPEC_CMD MSR está enumerado por hardware.
IbrsPresent indica si el MSR de IBRS se trata como presente.
StibpPresent indica si el MSR de STIBP está presente.
SmepPresent indica si la característica SMEP está presente y habilitada.
El Valor DeStoreBypassDisableAvailable indica si el sistema operativo admite los demás campos de omisión de almacén especulativo disable (SSBD) en esta estructura de datos.
El valor de SpeculativeStoreBypassDisableSupported indica si la compatibilidad de hardware con SSBD está presente.
El Valor DeStoreBypassDisabledSystemWide indica si SSBD se ha habilitado en todo el sistema.
El Valor DeStoreBypassDisabledKernel indica si SSBD se ha deshabilitado para el modo kernel.
La clase SpeculativeStoreBypassDisableRequired indica si se sabe que el hardware es susceptible a la omisión del almacén especulativo.
BpbDisabledKernelToUser indica si la predicción de rama indirecta se vacía en cada kernel a la transición del usuario.
El miembro reservado de la estructura está reservado para uso interno del sistema operativo.
SYSTEM_TIMEOFDAY_INFORMATION
Cuando el parámetro SystemInformationClass es SystemTimeOfDayInformation, el búfer al que apunta el parámetro SystemInformation debe ser lo suficientemente grande como para contener una estructura de SYSTEM_TIMEOFDAY_INFORMATION opaca para usarla para generar una inicialización impredecible para un generador de números aleatorios. Para ello, la estructura tiene el siguiente diseño:
typedef struct _SYSTEM_TIMEOFDAY_INFORMATION {
BYTE Reserved1[48];
} SYSTEM_TIMEOFDAY_INFORMATION;
Los miembros individuales de la estructura están reservados para uso interno por parte del sistema operativo.
Use la función CryptGenRandom en su lugar para generar datos criptográficos aleatorios.
[in] SystemInformationLength
Tamaño del búfer al que apunta el parámetro SystemInformation , en bytes.
[out, optional] ReturnLength
Puntero opcional a una ubicación donde la función escribe el tamaño real de la información solicitada. Si ese tamaño es menor o igual que el
El parámetro SystemInformationLength , la función copia la información en el búfer SystemInformation ; de lo contrario, devuelve un código de error NTSTATUS y devuelve en ReturnLength el tamaño del búfer necesario para recibir la información solicitada.
Valor devuelto
Devuelve un código de error o correcto de NTSTATUS.
Los formularios y la importancia de los códigos de error NTSTATUS se enumeran en el archivo de encabezado Ntstatus.h disponible en DDK y se describen en la documentación de DDK.
Comentarios
La función NtQuerySystemInformation y las estructuras que devuelve son internas para el sistema operativo y están sujetas a cambios de una versión de Windows a otra. Para mantener la compatibilidad de la aplicación, es mejor usar las funciones alternativas mencionadas anteriormente en su lugar.
Si usa NtQuerySystemInformation, acceda a la función mediante la vinculación dinámica en tiempo de ejecución. Esto ofrece al código la oportunidad de responder correctamente si la función se ha cambiado o quitado del sistema operativo. Sin embargo, es posible que los cambios de firma no sean detectables.
Esta función no tiene ninguna biblioteca de importación asociada. Debe usar las funciones LoadLibrary y GetProcAddress para vincular dinámicamente a Ntdll.dll.
Requisitos
Plataforma de destino | Windows |
Encabezado | winternl.h |
Library | ntdll.lib |
Archivo DLL | ntdll.dll |