OpenProcess Function
OpenProcess function (processthreadsapi.h)
Opens an existing local process object.
docs.microsoft.com
가. 존재하는 local process 개체를 open 한다.
Syntax
HANDLE OpenProcess(
DWORD dwDesiredAccess,
BOOL bInheritHandle,
DWORD dwProcessId
);
Parameters
(1) dwDesiredAccess
1) 프로세스 개체에 대한 접근 권한.
2) 이 접근 권한은 프로세스에 대한 보안 설명자에 반하는 것으로 확인된다.
3) 호출자가 SeDebugPrivilege 권한을 활성화한 경우, 보안 설명자의 contents와 관계없이 요청된 접근 권한이 부여된다.
(2) bInheritHandle
1) 이 값이 TRUE인 경우, 이 프로세스에 의해 생성된 프로세스들이 핸들을 상속받을 것이다.
2) 그렇지 않으면, 프로세스들은 핸들을 상속받지 않는다.
(3) dwProcessID
1) 오픈된 로컬 프로세스의 식별자.
2) 지정된 프로세스가 시스템 프로세스(0x00000000)인 경우, 함수는 fail 하고 마지막 error code는 ERROR_INVALID_PARAMETER이다.
3) 지정된 프로세스가 유휴 프로세스 또는 CSRSS 프로세스 중 하나일 경우, 접근 제한으로 인해 user-level code가 열리지 않기 때문에 그 함수는 fail하고 마지막 error code는 ERROR_ACCESS_DENIED이다.
이 함수에 대한 인자로 GetCurrentProcessid를 사용하는 경우, 성능 향상을 위해 OpenProcess 대신 GetCurrentProcess를 사용하는 것을 고려해라.
Return Value
(1) 함수가 성공하면, return value는 지정된 프로세스에 대해 열린 핸들이다.
(2) 함수가 실패하면, return value는 NULL이며 extended error information을 얻으려면 GetLastError를 호출해라.
Remarks
(1) 다른 로컬 프로세스에 대한 핸들을 열고 전체 액세스 권한을 얻기 위해서, SeDebugPrivilege 권한을 활성해야 한다.
자세한 내용은 Token에서 권한 변경을 참조해라.
(2) OpenProcess 함수에 의해 반환되는 핸들은 적절한 액세스 권한이 요청된 경우 wait functions 등 프로세스에 대한 핸들이 필요한 모든 기능에서 사용될 수 있다.
(3) 핸들을 종료할 때, CloseHandle 함수를 사용하여 핸들을 close해라.
Requirements
(1) Minimum supported client
Windows XP [desktop apps | UWP apps]
(2) Minimum sepported server
Windows Server 2003 [desktop apps | UWP apps]
(3) Target Platform
Windows
(4) Header
processthreadsapi.h (include Windows server 2003, Windows vista, Windows 7, Windows server 2008, Windows Server 2008 R2, Windows.h)
(5) Library
Kernel32.lib
(6) DLL
Kernel32.dll