NtQuerySystemInformation 함수(winternl.h)

[NtQuerySystemInformation 은 이후 버전의 Windows에서 변경되거나 사용할 수 없습니다. 애플리케이션은 이 항목에 나열된 대체 함수를 사용해야 합니다.]

지정된 시스템 정보를 검색합니다.

구문

__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 구조의 배열을 반환합니다.

이러한 구조에는 프로세스에서 사용하는 스레드 및 핸들 수, 최대 페이지 파일 사용량 및 프로세스가 할당한 메모리 페이지 수를 포함하여 각 프로세스의 리소스 사용량에 대한 정보가 포함됩니다.

SystemProcessorPerformanceInformation

시스템에 설치된 각 프로세서에 대해 하나씩 SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION 구조의 배열을 반환합니다.

SystemQueryPerformanceCounterInformation

시스템에서 QueryPerformanceCounter 함수 호출을 통해 고해상도 성능 카운터 정보를 검색하기 위해 커널 전환이 필요한지 여부를 확인하는 데 사용할 수 있는 SYSTEM_QUERY_PERFORMANCE_COUNTER_INFORMATION 구조를 반환합니다.

SystemRegistryQuotaInformation

SYSTEM_REGISTRY_QUOTA_INFORMATION 구조를 반환합니다.

SystemSpeculationControlInformation

분기 대상 삽입(예: CVE-2017-5715)과 관련된 공격에 대한 추측 제어 설정을 결정하는 데 사용할 수 있는 SYSTEM_SPECULATION_CONTROL_INFORMATION 구조를 반환 합니다.

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;

플래그 의미
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이면 호환되는 드라이버에 대해 Retpoline을 사용하도록 설정됩니다.
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 형식으로 나열됩니다.

  • 키: HKLM\SYSTEM\CurrentControlSet\Control\CI\TRSData
  • 값: TestPath
이 키에 추가된 경로는 다음 두 가지 형식 중 하나여야 합니다.
  • 경로(절대 또는 상대): \Program Files\TestAutomationPath
  • 이진(특정): \Program Files\TestAutomationPath\mybinary.exe
다음 경로는 제한되며 제외로 추가할 수 없습니다.
  • \
  • \Windows
  • \Windows\System32
  • \Program Files
기본 제공 경로 제외: 다음 경로는 기본적으로 제외됩니다. 이러한 항목을 경로 제외에 구체적으로 추가할 필요는 없습니다. ARM(Windows 런타임)에만 적용됩니다.
  • \Program Files\WTT
  • \Program Files (x86)\WTT
  • \WTT\JobsWorkingDir
  • \Program Files\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 코드 무결성 빌드는 테스트 빌드에서 가져옵니다.
0x40 CODEINTEGRITY_OPTION_PREPRODUCTION_BUILD 코드 무결성 빌드는 사전 프로덕션 빌드에서 가져옵니다.
0x80 CODEINTEGRITY_OPTION_DEBUGMODE_ENABLED 커널 디버거가 연결되고 코드 무결성으로 서명되지 않은 코드가 로드될 수 있습니다.
0x100 CODEINTEGRITY_OPTION_FLIGHT_BUILD 코드 무결성 빌드는 플라이트 빌드에서 가져옵니다.
0x200 CODEINTEGRITY_OPTION_FLIGHTING_ENABLED 플라이트 서명된 콘텐츠는 코드 무결성에서 허용됩니다. 플라이트 서명된 콘텐츠는 Microsoft 개발 루트 인증 기관 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에 취약한 것으로 알려져 있는지 여부를 나타냅니다.

KvaShadowRequiredAvailableKvaShadowRequired 필드가 운영 체제에서 지원되는지 여부를 나타냅니다.

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_INFORMATIONSYSTEM_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;
    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;

배열에서 다음 항목의 시작은 이전 항목의 주소와 NextEntryOffset 멤버의 값입니다. 배열의 마지막 항목에 대해 NextEntryOffset 은 0입니다.

NumberOfThreads 멤버에는 프로세스의 스레드 수가 포함됩니다.

ImageName 멤버에는 프로세스의 이미지 이름이 포함됩니다.

BasePriority 멤버에는 연결된 프로세스 내에서 만든 스레드의 시작 우선 순위인 프로세스의 기본 우선 순위가 포함됩니다.

UniqueProcessId 멤버에는 프로세스의 고유한 프로세스 ID가 포함됩니다.

HandleCount 멤버에는 해당 프로세스에서 사용되는 총 핸들 수가 포함됩니다. 대신 GetProcessHandleCount를 사용하여 이 정보를 검색합니다.

SessionId 멤버에는 프로세스 세션의 세션 식별자가 포함됩니다.

PeakVirtualSize 멤버에는 프로세스에서 사용하는 가상 메모리의 최대 크기(바이트)가 포함됩니다.

VirtualSize 멤버에는 프로세스에서 사용하는 가상 메모리의 현재 크기(바이트)가 포함됩니다.

PeakWorkingSetSize 멤버에는 프로세스의 작업 집합의 최대 크기(킬로바이트)가 포함됩니다.

QuotaPagedPoolUsage 멤버에는 페이징된 풀 사용에 대한 프로세스에 청구되는 현재 할당량이 포함됩니다.

QuotaNonPagedPoolUsage 멤버에는 비페이지 풀 사용에 대한 프로세스에 청구되는 현재 할당량이 포함됩니다.

PagefileUsage 멤버에는 프로세스에서 사용 중인 페이지 파일 스토리지의 바이트 수가 포함됩니다.

PeakPagefileUsage 멤버에는 프로세스에서 사용하는 페이지 파일 스토리지의 최대 바이트 수가 포함됩니다.

PrivatePageCount 멤버에는 이 프로세스를 사용하기 위해 할당된 메모리 페이지 수가 포함됩니다.

GetProcessMemoryInfo 함수 또는 Win32_Process 클래스를 사용하여 PeakWorkingSetSize, QuotaPagedPoolUsage, QuotaNonPagedPoolUsage, PagefileUsage, PeakPagefileUsagePrivatePageCount 정보를 검색할 수도 있습니다.

구조체의 다른 멤버는 운영 체제에서 내부 사용을 위해 예약되어 있습니다.

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;

FlagsValidFlags 멤버는 다음과 같은 레이아웃을 갖는 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 비트는 ValidFlagsFlags 모두에서 설정됩니다. 커널 전환이 필요하지 않은 경우 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을 사용하는 경우 런타임 동적 연결을 통해 함수에 액세스합니다. 이렇게 하면 함수가 운영 체제에서 변경되거나 제거된 경우 코드가 정상적으로 응답할 수 있습니다. 그러나 서명 변경은 검색할 수 없습니다.

이 함수에는 연결된 가져오기 라이브러리가 없습니다. LoadLibraryGetProcAddress 함수를 사용하여 Ntdll.dll 동적으로 연결해야 합니다.

요구 사항

   
대상 플랫폼 Windows
헤더 winternl.h
라이브러리 ntdll.lib
DLL ntdll.dll

추가 정보

GetProcessHandleCount

GetProcessMemoryInfo

GetSystemInfo

GetSystemRegistryQuota

GetSystemTimes