Compartir a través de


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:

  • Clave: HKLM\SYSTEM\CurrentControlSet\Control\CI\TRSData
  • Valor: TestPath
Las rutas de acceso agregadas a esta clave deben tener uno de estos dos formatos:
  • Ruta de acceso (absoluta o relativa): \Archivos de programa\TestAutomationPath
  • Binario (específico): \Program Files\TestAutomationPath\mybinary.exe
Las siguientes rutas de acceso están restringidas y no se pueden agregar como exclusión:
  • \
  • \Windows
  • \Windows\System32
  • \Archivos de programa
Exclusiones de ruta de acceso integradas: las siguientes rutas de acceso se excluyen de forma predeterminada. No es necesario agregarlos específicamente a exclusiones de ruta de acceso. Esto solo se aplica a ARM (Windows Runtime).
  • \Archivos de programa\WTT
  • \Archivos de programa (x86)\WTT
  • \WTT\JobsWorkingDir
  • \Archivos de programa\Common Files\Model Design Environment
  • \TAEF
  • \$ASITEMP
  • \ATDEVXCT1\WTTInstall
  • \ATUEXCT1\WTTInstall
  • \ATESCCT1\WTTInstall
  • \ATCORECT1\WTTInstall
  • \ATStressCT1\WTTInstall
  • \ATWSCCT1\WTTInstall
  • \ATFUNCT1\WTTInstall
  • \ATIDCCT1\WTTInstall
  • \ATDNTCT1\WTTInstall
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

Consulte también

GetProcessHandleCount

GetProcessMemoryInfo

Getsysteminfo

GetSystemRegistryQuota

GetSystemTimes