다음을 통해 공유


ZwQuerySystemInformation 함수

[ZwQuerySystemInformation은 Windows 8 현재 더 이상 사용할 수 없습니다. 대신 이 항목에 나열된 대체 함수를 사용합니다.]

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

구문

NTSTATUS WINAPI ZwQuerySystemInformation(
  _In_      SYSTEM_INFORMATION_CLASS SystemInformationClass,
  _Inout_   PVOID                    SystemInformation,
  _In_      ULONG                    SystemInformationLength,
  _Out_opt_ PULONG                   ReturnLength
);

매개 변수

SystemInformationClass [in]

검색할 시스템 정보의 유형입니다. 이 매개 변수는 SYSTEM_INFORMATION_CLASS 열거형 형식의 다음 값 중 하나일 수 있습니다.

SystemBasicInformation

SYSTEM_BASIC_INFORMATION 구조에서 시스템의 프로세서 수입니다. 대신 GetSystemInfo 함수를 사용합니다.

SystemPerformanceInformation

난수 생성기에 대해 예측할 수 없는 시드를 생성하는 데 사용할 수 있는 불투명 SYSTEM_PERFORMANCE_INFORMATION 구조체입니다. 대신 CryptGenRandom 함수를 사용합니다.

SystemTimeOfDayInformation

난수 생성기에 대해 예측할 수 없는 시드를 생성하는 데 사용할 수 있는 불투명 SYSTEM_TIMEOFDAY_INFORMATION 구조체입니다. 대신 CryptGenRandom 함수를 사용합니다.

SystemProcessInformation

시스템에서 실행되는 각 프로세스에 대해 하나씩 SYSTEM_PROCESS_INFORMATION 구조체의 배열입니다.

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

SystemProcessorPerformanceInformation

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

SystemInterruptInformation

난수 생성기에 대해 예측할 수 없는 시드를 생성하는 데 사용할 수 있는 불투명 SYSTEM_INTERRUPT_INFORMATION 구조체입니다. 대신 CryptGenRandom 함수를 사용합니다.

SystemExceptionInformation

난수 생성기에 대해 예측할 수 없는 시드를 생성하는 데 사용할 수 있는 불투명 SYSTEM_EXCEPTION_INFORMATION 구조체입니다. 대신 CryptGenRandom 함수를 사용합니다.

SystemRegistryQuotaInformation

SYSTEM_REGISTRY_QUOTA_INFORMATION 구조체입니다.

SystemLookasideInformation

난수 생성기에 대해 예측할 수 없는 시드를 생성하는 데 사용할 수 있는 불투명 SYSTEM_LOOKASIDE_INFORMATION 구조체입니다. 대신 CryptGenRandom 함수를 사용합니다.

SystemInformation [in, out]

요청된 정보를 수신하는 버퍼에 대한 포인터입니다. 이 정보의 크기와 구조는 다음 표에 표시된 것처럼 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_PERFORMANCE_INFORMATION

SystemInformationClass 매개 변수가 SystemPerformanceInformation인 경우 SystemInformation 매개 변수가 가리키는 버퍼는 난수 생성기에 대해 예측할 수 없는 시드를 생성하는 데 사용할 불투명 SYSTEM_PERFORMANCE_INFORMATION 구조를 보유할 수 있을 만큼 커야 합니다. 이를 위해 구조체에는 다음과 같은 레이아웃이 있습니다.

typedef struct _SYSTEM_PERFORMANCE_INFORMATION {
    BYTE Reserved1[312];
} SYSTEM_PERFORMANCE_INFORMATION;

구조체의 개별 멤버는 운영 체제에서 내부적으로 사용하도록 예약되어 있습니다.

CryptGenRandom 함수를 대신 사용하여 암호화 임의 데이터를 생성합니다.

SYSTEM_TIMEOFDAY_INFORMATION

SystemInformationClass 매개 변수가 SystemTimeOfDayInformation인 경우 SystemInformation 매개 변수가 가리키는 버퍼는 난수 생성기에 대해 예측할 수 없는 시드를 생성하는 데 사용할 불투명 SYSTEM_TIMEOFDAY_INFORMATION 구조를 보유할 수 있을 만큼 커야 합니다. 이를 위해 구조체에는 다음과 같은 레이아웃이 있습니다.

typedef struct _SYSTEM_TIMEOFDAY_INFORMATION {
    BYTE Reserved1[48];
} SYSTEM_TIMEOFDAY_INFORMATION;

구조체의 개별 멤버는 운영 체제에서 내부적으로 사용하도록 예약되어 있습니다.

CryptGenRandom 함수를 대신 사용하여 암호화 임의 데이터를 생성합니다.

SYSTEM_PROCESS_INFORMATION

SystemInformationClass 매개 변수가 SystemProcessInformation인 경우 SystemInformation 매개 변수가 가리키는 버퍼는 시스템에서 실행되는 프로세스만큼 많은 SYSTEM_PROCESS_INFORMATION 구조를 포함하는 배열을 포함할 수 있을 만큼 커야 합니다. 각 구조체에는 다음과 같은 레이아웃이 있습니다.

typedef struct _SYSTEM_PROCESS_INFORMATION {
    ULONG NextEntryOffset;
    ULONG NumberOfThreads;
    BYTE Reserved1[48];
    PVOID Reserved2[3];
    HANDLE UniqueProcessId;
    PVOID Reserved3;
    ULONG HandleCount;
    BYTE Reserved4[4];
    PVOID Reserved5[11];
    SIZE_T PeakPagefileUsage;
    SIZE_T PrivatePageCount;
    LARGE_INTEGER Reserved6[6];
} SYSTEM_PROCESS_INFORMATION;

NumberOfThreads 멤버에는 프로세스에서 현재 실행 중인 스레드의 총 수가 포함됩니다.

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

PeakPagefileUsage 멤버에는 프로세스에서 사용하는 페이지 파일 스토리지의 최대 바이트 수가 포함되며 PrivatePageCount 멤버에는 이 프로세스를 사용하기 위해 할당된 메모리 페이지 수가 포함됩니다.

GetProcessMemoryInfo 함수 또는 Win32_Process 클래스를 사용하여 이 정보를 검색할 수도 있습니다.

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

SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION

SystemInformationClass 매개 변수가 SystemProcessorPerformanceInformation인 경우 SystemInformation 매개 변수가 가리키는 버퍼는 시스템에 설치된 CPU(프로세서)만큼 SYSTEM_PROCESS_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 멤버에는 시스템이 유휴 상태인 시간(나노초의 1/100초)이 포함됩니다.

KernelTime 멤버에는 시스템이 커널 모드에서 실행하는 데 소요된 시간(모든 프로세스의 모든 스레드 포함, 모든 프로세서 포함)이 나노초의 1/100초 단위로 포함됩니다.

UserTime 멤버에는 시스템이 사용자 모드에서 실행하는 데 소요된 시간(모든 프로세스의 모든 스레드, 모든 프로세서 포함)이 나노초의 1/100초 단위로 포함됩니다.

대신 GetSystemTimes를 사용하여 이 정보를 검색합니다.

SYSTEM_INTERRUPT_INFORMATION

SystemInformationClass 매개 변수가 SystemInterruptInformation인 경우 SystemInformation 매개 변수가 가리키는 버퍼는 시스템에 설치된 CPU(프로세서)만큼 불투명한 SYSTEM_INTERRUPT_INFORMATION 구조를 포함하는 배열을 포함할 수 있을 만큼 커야 합니다. 각 구조체 또는 전체 배열을 사용하여 난수 생성기에 대해 예측할 수 없는 시드를 생성할 수 있습니다. 이를 위해 구조체에는 다음과 같은 레이아웃이 있습니다.

typedef struct _SYSTEM_INTERRUPT_INFORMATION {
    BYTE Reserved1[24];
} SYSTEM_INTERRUPT_INFORMATION;

구조체의 개별 멤버는 운영 체제에서 내부적으로 사용하도록 예약되어 있습니다.

CryptGenRandom 함수를 대신 사용하여 암호화 임의 데이터를 생성합니다.

SYSTEM_EXCEPTION_INFORMATION

SystemInformationClass 매개 변수가 SystemExceptionInformation인 경우 SystemInformation 매개 변수가 가리키는 버퍼는 난수 생성기에 대해 예측할 수 없는 시드를 생성하는 데 사용할 불투명 SYSTEM_EXCEPTION_INFORMATION 구조를 보유할 수 있을 만큼 커야 합니다. 이를 위해 구조체에는 다음과 같은 레이아웃이 있습니다.

typedef struct _SYSTEM_EXCEPTION_INFORMATION {
    BYTE Reserved1[16];
} SYSTEM_EXCEPTION_INFORMATION;

구조체의 개별 멤버는 운영 체제에서 내부적으로 사용하도록 예약되어 있습니다.

CryptGenRandom 함수를 대신 사용하여 암호화 임의 데이터를 생성합니다.

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_LOOKASIDE_INFORMATION

SystemInformationClass 매개 변수가 SystemLookasideInformation인 경우 SystemInformation 매개 변수가 가리키는 버퍼는 난수 생성기에 대해 예측할 수 없는 시드를 생성하는 데 사용할 불투명 SYSTEM_LOOKASIDE_INFORMATION 구조를 보유할 수 있을 만큼 커야 합니다. 이를 위해 구조체에는 다음과 같은 레이아웃이 있습니다.

typedef struct _SYSTEM_LOOKASIDE_INFORMATION {
    BYTE Reserved1[32];
} SYSTEM_LOOKASIDE_INFORMATION;

구조체의 개별 멤버는 운영 체제에서 내부적으로 사용하도록 예약되어 있습니다.

CryptGenRandom 함수를 대신 사용하여 암호화 임의 데이터를 생성합니다.

SystemInformationLength [in]

SystemInformation 매개 변수가 가리키는 버퍼의 크기(바이트)입니다.

ReturnLength [out, optional]

함수가 요청된 정보의 실제 크기를 쓰는 위치에 대한 선택적 포인터입니다. 해당 크기가 SystemInformationLength 매개 변수보다 작거나 같으면 함수는 정보를 SystemInformation 버퍼에 복사합니다. 그렇지 않으면 NTSTATUS 오류 코드를 반환하고 요청된 정보를 받는 데 필요한 버퍼 크기를 ReturnLength 로 반환합니다.

반환 값

NTSTATUS 성공 또는 오류 코드를 반환합니다.

NTSTATUS 오류 코드의 양식과 중요성은 DDK에서 사용할 수 있는 Ntstatus.h 헤더 파일에 나열되며 DDK 설명서에 설명되어 있습니다.

설명

ZwQuerySystemInformation 함수 및 반환하는 구조는 운영 체제 내부이며 Windows의 한 릴리스에서 다른 릴리스로 변경될 수 있습니다. 애플리케이션의 호환성을 유지하려면 앞에서 언급한 대체 함수를 대신 사용하는 것이 좋습니다.

ZwQuerySystemInformation을 사용하는 경우 런타임 동적 연결을 통해 함수에 액세스합니다. 이렇게 하면 함수가 운영 체제에서 변경되거나 제거된 경우 코드가 정상적으로 응답할 수 있습니다. 그러나 서명 변경은 검색할 수 없습니다.

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

요구 사항

요구 사항
DLL
Ntdll.dll

추가 정보

GetSystemInfo

GetProcessHandleCount

GetProcessMemoryInfo

GetSystemTimes

GetSystemRegistryQuota