Share via


ZwQueryInformationProcess 함수

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

지정된 프로세스에 대한 정보를 검색합니다.

구문

NTSTATUS WINAPI ZwQueryInformationProcess(
  _In_      HANDLE           ProcessHandle,
  _In_      PROCESSINFOCLASS ProcessInformationClass,
  _Out_     PVOID            ProcessInformation,
  _In_      ULONG            ProcessInformationLength,
  _Out_opt_ PULONG           ReturnLength
);

매개 변수

ProcessHandle [in]

정보를 검색할 프로세스에 대한 핸들입니다.

ProcessInformationClass [in]

검색할 프로세스 정보의 유형입니다. 이 매개 변수는 PROCESSINFOCLASS 열거형에서 다음 값 중 하나일 수 있습니다.

의미
ProcessBasicInformation
0
지정된 프로세스가 디버그되고 있는지 여부를 확인하는 데 사용할 수 있는 PEB 구조체에 대한 포인터와 시스템에서 지정된 프로세스를 식별하는 데 사용하는 고유 값을 검색합니다.
CheckRemoteDebuggerPresentGetProcessId 함수를 사용하여 이 정보를 가져오는 것이 가장 좋습니다.
ProcessDebugPort
7
프로세스에 대한 버거의 포트 번호인 DWORD_PTR 값을 검색합니다. 0이 아닌 값은 프로세스가 링 3 디버거의 제어 하에 실행되고 있음을 나타냅니다.
CheckRemoteDebuggerPresent 또는 IsDebuggerPresent 함수를 사용하는 것이 가장 좋습니다.
ProcessWow64Information
26
프로세스가 WOW64 환경에서 실행 중인지 여부를 결정합니다(WOW64는 Win32 기반 애플리케이션이 64비트 Windows에서 실행되도록 허용하는 x86 에뮬레이터임).
IsWow64Process 함수를 사용하여 이 정보를 가져오는 것이 가장 좋습니다.
ProcessImageFileName
27
프로세스에 대한 이미지 파일의 이름을 포함하는 UNICODE_STRING 값을 검색합니다.
ProcessBreakOnTermination
29
프로세스가 중요한 것으로 간주되는지 여부를 나타내는 ULONG 값을 검색합니다.
참고: 이 값은 WINDOWS XP에서 SP3로 시작하는 데 사용할 수 있습니다. Windows 8.1 IsProcessCritical을 대신 사용해야 합니다.
ProcessProtectionInformation
61
보호된 프로세스의 유형과 보호된 프로세스 서명자를 나타내는 BYTE 값을 검색합니다.

 

ProcessInformation [out]

함수가 요청된 정보를 쓰는 호출 애플리케이션에서 제공하는 버퍼에 대한 포인터입니다. 기록된 정보의 크기는 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 환경에서 실행됩니다. 그렇지 않으면 값이 0과 같으면 프로세스가 WOW64 환경에서 실행되지 않습니다.

IsWow64Process 함수를 사용하여 프로세스가 WOW64 환경에서 실행 중인지 여부를 확인하는 것이 가장 좋습니다.

UNICODE_STRING

ProcessInformationClass 매개 변수가 ProcessImageFileName인 경우 ProcessInformation 매개 변수가 가리키는 버퍼는 문자열 자체뿐만 아니라 UNICODE_STRING 구조를 보유할 수 있을 만큼 커야 합니다. Buffer 멤버에 저장된 문자열은 이미지 파일의 이름입니다.

버퍼가 너무 작으면 STATUS_INFO_LENGTH_MISMATCH 오류 코드로 인해 함수가 실패하고 ReturnLength 매개 변수가 필요한 버퍼 크기로 설정됩니다.

PS_PROTECTION

ProcessInformationClass 매개 변수가 ProcessProtectionInformation인 경우 ProcessInformation 매개 변수가 가리키는 버퍼는 다음 레이아웃이 있는 단일 PS_PROTECTION 구조를 유지할 수 있을 만큼 커야 합니다.

typedef struct _PS_PROTECTION {
    union {
        UCHAR Level;
        struct {
            UCHAR Type   : 3;
            UCHAR Audit  : 1;                  // Reserved
            UCHAR Signer : 4;
        };
    };
} PS_PROTECTION, *PPS_PROTECTION;

처음 3비트에서는 보호된 프로세스의 형식을 포함합니다.

typedef enum _PS_PROTECTED_TYPE {
    PsProtectedTypeNone = 0,
    PsProtectedTypeProtectedLight = 1,
    PsProtectedTypeProtected = 2
} PS_PROTECTED_TYPE, *PPS_PROTECTED_TYPE;

상위 4비트에는 보호된 프로세스 서명자가 포함됩니다.

typedef enum _PS_PROTECTED_SIGNER {
    PsProtectedSignerNone = 0,
    PsProtectedSignerAuthenticode,
    PsProtectedSignerCodeGen,
    PsProtectedSignerAntimalware,
    PsProtectedSignerLsa,
    PsProtectedSignerWindows,
    PsProtectedSignerWinTcb,
    PsProtectedSignerWinSystem,
    PsProtectedSignerApp,
    PsProtectedSignerMax
} PS_PROTECTED_SIGNER, *PPS_PROTECTED_SIGNER;

ProcessInformationLength [in]

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

ReturnLength [out, optional]

함수가 요청된 정보의 크기를 반환하는 변수에 대한 포인터입니다. 함수가 성공한 경우 ProcessInformation 매개 변수가 가리키는 버퍼에 기록된 정보의 크기이지만 버퍼가 너무 작으면 정보를 성공적으로 수신하는 데 필요한 최소 버퍼 크기입니다.

반환 값

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

NTSTATUS 오류 코드의 양식과 중요성은 DDK에서 사용할 수 있는 Ntstatus.h 헤더 파일에 나열되며, 드라이버 아키텍처/디자인 가이드/드라이버 프로그래밍 기술/로깅 오류 Kernel-Mode DDK 설명서에 설명되어 있습니다.

설명

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

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

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

요구 사항

요구 사항
지원되는 최소 클라이언트
Windows XP [데스크톱 앱만 해당]
지원되는 최소 서버
Windows Server 2003 [데스크톱 앱만 해당]
DLL
Ntdll.dll

추가 정보

CheckRemoteDebuggerPresent

GetProcessId

IsDebuggerPresent

IsWow64Process