Função NtQuerySystemInformation (winternl.h)
[NtQuerySystemInformation pode ser alterado ou indisponível em versões futuras do Windows. Os aplicativos devem usar as funções alternativas listadas neste tópico.]
Recupera as informações do sistema especificadas.
Sintaxe
__kernel_entry NTSTATUS NtQuerySystemInformation(
[in] SYSTEM_INFORMATION_CLASS SystemInformationClass,
[in, out] PVOID SystemInformation,
[in] ULONG SystemInformationLength,
[out, optional] PULONG ReturnLength
);
Parâmetros
[in] SystemInformationClass
Um dos valores enumerados em SYSTEM_INFORMATION_CLASS, que indicam o tipo de informações do sistema a serem recuperadas. Eles incluem os valores a seguir.
SystemBasicInformation
Retorna o número de processadores no sistema em uma estrutura SYSTEM_BASIC_INFORMATION . Em vez disso, use a função GetSystemInfo .
SystemCodeIntegrityInformation
Retorna uma estrutura SYSTEM_CODEINTEGRITY_INFORMATION que pode ser usada para determinar as opções que estão sendo impostas pela Integridade do Código no sistema.
SystemExceptionInformation
Retorna uma estrutura de SYSTEM_EXCEPTION_INFORMATION opaca que pode ser usada para gerar uma semente imprevisível para um gerador de número aleatório. Em vez disso, use a função CryptGenRandom .
SystemInterruptInformation
Retorna uma estrutura de SYSTEM_INTERRUPT_INFORMATION opaca que pode ser usada para gerar uma semente imprevisível para um gerador de número aleatório. Em vez disso, use a função CryptGenRandom .
SystemKernelVaShadowInformation
Retorna uma estrutura SYSTEM_KERNEL_VA_SHADOW_INFORMATION que pode ser usada para determinar as configurações de controle de especulação para ataques envolvendo cargas de cache de dados não autorizados (como CVE-2017-5754).
SystemLeapSecondInformation
Retorna uma estrutura de SYSTEM_LEAP_SECOND_INFORMATION opaca que pode ser usada para habilitar ou desabilitar segundos bissextos em todo o sistema. Essa configuração persistirá mesmo após uma reinicialização do sistema.
SystemLookasideInformation
Retorna uma estrutura de SYSTEM_LOOKASIDE_INFORMATION opaca que pode ser usada para gerar uma semente imprevisível para um gerador de número aleatório. Em vez disso, use a função CryptGenRandom .
SystemPerformanceInformation
Retorna uma estrutura de SYSTEM_PERFORMANCE_INFORMATION opaca que pode ser usada para gerar uma semente imprevisível para um gerador de número aleatório. Em vez disso, use a função CryptGenRandom .
SystemPolicyInformation
Retorna informações de política em uma estrutura SYSTEM_POLICY_INFORMATION . Use a função SLGetWindowsInformation para obter informações de política.
SystemProcessInformation
Retorna uma matriz de estruturas SYSTEM_PROCESS_INFORMATION , uma para cada processo em execução no sistema.
Essas estruturas contêm informações sobre o uso de recursos de cada processo, incluindo o número de threads e identificadores usados pelo processo, o uso de arquivo de página de pico e o número de páginas de memória que o processo alocou.
SystemProcessorPerformanceInformation
Retorna uma matriz de estruturas SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION , uma para cada processador instalado no sistema.
SystemQueryPerformanceCounterInformation
Retorna uma estrutura SYSTEM_QUERY_PERFORMANCE_COUNTER_INFORMATION que pode ser usada para determinar se o sistema requer uma transição de kernel para recuperar as informações do contador de desempenho de alta resolução por meio de uma chamada de função QueryPerformanceCounter .
SystemRegistryQuotaInformation
Retorna uma estrutura SYSTEM_REGISTRY_QUOTA_INFORMATION .
SystemSpeculationControlInformation
Retorna uma estrutura SYSTEM_SPECULATION_CONTROL_INFORMATION que pode ser usada para determinar as configurações de controle de especulação para ataques envolvendo injeção de destino de branch (como CVE-2017-5715).
Cada estrutura SYSTEM_SPECULATION_CONTROL_INFORMATION tem o seguinte layout:
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;
Sinalizador | Significado |
BpbEnabled | Se TRUE, os recursos de controle de especulação serão compatíveis e habilitados. |
BpbDisabledSystemPolicy | Se TRUE, os recursos de controle de especulação serão desabilitados devido à política do sistema. |
BpbDisabledNoHardwareSupport | Se TRUE, os recursos de controle de especulação serão desabilitados devido à ausência de suporte de hardware. |
SpecCtrlEnumerated | Se TRUE, o i386/AMD64 IA32_SPEC_CTRL MSR será enumerado por hardware. |
SpecCmdEnumerated | Se TRUE, o i386/AMD64 IA32_SPEC_CMD MSR será enumerado por hardware. |
IbrsPresent | Se TRUE, o MSR IBRS i386/AMD64 será tratado como presente. |
StibpPresent | Se TRUE, o MSR STIBP i386/AMD64 estará presente. |
SmepPresent | Se TRUE, o recurso SMEP estará presente e habilitado. |
EspeculativoStoreBypassDisableAvailable | Se TRUE, o suporte do sistema operacional para SSBD existirá. |
SpeculativeStoreBypassDisableSupported | Se TRUE, o suporte de hardware para SSBD existirá. |
SpeculativeStoreBypassDisabledSystemWide | Se TRUE, o SSBD será definido em todo o sistema. |
SpeculativeStoreBypassDisabledKernel | Se TRUE, o SSBD será definido no kernel. |
SpeculativeStoreBypassDisableRequired | Se TRUE, o SSBD será necessário para evitar ataques de especulação. |
BpbDisabledKernelToUser | Se TRUE, a previsão de branch indireto não será liberada em cada kernel para a transição do usuário. |
SpecCtrlRetpolineEnabled | Se TRUE, Retpoline estará habilitado para drivers compatíveis. |
SpecCtrlImportOptimizationEnabled | Se TRUE, a otimização de importação estará habilitada. |
Reservado | Sinalizadores reservados. |
SystemTimeOfDayInformation
Retorna uma estrutura de SYSTEM_TIMEOFDAY_INFORMATION opaca que pode ser usada para gerar uma semente imprevisível para um gerador de número aleatório. Em vez disso, use a função CryptGenRandom .
[in, out] SystemInformation
Um ponteiro para um buffer que recebe as informações solicitadas. O tamanho e a estrutura dessas informações variam dependendo do valor do parâmetro SystemInformationClass :
SYSTEM_BASIC_INFORMATION
Quando o parâmetro SystemInformationClass é SystemBasicInformation, o buffer apontado pelo parâmetro SystemInformation deve ser grande o suficiente para manter uma única estrutura SYSTEM_BASIC_INFORMATION com o seguinte layout:
typedef struct _SYSTEM_BASIC_INFORMATION {
BYTE Reserved1[24];
PVOID Reserved2[4];
CCHAR NumberOfProcessors;
} SYSTEM_BASIC_INFORMATION;
O membro NumberOfProcessors contém o número de processadores presentes no sistema. Em vez disso , use GetSystemInfo para recuperar essas informações.
Os outros membros da estrutura são reservados para uso interno pelo sistema operacional.
SYSTEM_CODEINTEGRITY_INFORMATION
Quando o parâmetro SystemInformationClass é SystemCodeIntegrityInformation, o buffer apontado pelo parâmetro SystemInformation deve ser grande o suficiente para manter uma única estrutura SYSTEM_CODEINTEGRITY_INFORMATION com o seguinte layout:
typedef struct _SYSTEM_CODEINTEGRITY_INFORMATION {
ULONG Length;
ULONG CodeIntegrityOptions;
} SYSTEM_CODEINTEGRITY_INFORMATION, *PSYSTEM_CODEINTEGRITY_INFORMATION;
O membro Length contém o tamanho da estrutura em bytes. Isso deve ser definido pelo chamador.
O membro CodeIntegrityOptions contém uma máscara de bits para identificar opções de integridade de código.
Valor | Significado | |
0x01 | CODEINTEGRITY_OPTION_ENABLED | A imposição do modo kernel Integridade do Código está habilitada. |
0x02 | CODEINTEGRITY_OPTION_TESTSIGN | O conteúdo assinado de teste é permitido pela Integridade do Código. |
0x04 | CODEINTEGRITY_OPTION_UMCI_ENABLED | A imposição do modo de usuário Integridade do Código está habilitada. |
0x08 | CODEINTEGRITY_OPTION_UMCI_AUDITMODE_ENABLED | A imposição do modo de usuário Integridade do Código está habilitada no modo de auditoria. Os executáveis poderão ser executados/carregados; no entanto, os eventos de auditoria serão registrados. |
0x10 | CODEINTEGRITY_OPTION_UMCI_EXCLUSIONPATHS_ENABLED |
Os binários do modo de usuário que estão sendo executados em determinados caminhos têm permissão para serem executados mesmo se falharem nas verificações de integridade do código.
Os caminhos de exclusão são listados na seguinte chave do Registro no formato REG_MULTI_SZ:
|
0x20 | CODEINTEGRITY_OPTION_TEST_BUILD | O build da Integridade do Código é de um build de teste. |
0x40 | CODEINTEGRITY_OPTION_PREPRODUCTION_BUILD | A compilação da Integridade do Código é de um build de pré-produção. |
0x80 | CODEINTEGRITY_OPTION_DEBUGMODE_ENABLED | O depurador de kernel está anexado e a Integridade do Código pode permitir o carregamento de código não assinado. |
0x100 | CODEINTEGRITY_OPTION_FLIGHT_BUILD | A compilação da Integridade do Código é de uma compilação de pré-lançamento. |
0x200 | CODEINTEGRITY_OPTION_FLIGHTING_ENABLED | O conteúdo assinado em pré-lançamento é permitido pela Integridade do Código. O conteúdo assinado em pré-lançamento é o conteúdo assinado pela Microsoft Development Root Certificate Authority 2014. |
0x400 | CODEINTEGRITY_OPTION_HVCI_KMCI_ENABLED | A integridade de código imposta pelo hipervisor está habilitada para componentes do modo kernel. |
0x800 | CODEINTEGRITY_OPTION_HVCI_KMCI_AUDITMODE_ENABLED | A integridade de código imposta pelo hipervisor está habilitada no modo de auditoria. Eventos de auditoria serão registrados para componentes do modo kernel que não são compatíveis com HVCI. Esse bit pode ser definido se CODEINTEGRITY_OPTION_HVCI_KMCI_ENABLED está definido ou não. |
0x1000 | CODEINTEGRITY_OPTION_HVCI_KMCI_STRICTMODE_ENABLED | A integridade de código imposta pelo hipervisor está habilitada para componentes do modo kernel, mas no modo estrito. |
0x2000 | CODEINTEGRITY_OPTION_HVCI_IUM_ENABLED | A integridade de código imposta pelo hipervisor é habilitada com a imposição da assinatura de componentes do Modo de Usuário Isolado. |
SYSTEM_EXCEPTION_INFORMATION
Quando o parâmetro SystemInformationClass é SystemExceptionInformation, o buffer apontado pelo parâmetro SystemInformation deve ser grande o suficiente para manter uma estrutura de SYSTEM_EXCEPTION_INFORMATION opaca para uso na geração de uma semente imprevisível para um gerador de número aleatório. Para essa finalidade, a estrutura tem o seguinte layout:
typedef struct _SYSTEM_EXCEPTION_INFORMATION {
BYTE Reserved1[16];
} SYSTEM_EXCEPTION_INFORMATION;
Membros individuais da estrutura são reservados para uso interno pelo sistema operacional.
Use a função CryptGenRandom para gerar dados criptograficamente aleatórios.
SYSTEM_INTERRUPT_INFORMATION
Quando o parâmetro SystemInformationClass é SystemInterruptInformation, o buffer apontado pelo parâmetro SystemInformation deve ser grande o suficiente para conter uma matriz que contenha tantas estruturas opacas SYSTEM_INTERRUPT_INFORMATION quanto há CPUs (processadores) instaladas no sistema. Cada estrutura, ou a matriz como um todo, pode ser usada para gerar uma semente imprevisível para um gerador de número aleatório. Para essa finalidade, a estrutura tem o seguinte layout:
typedef struct _SYSTEM_INTERRUPT_INFORMATION {
BYTE Reserved1[24];
} SYSTEM_INTERRUPT_INFORMATION;
Membros individuais da estrutura são reservados para uso interno pelo sistema operacional.
Use a função CryptGenRandom para gerar dados criptograficamente aleatórios.
SYSTEM_KERNEL_VA_SHADOW_INFORMATION
Quando o parâmetro SystemInformationClass é SystemKernelVaShadowInformation, o buffer apontado pelo parâmetro SystemInformation deve ser grande o suficiente para manter uma única estrutura SYSTEM_KERNEL_VA_SHADOW_INFORMATION com o seguinte layout:
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;
O KvaShadowEnabled indica se o sombreamento está habilitado.
O KvaShadowUserGlobal indica que o usuário/global está habilitado.
O KvaShadowPcid indica se o PCID está habilitado.
O KvaShadowInvpcid indica se PCID está habilitado e se INVPCID está em uso.
O KvaShadowRequired indica se o hardware é conhecido por ser suscetível a CVE-2017-5754.
O KvaShadowRequiredAvailable indica se o campo KvaShadowRequired tem suporte do sistema operacional.
O InvalidPteBit indica o bit de endereço físico usado para entradas de tabela de página inválidas ou zero se não estiver definido.
O L1DataCacheFlushSupported indica se o hardware dá suporte à liberação de cache de dados L1.
O L1TerminalFaultMitigationPresent indica se o sistema operacional dá suporte à mitigação do sistema operacional CVE-2018-3620 (falha de terminal L1).
O membro Reservado da estrutura é reservado para uso interno pelo sistema operacional.
SYSTEM_LEAP_SECOND_INFORMATION
Quando o parâmetro SystemInformationClass é SystemLeapSecondInformation, o buffer apontado pelo parâmetro SystemInformation deve ser grande o suficiente para manter uma estrutura de SYSTEM_LEAP_SECOND_INFORMATION opaca para uso na habilitação ou desabilitação de segundos bissextos em todo o sistema. Essa configuração persistirá mesmo após uma reinicialização do sistema. Para essa finalidade, a estrutura tem o seguinte layout:
typedef struct _SYSTEM_LEAP_SECOND_INFORMATION {
BOOLEAN Enabled;
ULONG Flags;
} SYSTEM_LEAP_SECOND_INFORMATION
O campo Sinalizadores é reservado para uso futuro.
SYSTEM_LOOKASIDE_INFORMATION
Quando o parâmetro SystemInformationClass é SystemLookasideInformation, o buffer apontado pelo parâmetro SystemInformation deve ser grande o suficiente para manter uma estrutura de SYSTEM_LOOKASIDE_INFORMATION opaca para uso na geração de uma semente imprevisível para um gerador de número aleatório. Para essa finalidade, a estrutura tem o seguinte layout:
typedef struct _SYSTEM_LOOKASIDE_INFORMATION {
BYTE Reserved1[32];
} SYSTEM_LOOKASIDE_INFORMATION;
Membros individuais da estrutura são reservados para uso interno pelo sistema operacional.
Use a função CryptGenRandom para gerar dados criptograficamente aleatórios.
SYSTEM_PERFORMANCE_INFORMATION
Quando o parâmetro SystemInformationClass é SystemPerformanceInformation, o buffer apontado pelo parâmetro SystemInformation deve ser grande o suficiente para manter uma estrutura de SYSTEM_PERFORMANCE_INFORMATION opaca para uso na geração de uma semente imprevisível para um gerador de número aleatório. Para essa finalidade, a estrutura tem o seguinte layout:
typedef struct _SYSTEM_PERFORMANCE_INFORMATION {
BYTE Reserved1[312];
} SYSTEM_PERFORMANCE_INFORMATION;
Membros individuais da estrutura são reservados para uso interno pelo sistema operacional.
Use a função CryptGenRandom para gerar dados criptograficamente aleatórios.
SYSTEM_POLICY_INFORMATION
Quando o parâmetro SystemInformationClass é SystemPolicyInformation, o buffer apontado pelo parâmetro SystemInformation deve ser grande o suficiente para manter uma única estrutura SYSTEM_POLICY_INFORMATION com o seguinte layout:
typedef struct _SYSTEM_POLICY_INFORMATION {
PVOID Reserved1[2];
ULONG Reserved2[3];
} SYSTEM_POLICY_INFORMATION;
Membros individuais da estrutura são reservados para uso interno pelo sistema operacional.
Use a função SLGetWindowsInformation para obter informações de política.
SYSTEM_PROCESS_INFORMATION
Quando o parâmetro SystemInformationClass é SystemProcessInformation, o buffer apontado pelo parâmetro SystemInformation contém uma estrutura SYSTEM_PROCESS_INFORMATION para cada processo. Cada uma dessas estruturas é imediatamente seguida na memória por uma ou mais estruturas SYSTEM_THREAD_INFORMATION que fornecem informações para cada thread no processo anterior. Para obter mais informações sobre SYSTEM_THREAD_INFORMATION, consulte a seção sobre essa estrutura neste artigo.
O buffer apontado pelo parâmetro SystemInformation deve ser grande o suficiente para conter uma matriz que contenha tantas estruturas SYSTEM_PROCESS_INFORMATION e SYSTEM_THREAD_INFORMATION como há processos e threads em execução no sistema. Esse tamanho é especificado pelo parâmetro ReturnLength .
Cada estrutura SYSTEM_PROCESS_INFORMATION tem o seguinte layout:
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;
O início do próximo item na matriz é o endereço do item anterior mais o valor no membro NextEntryOffset . Para o último item na matriz, NextEntryOffset é 0.
O membro NumberOfThreads contém o número de threads no processo.
O membro ImageName contém o nome da imagem do processo.
O membro BasePriority contém a prioridade base do processo, que é a prioridade inicial para threads criados dentro do processo associado.
O membro UniqueProcessId contém a ID de processo exclusiva do processo.
O membro HandleCount contém o número total de identificadores que estão sendo usados pelo processo em questão; use GetProcessHandleCount para recuperar essas informações.
O membro SessionId contém o identificador de sessão da sessão de processo.
O membro PeakVirtualSize contém o tamanho de pico, em bytes, da memória virtual usada pelo processo.
O membro VirtualSize contém o tamanho atual, em bytes, da memória virtual usada pelo processo.
O membro PeakWorkingSetSize contém o tamanho de pico, em quilobytes, do conjunto de trabalho do processo.
O membro QuotaPagedPoolUsage contém a cota atual cobrada para o processo de uso do pool de páginas.
O membro QuotaNonPagedPoolUsage contém a cota atual cobrada para o processo de uso de pool nãopagado.
O membro PagefileUsage contém o número de bytes do armazenamento de arquivos de página em uso pelo processo.
O membro PeakPagefileUsage contém o número máximo de bytes de armazenamento de arquivos de página usados pelo processo.
O membro PrivatePageCount contém o número de páginas de memória alocadas para o uso desse processo.
Você também pode recuperar as informações PeakWorkingSetSize, QuotaPagedPoolUsage, QuotaNonPagedPoolUsage, PagefileUsage, PeakPagefileUsage e PrivatePageCount usando a função GetProcessMemoryInfo ou a classe Win32_Process .
Os outros membros da estrutura são reservados para uso interno pelo sistema operacional.
SYSTEM_THREAD_INFORMATION
Quando o parâmetro SystemInformationClass é SystemProcessInformation, o buffer apontado pelo parâmetro SystemInformation contém uma estrutura SYSTEM_PROCESS_INFORMATION para cada processo. Cada uma dessas estruturas é imediatamente seguida na memória por uma ou mais estruturas SYSTEM_THREAD_INFORMATION que fornecem informações para cada thread no processo anterior. Para obter mais informações sobre SYSTEM_PROCESS_INFORMATION, consulte a seção sobre essa estrutura neste artigo. Cada estrutura SYSTEM_THREAD_INFORMATION tem o seguinte layout:
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;
O membro StartAddress contém o endereço inicial do thread.
O membro ClientId contém a ID do thread e o processo que possui o thread.
O membro Priority contém a prioridade do thread dinâmico.
O membro BasePriority contém a prioridade do thread base.
O membro ThreadState contém o estado atual do thread.
O membro WaitReason contém o motivo pelo qual o thread está aguardando.
Os outros membros da estrutura são reservados para uso interno pelo sistema operacional.
SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION
Quando o parâmetro SystemInformationClass é SystemProcessorPerformanceInformation, o buffer apontado pelo parâmetro SystemInformation deve ser grande o suficiente para conter uma matriz que contenha tantas estruturas de SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION quanto há CPUs (processadores) instaladas no sistema. Cada estrutura tem o seguinte layout:
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;
O membro IdleTime contém a quantidade de tempo que o sistema ficou ocioso, em intervalos de 100 nanossegundos.
O membro KernelTime contém a quantidade de tempo que o sistema gastou executando no modo Kernel (incluindo todos os threads em todos os processos, em todos os processadores), em intervalos de 100 nanossegundos.
O membro UserTime contém a quantidade de tempo que o sistema gastou executando no modo Usuário (incluindo todos os threads em todos os processos, em todos os processadores), em intervalos de 100 nanossegundos.
Em vez disso , use GetSystemTimes para recuperar essas informações.
SYSTEM_QUERY_PERFORMANCE_COUNTER_INFORMATION
Quando o parâmetro SystemInformationClass é SystemQueryPerformanceCounterInformation, o buffer apontado pelo parâmetro SystemInformation deve ser grande o suficiente para manter uma única estrutura SYSTEM_QUERY_PERFORMANCE_COUNTER_INFORMATION com o seguinte layout:
typedef struct _SYSTEM_QUERY_PERFORMANCE_COUNTER_INFORMATION {
ULONG Version;
QUERY_PERFORMANCE_COUNTER_FLAGS Flags;
QUERY_PERFORMANCE_COUNTER_FLAGS ValidFlags;
} SYSTEM_QUERY_PERFORMANCE_COUNTER_INFORMATION;
Os membros Flags e ValidFlags são QUERY_PERFORMANCE_COUNTER_FLAGS estruturas com o seguinte layout:
typedef struct _QUERY_PERFORMANCE_COUNTER_FLAGS {
union {
struct {
ULONG KernelTransition:1;
ULONG Reserved:31;
};
ULONG ul;
};
} QUERY_PERFORMANCE_COUNTER_FLAGS;
O membro ValidFlags da estrutura SYSTEM_QUERY_PERFORMANCE_COUNTER_INFORMATION indica quais bits do membro Flags contêm informações válidas. Se uma transição de kernel for necessária, o bit KernelTransition será definido em ValidFlags e Flags. Se uma transição de kernel não for necessária, o bit KernelTransition será definido em ValidFlags e desmarcado em Sinalizadores.
SYSTEM_REGISTRY_QUOTA_INFORMATION
Quando o parâmetro SystemInformationClass é SystemRegistryQuotaInformation, o buffer apontado pelo parâmetro SystemInformation deve ser grande o suficiente para manter uma única estrutura SYSTEM_REGISTRY_QUOTA_INFORMATION com o seguinte layout:
typedef struct _SYSTEM_REGISTRY_QUOTA_INFORMATION {
ULONG RegistryQuotaAllowed;
ULONG RegistryQuotaUsed;
PVOID Reserved1;
} SYSTEM_REGISTRY_QUOTA_INFORMATION;
O membro RegistryQuotaAllowed contém o tamanho máximo, em bytes, que o Registro pode obter nesse sistema.
O membro RegistryQuotaUsed contém o tamanho atual do Registro, em bytes.
Em vez disso , use GetSystemRegistryQuota para recuperar essas informações.
O outro membro da estrutura é reservado para uso interno pelo sistema operacional.
SYSTEM_SPECULATION_CONTROL_INFORMATION
Quando o parâmetro SystemInformationClass é SystemSpeculationControlInformation, o buffer apontado pelo parâmetro SystemInformation deve ser grande o suficiente para manter uma única estrutura SYSTEM_SPECULATION_CONTROL_INFORMATION com o seguinte layout:
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;
O BpbEnabled indica se os recursos de controle de especulação são compatíveis e habilitados.
O BpbDisabledSystemPolicy indica se os recursos de controle de especulação estão desabilitados devido à política do sistema.
O BpbDisabledNoHardwareSupport se os recursos de controle de especulação estão desabilitados devido à ausência de suporte de hardware.
O SpecCtrlEnumerated se o IA32_SPEC_CTRL MSR é enumerado por hardware.
O SpecCmdEnumerated indica se o IA32_SPEC_CMD MSR é enumerado por hardware.
O IbrsPresent indica se o MSR do IBRS é tratado como presente.
O StibpPresent indica se o STIBP MSR está presente.
O SmepPresent indica se o recurso SMEP está presente e habilitado.
O SpeculativeStoreBypassDisableAvailable indica se os outros campos de desabilitação de bypass de repositório especulativo (SSBD) nessa estrutura de dados têm suporte do sistema operacional.
O SpeculativeStoreBypassDisableSupported indica se o suporte a hardware para SSBD está presente.
O SpeculativeStoreBypassDisabledSystemWide indica se o SSBD foi habilitado em todo o sistema.
O SpeculativeStoreBypassDisabledKernel indica se o SSBD foi desabilitado para o modo kernel.
O SpeculativeStoreBypassDisableRequired indica se o hardware é conhecido por ser suscetível ao bypass especulativo do repositório.
O BpbDisabledKernelToUser indica se a previsão de branch indireto é liberada em cada para a transição do kernel para o usuário.
O membro Reservado da estrutura é reservado para uso interno pelo sistema operacional.
SYSTEM_TIMEOFDAY_INFORMATION
Quando o parâmetro SystemInformationClass é SystemTimeOfDayInformation, o buffer apontado pelo parâmetro SystemInformation deve ser grande o suficiente para manter uma estrutura de SYSTEM_TIMEOFDAY_INFORMATION opaca para uso na geração de uma semente imprevisível para um gerador de número aleatório. Para essa finalidade, a estrutura tem o seguinte layout:
typedef struct _SYSTEM_TIMEOFDAY_INFORMATION {
BYTE Reserved1[48];
} SYSTEM_TIMEOFDAY_INFORMATION;
Membros individuais da estrutura são reservados para uso interno pelo sistema operacional.
Use a função CryptGenRandom para gerar dados criptograficamente aleatórios.
[in] SystemInformationLength
O tamanho do buffer apontado pelo parâmetro SystemInformation , em bytes.
[out, optional] ReturnLength
Um ponteiro opcional para um local em que a função grava o tamanho real das informações solicitadas. Se esse tamanho for menor ou igual ao
Parâmetro SystemInformationLength , a função copia as informações para o buffer SystemInformation ; caso contrário, ele retorna um código de erro NTSTATUS e retorna em ReturnLength o tamanho do buffer necessário para receber as informações solicitadas.
Retornar valor
Retorna um código de erro ou êxito NTSTATUS.
Os formulários e a significância dos códigos de erro NTSTATUS estão listados no arquivo de cabeçalho Ntstatus.h disponível no DDK e são descritos na documentação do DDK.
Comentários
A função NtQuerySystemInformation e as estruturas retornadas são internas para o sistema operacional e sujeitas a alterações de uma versão do Windows para outra. Para manter a compatibilidade do aplicativo, é melhor usar as funções alternativas mencionadas anteriormente.
Se você usar NtQuerySystemInformation, acesse a função por meio da vinculação dinâmica em tempo de execução. Isso dá ao código a oportunidade de responder normalmente se a função tiver sido alterada ou removida do sistema operacional. No entanto, as alterações de assinatura podem não ser detectáveis.
Essa função não tem nenhuma biblioteca de importação associada. Você deve usar as funções LoadLibrary e GetProcAddress para vincular dinamicamente a Ntdll.dll.
Requisitos
Plataforma de Destino | Windows |
Cabeçalho | winternl.h |
Biblioteca | ntdll.lib |
DLL | ntdll.dll |