[NtQuerySystemInformation 은 이후 버전의 Windows에서 변경되거나 사용할 수 없습니다. 애플리케이션은 이 항목에 나열된 대체 함수를 사용해야 합니다.]
지정된 시스템 정보를 검색합니다.
Syntax
__kernel_entry NTSTATUS NtQuerySystemInformation(
[in] SYSTEM_INFORMATION_CLASS SystemInformationClass,
[in, out] PVOID SystemInformation,
[in] ULONG SystemInformationLength,
[out, optional] PULONG ReturnLength
);
매개 변수
[in] SystemInformationClass
검색할 시스템 정보의 종류를 나타내는 SYSTEM_INFORMATION_CLASS 열거된 값 중 하나입니다. 여기에는 다음 값이 포함되었습니다.
SystemBasicInformation
SYSTEM_BASIC_INFORMATION 구조에서 시스템의 프로세서 수를 반환합니다. 대신 GetSystemInfo 함수를 사용합니다.
SystemCodeIntegrityInformation
시스템의 코드 무결성에 의해 적용되는 옵션을 결정하는 데 사용할 수 있는 SYSTEM_CODEINTEGRITY_INFORMATION 구조를 반환합니다.
SystemExceptionInformation
난수 생성기에 대해 예측할 수 없는 시드를 생성하는 데 사용할 수 있는 불투명 SYSTEM_EXCEPTION_INFORMATION 구조를 반환합니다. 대신 CryptGenRandom 함수를 사용합니다.
SystemInterruptInformation
난수 생성기에 대해 예측할 수 없는 시드를 생성하는 데 사용할 수 있는 불투명 SYSTEM_INTERRUPT_INFORMATION 구조를 반환합니다. 대신 CryptGenRandom 함수를 사용합니다.
SystemKernelVaShadowInformation
불량 데이터 캐시 로드(예: CVE-2017-5754)와 관련된 공격에 대한 추측 제어 설정을 결정하는 데 사용할 수 있는 SYSTEM_KERNEL_VA_SHADOW_INFORMATION 구조를 반환 합니다.
SystemLeapSecondInformation
윤초 시스템 전체에서 윤초를 사용하거나 사용하지 않도록 설정하는 데 사용할 수 있는 불투명 SYSTEM_LEAP_SECOND_INFORMATION 구조를 반환합니다. 이 설정은 시스템을 다시 부팅한 후에도 유지됩니다.
SystemLookasideInformation
난수 생성기에 대해 예측할 수 없는 시드를 생성하는 데 사용할 수 있는 불투명 SYSTEM_LOOKASIDE_INFORMATION 구조를 반환합니다. 대신 CryptGenRandom 함수를 사용합니다.
SystemPerformanceInformation
난수 생성기에 대해 예측할 수 없는 시드를 생성하는 데 사용할 수 있는 불투명 SYSTEM_PERFORMANCE_INFORMATION 구조를 반환합니다. 대신 CryptGenRandom 함수를 사용합니다.
SystemPolicyInformation
SYSTEM_POLICY_INFORMATION 구조에서 정책 정보를 반환합니다. 대신 SLGetWindowsInformation 함수를 사용하여 정책 정보를 가져옵니다.
SystemProcessInformation
시스템에서 실행되는 각 프로세스에 대해 하나씩 SYSTEM_PROCESS_INFORMATION 구조의 배열을 반환합니다.
이러한 구조에는 프로세스에서 사용하는 스레드 및 핸들 수, 최대 페이지 파일 사용량 및 프로세스가 할당한 메모리 페이지 수를 포함하여 각 프로세스의 리소스 사용량에 대한 정보가 포함됩니다.
비고
가능하면 SystemBasicProcessInformation 은 더 빠르고 메모리를 적게 사용하며 타이밍 데이터를 동기화할 필요가 없으므로 대신 사용해야 합니다(프로세서 절전 모드 해제 제거).
SystemBasicProcessInformation
Windows 11 버전 26100.4770을 기준으로 사용 가능
시스템에서 실행되는 각 프로세스에 대해 하나씩 SYSTEM_BASICPROCESS_INFORMATION 구조의 배열을 반환합니다.
이러한 구조에는 프로세스 이름, 프로세스 ID 및 고유 시퀀스 번호를 포함하여 각 프로세스에 대한 기본 정보가 포함됩니다.
비고
SYSTEM_BASICPROCESS_INFORMATION 각 프로세스에 할당되고 UniqueProcessId 재사용(프로세스 CreateTime 대신)을 검색하는 데 사용되는 고유 값인 SequenceNumber 멤버를 제외하고 SYSTEM_PROCESS_INFORMATION 동일합니다.
typedef struct _SYSTEM_BASICPROCESS_INFORMATION {
ULONG NextEntryOffset;
HANDLE UniqueProcessId;
HANDLE InheritedFromUniqueProcessId;
ULONG64 SequenceNumber;
UNICODE_STRING ImageName;
} SYSTEM_BASICPROCESS_INFORMATION, *PSYSTEM_BASICPROCESS_INFORMATION;
해당 멤버는 프로세스 CreateTime 대신 UniqueProcessId 재사용을 검색하는 데 사용할 수 있는 각 프로세스에 할당된 고유 번호인 SequenceNumber를 제외하고 SYSTEM_PROCESS_INFORMATION 있는 멤버와 동일합니다.
SystemProcessorPerformanceInformation
시스템에 설치된 각 프로세서에 대해 하나씩 SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION 구조의 배열을 반환합니다.
SystemQueryPerformanceCounterInformation
시스템에서 QueryPerformanceCounter 함수 호출을 통해 고해상도 성능 카운터 정보를 검색하는 데 커널 전환이 필요한지 여부를 확인하는 데 사용할 수 있는 SYSTEM_QUERY_PERFORMANCE_COUNTER_INFORMATION 구조를 반환합니다.
SystemRegistryQuotaInformation
SYSTEM_REGISTRY_QUOTA_INFORMATION 구조를 반환합니다.
SystemSpeculationControlInformation
분기 대상 주입과 관련된 공격에 대한 추측 제어 설정을 결정하는 데 사용할 수 있는 SYSTEM_SPECULATION_CONTROL_INFORMATION 구조를 반환합니다(예: CVE-2017-5715).
각 SYSTEM_SPECULATION_CONTROL_INFORMATION 구조체에는 다음과 같은 레이아웃이 있습니다.
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;
Flag | 의미 |
BpbEnabled | TRUE이면 추측 제어 기능이 지원되고 사용하도록 설정됩니다. |
BpbDisabledSystemPolicy | TRUE이면 시스템 정책으로 인해 추측 제어 기능이 비활성화됩니다. |
BpbDisabledNoHardwareSupport | TRUE이면 하드웨어 지원이 없으므로 추측 제어 기능이 비활성화됩니다. |
SpecCtrlEnumerated | TRUE이면 i386/AMD64 IA32_SPEC_CTRL MSR이 하드웨어에 의해 열거됩니다. |
SpecCmdEnumerated | TRUE이면 i386/AMD64 IA32_SPEC_CMD MSR이 하드웨어에 의해 열거됩니다. |
IbrsPresent | TRUE이면 i386/AMD64 IBRS MSR이 있는 것으로 처리됩니다. |
StibpPresent | TRUE이면 i386/AMD64 STIBP MSR이 있습니다. |
SmepPresent | TRUE이면 SMEP 기능이 있고 사용하도록 설정됩니다. |
SpeculativeStoreBypassDisableAvailable | TRUE이면 SSBD에 대한 OS 지원이 존재합니다. |
SpeculativeStoreBypassDisableSupported | TRUE이면 SSBD에 대한 하드웨어 지원이 존재합니다. |
SpeculativeStoreBypassDisabledSystemWide | TRUE이면 SSBD가 시스템 전체로 설정됩니다. |
SpeculativeStoreBypassDisabledKernel | TRUE이면 SSBD가 커널에 설정됩니다. |
SpeculativeStoreBypassDisableRequired | TRUE이면 추측 공격을 방지하기 위해 SSBD가 필요합니다. |
BpbDisabledKernelToUser | TRUE이면 간접 분기 예측이 모든 커널에서 사용자 전환으로 플러시되지 않습니다. |
SpecCtrlRetpolineEnabled | TRUE이면 호환되는 드라이버에 대해 리포지토리가 활성화됩니다. |
SpecCtrlImportOptimizationEnabled | TRUE이면 가져오기 최적화가 사용됩니다. |
예약됨 | 예약 플래그입니다. |
SystemTimeOfDayInformation
난수 생성기에 대해 예측할 수 없는 시드를 생성하는 데 사용할 수 있는 불투명 SYSTEM_TIMEOFDAY_INFORMATION 구조를 반환합니다. 대신 CryptGenRandom 함수를 사용합니다.
[in, out] SystemInformation
요청된 정보를 받는 버퍼에 대한 포인터입니다. 이 정보의 크기와 구조는 SystemInformationClass 매개 변수의 값에 따라 달라집니다.
SYSTEM_BASIC_INFORMATION
SystemInformationClass 매개 변수가 SystemBasicInformation인 경우 SystemInformation 매개 변수가 가리키는 버퍼는 다음 레이아웃을 갖는 단일 SYSTEM_BASIC_INFORMATION 구조를 포함할 수 있을 만큼 커야 합니다.
typedef struct _SYSTEM_BASIC_INFORMATION {
BYTE Reserved1[24];
PVOID Reserved2[4];
CCHAR NumberOfProcessors;
} SYSTEM_BASIC_INFORMATION;
NumberOfProcessors 멤버는 시스템에 있는 프로세서 수를 포함합니다. 대신 GetSystemInfo 를 사용하여 이 정보를 검색합니다.
구조체의 다른 멤버는 운영 체제에서 내부용으로 예약됩니다.
SYSTEM_CODEINTEGRITY_INFORMATION
SystemInformationClass 매개 변수가 SystemCodeIntegrityInformation인 경우 SystemInformation 매개 변수가 가리키는 버퍼는 다음 레이아웃을 갖는 단일 SYSTEM_CODEINTEGRITY_INFORMATION 구조를 포함할 수 있을 만큼 커야 합니다.
typedef struct _SYSTEM_CODEINTEGRITY_INFORMATION {
ULONG Length;
ULONG CodeIntegrityOptions;
} SYSTEM_CODEINTEGRITY_INFORMATION, *PSYSTEM_CODEINTEGRITY_INFORMATION;
Length 멤버는 구조체의 크기를 바이트 단위로 포함합니다. 호출자가 설정해야 합니다.
CodeIntegrityOptions 멤버에는 코드 무결성 옵션을 식별하는 비트 마스크가 포함되어 있습니다.
값 | 의미 | |
0x01 | CODEINTEGRITY_OPTION_ENABLED | 커널 모드 코드 무결성 적용이 사용됩니다. |
0x02 | CODEINTEGRITY_OPTION_TESTSIGN | 테스트 서명된 콘텐츠는 코드 무결성에서 허용됩니다. |
0x04 | CODEINTEGRITY_OPTION_UMCI_ENABLED | 사용자 모드 코드 무결성 적용이 사용됩니다. |
0x08 | CODEINTEGRITY_OPTION_UMCI_AUDITMODE_ENABLED | 사용자 모드 코드 무결성 적용은 감사 모드에서 사용하도록 설정됩니다. 실행 파일은 실행/로드할 수 있습니다. 그러나 감사 이벤트는 기록됩니다. |
0x10 | CODEINTEGRITY_OPTION_UMCI_EXCLUSIONPATHS_ENABLED |
특정 경로에서 실행되는 사용자 모드 이진 파일은 코드 무결성 검사에 실패하더라도 실행할 수 있습니다.
제외 경로는 REG_MULTI_SZ 형식으로 다음 레지스트리 키에 나열됩니다.
|
0x20 | CODEINTEGRITY_OPTION_TEST_BUILD | 코드 무결성 빌드는 테스트 빌드에서 생성됩니다. |
0x40 | CODEINTEGRITY_OPTION_PREPRODUCTION_BUILD | 코드 무결성 빌드는 사전 프로덕션 빌드에서 생성됩니다. |
0x80 | CODEINTEGRITY_OPTION_DEBUGMODE_ENABLED | 커널 디버거가 연결되고 코드 무결성에서 서명되지 않은 코드를 로드할 수 있습니다. |
0x100 | CODEINTEGRITY_OPTION_FLIGHT_BUILD | 코드 무결성 빌드는 플라이트 빌드에서 생성됩니다. |
0x200 | CODEINTEGRITY_OPTION_FLIGHTING_ENABLED | 플라이트 서명된 콘텐츠는 코드 무결성에서 허용됩니다. 플라이트 서명 콘텐츠는 Microsoft Development Root Certificate Authority 2014에서 서명한 콘텐츠입니다. |
0x400 | CODEINTEGRITY_OPTION_HVCI_KMCI_ENABLED | 커널 모드 구성 요소에 대해 하이퍼바이저가 적용된 코드 무결성을 사용하도록 설정됩니다. |
0x800 | CODEINTEGRITY_OPTION_HVCI_KMCI_AUDITMODE_ENABLED | 하이퍼바이저 적용 코드 무결성은 감사 모드에서 사용하도록 설정됩니다. 감사 이벤트는 HVCI와 호환되지 않는 커널 모드 구성 요소에 대해 기록됩니다. 이 비트는 CODEINTEGRITY_OPTION_HVCI_KMCI_ENABLED 설정되었는지 여부에 관계없이 설정할 수 있습니다. |
0x1000 | CODEINTEGRITY_OPTION_HVCI_KMCI_STRICTMODE_ENABLED | 하이퍼바이저 적용 코드 무결성은 커널 모드 구성 요소에 대해 사용하도록 설정되지만 엄격한 모드에서는 사용할 수 있습니다. |
0x2000 | CODEINTEGRITY_OPTION_HVCI_IUM_ENABLED | 하이퍼바이저 적용 코드 무결성은 격리된 사용자 모드 구성 요소 서명을 적용하여 사용하도록 설정됩니다. |
SYSTEM_EXCEPTION_INFORMATION
SystemInformationClass 매개 변수가 SystemExceptionInformation인 경우 SystemInformation 매개 변수가 가리키는 버퍼는 난수 생성기에 대해 예측할 수 없는 시드를 생성하는 데 사용할 불투명 SYSTEM_EXCEPTION_INFORMATION 구조를 보유할 수 있을 만큼 커야 합니다. 이를 위해 구조체에는 다음과 같은 레이아웃이 있습니다.
typedef struct _SYSTEM_EXCEPTION_INFORMATION {
BYTE Reserved1[16];
} SYSTEM_EXCEPTION_INFORMATION;
구조체의 개별 멤버는 운영 체제에서 내부용으로 예약됩니다.
CryptGenRandom 함수를 대신 사용하여 암호화 임의 데이터를 생성합니다.
SYSTEM_INTERRUPT_INFORMATION
SystemInformationClass 매개 변수가 SystemInterruptInformation인 경우 SystemInformation 매개 변수가 가리키는 버퍼는 시스템에 설치된 CPU(프로세서)만큼 불투명한 SYSTEM_INTERRUPT_INFORMATION 구조를 포함하는 배열을 포함할 수 있을 만큼 커야 합니다. 각 구조체 또는 전체 배열을 사용하여 난수 생성기에 대해 예측할 수 없는 시드를 생성할 수 있습니다. 이를 위해 구조체에는 다음과 같은 레이아웃이 있습니다.
typedef struct _SYSTEM_INTERRUPT_INFORMATION {
BYTE Reserved1[24];
} SYSTEM_INTERRUPT_INFORMATION;
구조체의 개별 멤버는 운영 체제에서 내부용으로 예약됩니다.
CryptGenRandom 함수를 대신 사용하여 암호화 임의 데이터를 생성합니다.
SYSTEM_KERNEL_VA_SHADOW_INFORMATION
SystemInformationClass 매개 변수가 SystemKernelVaShadowInformation인 경우 SystemInformation 매개 변수가 가리키는 버퍼는 다음 레이아웃을 갖는 단일 SYSTEM_KERNEL_VA_SHADOW_INFORMATION 구조를 포함할 수 있을 만큼 커야 합니다.
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는 그림자를 사용할 수 있는지 여부를 나타냅니다.
KvaShadowUserGlobal은 사용자/전역이 사용하도록 설정되어 있음을 나타냅니다.
KvaShadowPcid는 PCID를 사용할 수 있는지 여부를 나타냅니다.
KvaShadowInvpcid는 PCID가 사용되는지 여부와 INVPCID가 사용 중인지 여부를 나타냅니다.
KvaShadowRequired는 하드웨어가 CVE-2017-5754에 취약한 것으로 알려져 있는지 여부를 나타냅니다.
KvaShadowRequiredAvailable은 KvaShadowRequired 필드가 운영 체제에서 지원되는지 여부를 나타냅니다.
InvalidPteBit는 잘못된 페이지 테이블 항목에 사용되는 실제 주소 비트 또는 설정되지 않은 경우 0을 나타냅니다.
L1DataCacheFlushSupported는 하드웨어가 L1 데이터 캐시 플러시를 지원하는지 여부를 나타냅니다.
L1TerminalFaultMitigationPresent는 운영 체제에서 L1 터미널 오류(CVE-2018-3620) 운영 체제 완화를 지원하는지 여부를 나타냅니다.
구조체의 Reserved 멤버는 운영 체제에서 내부용으로 예약됩니다.
SYSTEM_LEAP_SECOND_INFORMATION
SystemInformationClass 매개 변수가 SystemLeapSecondInformation인 경우 SystemInformation 매개 변수가 가리키는 버퍼는 윤초 시스템 전체에서 사용하거나 사용하지 않도록 설정하는 데 사용할 불투명 SYSTEM_LEAP_SECOND_INFORMATION 구조를 보유할 수 있을 만큼 커야 합니다. 이 설정은 시스템을 다시 부팅한 후에도 유지됩니다. 이를 위해 구조체에는 다음과 같은 레이아웃이 있습니다.
typedef struct _SYSTEM_LEAP_SECOND_INFORMATION {
BOOLEAN Enabled;
ULONG Flags;
} SYSTEM_LEAP_SECOND_INFORMATION
Flags 필드는 나중에 사용하도록 예약되어 있습니다.
SYSTEM_LOOKASIDE_INFORMATION
SystemInformationClass 매개 변수가 SystemLookasideInformation인 경우 SystemInformation 매개 변수가 가리키는 버퍼는 난수 생성기에 대해 예측할 수 없는 시드를 생성하는 데 사용할 불투명 SYSTEM_LOOKASIDE_INFORMATION 구조를 보유할 수 있을 만큼 커야 합니다. 이를 위해 구조체에는 다음과 같은 레이아웃이 있습니다.
typedef struct _SYSTEM_LOOKASIDE_INFORMATION {
BYTE Reserved1[32];
} SYSTEM_LOOKASIDE_INFORMATION;
구조체의 개별 멤버는 운영 체제에서 내부용으로 예약됩니다.
CryptGenRandom 함수를 대신 사용하여 암호화 임의 데이터를 생성합니다.
SYSTEM_PERFORMANCE_INFORMATION
SystemInformationClass 매개 변수가 SystemPerformanceInformation인 경우 SystemInformation 매개 변수가 가리키는 버퍼는 난수 생성기에 대해 예측할 수 없는 시드를 생성하는 데 사용할 불투명 SYSTEM_PERFORMANCE_INFORMATION 구조를 보유할 수 있을 만큼 커야 합니다. 이를 위해 구조체에는 다음과 같은 레이아웃이 있습니다.
typedef struct _SYSTEM_PERFORMANCE_INFORMATION {
BYTE Reserved1[312];
} SYSTEM_PERFORMANCE_INFORMATION;
구조체의 개별 멤버는 운영 체제에서 내부용으로 예약됩니다.
CryptGenRandom 함수를 대신 사용하여 암호화 임의 데이터를 생성합니다.
SYSTEM_POLICY_INFORMATION
SystemInformationClass 매개 변수가 SystemPolicyInformation인 경우 SystemInformation 매개 변수가 가리키는 버퍼는 다음 레이아웃을 갖는 단일 SYSTEM_POLICY_INFORMATION 구조를 포함할 수 있을 만큼 커야 합니다.
typedef struct _SYSTEM_POLICY_INFORMATION {
PVOID Reserved1[2];
ULONG Reserved2[3];
} SYSTEM_POLICY_INFORMATION;
구조체의 개별 멤버는 운영 체제에서 내부용으로 예약됩니다.
대신 SLGetWindowsInformation 함수를 사용하여 정책 정보를 가져옵니다.
SYSTEM_PROCESS_INFORMATION
SystemInformationClass 매개 변수가 SystemProcessInformation인 경우 SystemInformation 매개 변수가 가리키는 버퍼에는 각 프로세스에 대한 SYSTEM_PROCESS_INFORMATION 구조가 포함됩니다. 이러한 각 구조는 이전 프로세스의 각 스레드에 대한 정보를 제공하는 하나 이상의 SYSTEM_THREAD_INFORMATION 구조체가 메모리에서 바로 뒤따릅니다. SYSTEM_THREAD_INFORMATION 대한 자세한 내용은 이 문서의 이 구조에 대한 섹션을 참조하세요.
SystemInformation 매개 변수가 가리키는 버퍼는 시스템에서 실행되는 프로세스 및 스레드만큼 많은 SYSTEM_PROCESS_INFORMATION 및 SYSTEM_THREAD_INFORMATION 구조를 포함하는 배열을 포함할 수 있을 만큼 커야 합니다. 이 크기는 ReturnLength 매개 변수에 의해 지정됩니다.
각 SYSTEM_PROCESS_INFORMATION 구조체에는 다음과 같은 레이아웃이 있습니다.
typedef struct _SYSTEM_PROCESS_INFORMATION {
ULONG NextEntryOffset;
ULONG NumberOfThreads;
BYTE Reserved1[48];
UNICODE_STRING ImageName;
KPRIORITY BasePriority;
HANDLE UniqueProcessId;
HANDLE InheritedFromUniqueProcessId;
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;
배열에서 다음 항목의 시작은 이전 항목의 주소와 NextEntryOffset 멤버의 값입니다. 배열의 마지막 항목에 대해 NextEntryOffset 은 0입니다.
NumberOfThreads 멤버에는 프로세스의 스레드 수가 포함됩니다.
ImageName 멤버에는 프로세스의 이미지 이름이 포함됩니다.
BasePriority 멤버에는 연결된 프로세스 내에서 만든 스레드의 시작 우선 순위인 프로세스의 기본 우선 순위가 포함됩니다.
UniqueProcessId 멤버는 프로세스의 고유한 프로세스 ID를 포함합니다.
InheritedFromUniqueProcessId 멤버는 해당 부모의 고유한 프로세스 ID를 포함합니다.
HandleCount 멤버에는 해당 프로세스에서 사용되는 총 핸들 수가 포함됩니다. 대신 GetProcessHandleCount를 사용하여 이 정보를 검색합니다.
SessionId 멤버는 프로세스 세션의 세션 식별자를 포함합니다.
PeakVirtualSize 멤버는 프로세스에서 사용하는 가상 메모리의 최대 크기(바이트)를 포함합니다.
VirtualSize 멤버는 프로세스에서 사용하는 가상 메모리의 현재 크기(바이트)를 포함합니다.
PeakWorkingSetSize 멤버는 프로세스의 작업 집합의 최대 크기(킬로바이트)를 포함합니다.
QuotaPagedPoolUsage 멤버에는 페이징된 풀 사용량에 대한 프로세스에 청구되는 현재 할당량이 포함됩니다.
QuotaNonPagedPoolUsage 멤버에는 비페이지 풀 사용량에 대한 프로세스에 청구되는 현재 할당량이 포함됩니다.
PagefileUsage 멤버는 프로세스에서 사용 중인 페이지 파일 스토리지의 바이트 수를 포함합니다.
PeakPagefileUsage 멤버는 프로세스에서 사용하는 페이지 파일 스토리지의 최대 바이트 수를 포함합니다.
PrivatePageCount 멤버에는 이 프로세스를 사용하기 위해 할당된 메모리 페이지 수가 포함됩니다.
GetProcessMemoryInfo 함수 또는 Win32_Process 클래스를 사용하여 PeakWorkingSetSize, QuotaPagedPoolUsage, QuotaNonPagedPoolUsage, PagefileUsage, PeakPagefileUsage 및 PrivatePageCount 정보를 검색할 수도 있습니다.
구조체의 다른 멤버는 운영 체제에서 내부용으로 예약됩니다.
SYSTEM_THREAD_INFORMATION
SystemInformationClass 매개 변수가 SystemProcessInformation인 경우 SystemInformation 매개 변수가 가리키는 버퍼에는 각 프로세스에 대한 SYSTEM_PROCESS_INFORMATION 구조가 포함됩니다. 이러한 각 구조는 이전 프로세스의 각 스레드에 대한 정보를 제공하는 하나 이상의 SYSTEM_THREAD_INFORMATION 구조체가 메모리에서 바로 뒤따릅니다. SYSTEM_PROCESS_INFORMATION 대한 자세한 내용은 이 문서의 이 구조에 대한 섹션을 참조하세요. 각 SYSTEM_THREAD_INFORMATION 구조체에는 다음과 같은 레이아웃이 있습니다.
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;
StartAddress 멤버는 스레드의 시작 주소를 포함합니다.
ClientId 멤버에는 스레드의 ID와 스레드를 소유하는 프로세스가 포함됩니다.
Priority 멤버에는 동적 스레드 우선 순위가 포함됩니다.
BasePriority 멤버에는 기본 스레드 우선 순위가 포함됩니다.
ThreadState 멤버는 현재 스레드 상태를 포함합니다.
WaitReason 멤버에는 스레드가 대기 중인 이유가 포함됩니다.
구조체의 다른 멤버는 운영 체제에서 내부용으로 예약됩니다.
SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION
SystemInformationClass 매개 변수가 SystemProcessorPerformanceInformation인 경우 SystemInformation 매개 변수가 가리키는 버퍼는 시스템에 설치된 CPU(프로세서)만큼의 SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION 구조를 포함하는 배열을 보유할 수 있을 만큼 커야 합니다. 각 구조체에는 다음과 같은 레이아웃이 있습니다.
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;
IdleTime 멤버는 시스템이 유휴 상태인 시간을 100나노초 간격으로 포함합니다.
KernelTime 멤버는 100나노초 간격으로 커널 모드(모든 프로세스의 모든 스레드 포함) 커널 모드에서 실행하는 데 소요된 시간을 포함합니다.
UserTime 멤버에는 시스템이 사용자 모드에서 실행하는 데 소요된 시간(모든 프로세스의 모든 스레드, 모든 프로세서 포함)이 100나노초 간격으로 포함됩니다.
대신 GetSystemTimes를 사용하여 이 정보를 검색합니다.
SYSTEM_QUERY_PERFORMANCE_COUNTER_INFORMATION
SystemInformationClass 매개 변수가 SystemQueryPerformanceCounterInformation인 경우 SystemInformation 매개 변수가 가리키는 버퍼는 다음 레이아웃을 갖는 단일 SYSTEM_QUERY_PERFORMANCE_COUNTER_INFORMATION 구조를 포함할 수 있을 만큼 커야 합니다.
typedef struct _SYSTEM_QUERY_PERFORMANCE_COUNTER_INFORMATION {
ULONG Version;
QUERY_PERFORMANCE_COUNTER_FLAGS Flags;
QUERY_PERFORMANCE_COUNTER_FLAGS ValidFlags;
} SYSTEM_QUERY_PERFORMANCE_COUNTER_INFORMATION;
Flags 및 ValidFlags 멤버는 다음과 같은 레이아웃을 갖는 QUERY_PERFORMANCE_COUNTER_FLAGS 구조체입니다.
typedef struct _QUERY_PERFORMANCE_COUNTER_FLAGS {
union {
struct {
ULONG KernelTransition:1;
ULONG Reserved:31;
};
ULONG ul;
};
} QUERY_PERFORMANCE_COUNTER_FLAGS;
SYSTEM_QUERY_PERFORMANCE_COUNTER_INFORMATION 구조체의 ValidFlags 멤버는 유효한 정보를 포함하는 Flags 멤버의 비트를 나타냅니다. 커널 전환이 필요한 경우 KernelTransition 비트는 ValidFlags 와 Flags 모두에서 설정됩니다. 커널 전환이 필요하지 않은 경우 KernelTransition 비트는 ValidFlags 로 설정되고 플래그에서 지워집니다.
SYSTEM_REGISTRY_QUOTA_INFORMATION
SystemInformationClass 매개 변수가 SystemRegistryQuotaInformation인 경우 SystemInformation 매개 변수가 가리키는 버퍼는 다음 레이아웃을 갖는 단일 SYSTEM_REGISTRY_QUOTA_INFORMATION 구조를 포함할 수 있을 만큼 커야 합니다.
typedef struct _SYSTEM_REGISTRY_QUOTA_INFORMATION {
ULONG RegistryQuotaAllowed;
ULONG RegistryQuotaUsed;
PVOID Reserved1;
} SYSTEM_REGISTRY_QUOTA_INFORMATION;
RegistryQuotaAllowed 멤버는 레지스트리가 이 시스템에서 얻을 수 있는 최대 크기(바이트)를 포함합니다.
RegistryQuotaUsed 멤버에는 레지스트리의 현재 크기(바이트)가 포함됩니다.
대신 GetSystemRegistryQuota 를 사용하여 이 정보를 검색합니다.
구조체의 다른 멤버는 운영 체제에서 내부용으로 예약됩니다.
SYSTEM_SPECULATION_CONTROL_INFORMATION
SystemInformationClass 매개 변수가 SystemSpeculationControlInformation인 경우 SystemInformation 매개 변수가 가리키는 버퍼는 다음 레이아웃을 갖는 단일 SYSTEM_SPECULATION_CONTROL_INFORMATION 구조를 포함할 수 있을 만큼 커야 합니다.
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는 추측 제어 기능이 지원되고 사용하도록 설정되어 있는지 여부를 나타냅니다.
BpbDisabledSystemPolicy는 시스템 정책으로 인해 투기 제어 기능이 비활성화되었는지 여부를 나타냅니다.
BpbDisabledNoHardwareSupport는 하드웨어 지원이 없어서 추측 제어 기능이 비활성화되었는지 여부를 나타냅니다.
SpecCtrlEnumerated는 IA32_SPEC_CTRL MSR이 하드웨어에 의해 열거되는지 여부를 지정합니다.
SpecCmdEnumerated는 IA32_SPEC_CMD MSR이 하드웨어에 의해 열거되는지 여부를 나타냅니다.
IbrsPresent는 IBRS MSR이 있는 것으로 처리되는지 여부를 나타냅니다.
StibpPresent는 STIBP MSR이 있는지 여부를 나타냅니다.
SmepPresent는 SMEP 기능이 있고 사용하도록 설정되어 있는지 여부를 나타냅니다.
SpeculativeStoreBypassDisableAvailable은 이 데이터 구조의 다른 SSBD(투기 저장소 바이패스 사용 안 함) 필드가 운영 체제에서 지원되는지 여부를 나타냅니다.
SpeculativeStoreBypassDisableSupported는 SSBD에 대한 하드웨어 지원이 있는지 여부를 나타냅니다.
SpeculativeStoreBypassDisabledSystemWide는 SSBD가 시스템 전체에서 사용하도록 설정되었는지 여부를 나타냅니다.
SpeculativeStoreBypassDisabledKernel은 커널 모드에서 SSBD를 사용하지 않도록 설정했는지 여부를 나타냅니다.
SpeculativeStoreBypassDisableRequired는 하드웨어가 투기 저장소 우회에 취약한 것으로 알려져 있는지 여부를 나타냅니다.
BpbDisabledKernelToUser는 간접 분기 예측이 커널마다 사용자 전환으로 플러시되는지 여부를 나타냅니다.
구조체의 Reserved 멤버는 운영 체제에서 내부용으로 예약됩니다.
SYSTEM_TIMEOFDAY_INFORMATION
SystemInformationClass 매개 변수가 SystemTimeOfDayInformation인 경우 SystemInformation 매개 변수가 가리키는 버퍼는 난수 생성기에 대해 예측할 수 없는 시드를 생성하는 데 사용할 불투명 SYSTEM_TIMEOFDAY_INFORMATION 구조를 보유할 수 있을 만큼 커야 합니다. 이를 위해 구조체에는 다음과 같은 레이아웃이 있습니다.
typedef struct _SYSTEM_TIMEOFDAY_INFORMATION {
BYTE Reserved1[48];
} SYSTEM_TIMEOFDAY_INFORMATION;
구조체의 개별 멤버는 운영 체제에서 내부용으로 예약됩니다.
CryptGenRandom 함수를 대신 사용하여 암호화 임의 데이터를 생성합니다.
[in] SystemInformationLength
SystemInformation 매개 변수가 가리키는 버퍼의 크기(바이트)입니다.
[out, optional] ReturnLength
함수가 요청된 정보의 실제 크기를 쓰는 위치에 대한 선택적 포인터입니다. 해당 크기가 다음보다 작거나 같은 경우
SystemInformationLength 매개 변수, 함수는 SystemInformation 버퍼에 정보를 복사; 그렇지 않으면 NTSTATUS 오류 코드를 반환하고 ReturnLength 에서 요청된 정보를 수신하는 데 필요한 버퍼 크기를 반환합니다.
반환 값
NTSTATUS 성공 또는 오류 코드를 반환합니다.
NTSTATUS 오류 코드의 양식과 중요성은 DDK에서 사용할 수 있는 Ntstatus.h 헤더 파일에 나열되며 DDK 설명서에 설명되어 있습니다.
비고
NtQuerySystemInformation 함수 및 반환하는 구조는 운영 체제 내부이며 Windows의 한 릴리스에서 다른 릴리스로 변경될 수 있습니다. 애플리케이션의 호환성을 유지하려면 앞에서 언급한 대체 함수를 대신 사용하는 것이 좋습니다.
NtQuerySystemInformation을 사용하는 경우 런타임 동적 연결을 통해 함수에 액세스합니다. 이렇게 하면 함수가 운영 체제에서 변경되거나 제거된 경우 코드가 정상적으로 응답할 수 있습니다. 그러나 서명 변경은 검색할 수 없습니다.
이 함수에는 연결된 가져오기 라이브러리가 없습니다. LoadLibrary 및 GetProcAddress 함수를 사용하여 Ntdll.dll동적으로 연결해야 합니다.
요구 사항
요구 사항 | 가치 |
---|---|
대상 플랫폼 | 윈도우즈 |
Header | winternl.h |
Library | ntdll.lib |
DLL | ntdll.dll |