NtQueryInformationProcess 함수(winternl.h)
[NtQueryInformationProcess는 향후 버전의 Windows에서 변경되거나 사용할 수 없습니다. 애플리케이션은 이 항목에 나열된 대체 함수를 사용해야 합니다.]
지정된 프로세스에 대한 정보를 검색합니다.
구문
__kernel_entry NTSTATUS NtQueryInformationProcess(
[in] HANDLE ProcessHandle,
[in] PROCESSINFOCLASS ProcessInformationClass,
[out] PVOID ProcessInformation,
[in] ULONG ProcessInformationLength,
[out, optional] PULONG ReturnLength
);
매개 변수
[in] ProcessHandle
정보를 검색할 프로세스에 대한 핸들입니다.
[in] ProcessInformationClass
검색할 프로세스 정보의 유형입니다. 이 매개 변수는 PROCESSINFOCLASS 열거형의 다음 값 중 하나일 수 있습니다.
값 | 의미 |
---|---|
|
지정된 프로세스가 디버그되고 있는지 여부를 확인하는 데 사용할 수 있는 PEB 구조체에 대한 포인터와 시스템에서 지정된 프로세스를 식별하는 데 사용하는 고유 값을 검색합니다.
CheckRemoteDebuggerPresent 및 GetProcessId 함수를 사용하여 이 정보를 가져옵니다. |
|
프로세스에 대한 디버거의 포트 번호인 DWORD_PTR 값을 검색합니다. 0이 아닌 값은 프로세스가 링 3 디버거의 제어 하에 실행되고 있음을 나타냅니다. |
|
프로세스가 WOW64 환경에서 실행 중인지 여부를 결정합니다(WOW64는 Win32 기반 애플리케이션을 64비트 Windows에서 실행할 수 있는 x86 에뮬레이터임).
IsWow64Process2 함수를 사용하여 이 정보를 가져옵니다. |
|
프로세스에 대한 이미지 파일의 이름을 포함하는 UNICODE_STRING 값을 검색합니다.
QueryFullProcessImageName 또는 GetProcessImageFileName 함수를 사용하여 이 정보를 가져옵니다. |
|
프로세스가 중요한 것으로 간주되는지 여부를 나타내는 ULONG 값을 검색합니다.
참고 이 값은 WINDOWS XP SP3부터 사용할 수 있습니다. Windows 8.1 IsProcessCritical을 대신 사용해야 합니다.
|
|
프로세스에 대한 메타데이터가 포함된 PROCESS_TELEMETRY_ID_INFORMATION_TYPE 값을 검색합니다. |
|
프로세스의 하위 시스템 유형을 나타내는 SUBSYSTEM_INFORMATION_TYPE 값을 검색합니다. ProcessInformation 매개 변수가 가리키는 버퍼는 단일 SUBSYSTEM_INFORMATION_TYPE 열거형을 보유할 수 있을 만큼 커야 합니다. |
[out] ProcessInformation
함수가 요청된 정보를 작성하는 호출 애플리케이션에서 제공하는 버퍼에 대한 포인터입니다. 기록된 정보의 크기는 ProcessInformationClass 매개 변수의 데이터 형식에 따라 달라집니다.
PROCESS_BASIC_INFORMATION
ProcessInformationClass 매개 변수가 ProcessBasicInformation인 경우 ProcessInformation 매개 변수가 가리키는 버퍼는 다음 레이아웃이 있는 단일 PROCESS_BASIC_INFORMATION 구조를 유지할 수 있을 만큼 커야 합니다.
typedef struct _PROCESS_BASIC_INFORMATION {
NTSTATUS ExitStatus;
PPEB PebBaseAddress;
ULONG_PTR AffinityMask;
KPRIORITY BasePriority;
ULONG_PTR UniqueProcessId;
ULONG_PTR InheritedFromUniqueProcessId;
} PROCESS_BASIC_INFORMATION;
필드 | 의미 |
---|---|
ExitStatus | GetExitCodeProcess가 반환하는 것과 동일한 값을 포함합니다. 그러나 명확성과 안전을 위해 GetExitCodeProcess 를 사용하는 것이 좋습니다. |
PebBaseAddress | PEB 구조를 가리킵니다. |
AffinityMask | DWORD로 캐스팅할 수 있으며 매개 변수에 대해 GetProcessAffinityMask가 반환하는 것과 동일한 값을 포함합니다.lpProcessAffinityMask |
BasePriority | 우선 순위 예약에 설명된 대로 프로세스 우선 순위를 포함합니다. |
UniqueProcessId | DWORD로 캐스팅할 수 있으며 이 프로세스에 대한 고유 식별자를 포함합니다. GetProcessId 함수를 사용하여 이 정보를 검색하는 것이 좋습니다. |
InheritedFromUniqueProcessId | DWORD로 캐스팅할 수 있으며 부모 프로세스에 대한 고유 식별자를 포함합니다. |
ULONG_PTR
ProcessInformationClass 매개 변수가 ProcessWow64Information인 경우 ProcessInformation 매개 변수가 가리키는 버퍼는 ULONG_PTR 저장할 수 있을 만큼 커야 합니다. 이 값이 0이 아닌 경우 프로세스가 WOW64 환경에서 실행됩니다. 그렇지 않으면 프로세스가 WOW64 환경에서 실행되고 있지 않습니다.
IsWow64Process2 함수를 사용하여 프로세스가 WOW64 환경에서 실행 중인지 여부를 확인합니다.
UNICODE_STRING
ProcessInformationClass 매개 변수가 ProcessImageFileName인 경우 ProcessInformation 매개 변수가 가리키는 버퍼는 문자열 자체뿐만 아니라 UNICODE_STRING 구조를 보유할 수 있을 만큼 커야 합니다. Buffer 멤버에 저장된 문자열은 이미지 파일의 이름입니다.
버퍼가 너무 작으면 STATUS_INFO_LENGTH_MISMATCH 오류 코드로 인해 함수가 실패하고 ReturnLength 매개 변수가 필요한 버퍼 크기로 설정됩니다.
[in] ProcessInformationLength
ProcessInformation 매개 변수가 가리키는 버퍼의 크기(바이트)입니다.
[out, optional] ReturnLength
함수가 요청된 정보의 크기를 반환하는 변수에 대한 포인터입니다. 함수가 성공하면 ProcessInformation 매개 변수가 가리키는 버퍼에 기록된 정보의 크기입니다(버퍼가 너무 작으면 정보를 성공적으로 수신하는 데 필요한 최소 버퍼 크기임).
반환 값
함수는 NTSTATUS 성공 또는 오류 코드를 반환합니다.
NTSTATUS 오류 코드의 양식과 중요성은 DDK에서 사용할 수 있는 Ntstatus.h 헤더 파일에 나열됩니다. 자세한 내용은 로깅 오류를 참조하세요.
설명
NtQueryInformationProcess 함수와 반환하는 구조는 운영 체제 내부이며 Windows의 한 릴리스에서 다른 릴리스로 변경될 수 있습니다. 애플리케이션의 호환성을 유지하려면 ProcessInformationClass 매개 변수에 대한 설명에 언급된 공용 함수를 대신 사용하는 것이 좋습니다.
NtQueryInformationProcess를 사용하는 경우 런타임 동적 연결을 통해 함수에 액세스합니다. 이렇게 하면 함수가 운영 체제에서 변경되거나 제거된 경우 코드가 정상적으로 응답할 수 있습니다. 그러나 서명 변경 내용을 검색할 수 없습니다.
이 함수에는 연결된 가져오기 라이브러리가 없습니다. LoadLibrary 및 GetProcAddress 함수를 사용하여 Ntdll.dll 동적으로 연결해야 합니다.
요구 사항
요구 사항 | 값 |
---|---|
대상 플랫폼 | Windows |
헤더 | winternl.h |
라이브러리 | ntdll.lib |
DLL | ntdll.dll |