본문 바로가기

Programming/Windows&C#

[Windows/WinAPI] WindowsAPI / DuplicateHandle

728x90
반응형

BOOL WINAPI DuplicateHandle( _In_   HANDLE hSourceProcessHandle,             -----① _In_   HANDLE hSourceHandle,                    -----② _In_   HANDLE hTargetProcessHandle,             -----③ _Out_  LPHANDLE lpTargetHandle,                 -----④ _In_   DWORD dwDesiredAccess,                 -----⑤ _In_   BOOL bInheritHandle,                     -----⑥ _In_   DWORD dwOptions                         -----⑦ );


함수 설명 :

실행중에 있는 프로세스의 핸들을 얻을때 GetCurrentProcess를 사용하여 얻는다. 하지만 이 핸들값음 Pseudo 핸들이라 하여 핸들 테이블에 있는 값이 아니기 때문이다. 따라서 DuplicateHandle을 이용하면 핸들 테이블에 있는 핸들값을 얻을 수있다.



1. hSourceProcessHandle :

복제할 핸들을 가지고 있는 프로세스를 지정한다. PROCESS_DUP_HANDLE 핸들 엑세스 권한이 있어야 한다. 


2. hSourceHandle :

복제할 핸들의 종류를 지정한다.


3. hTatgetProcessHandle :

복제된 핸들값을 소유할 프로세스를 지정한다. PROCESS_DUP_HANDLE 액세스 권한이 필요함.


4. lpTargetHandle :

복제된 핸들값을 리턴 받는다. 


5. dwDesiredAccess :

복제된 핸들의 접근 권한을 지정한다. 하지만 dwOption의 인자로 DUPLICATE_SAME_ACCESS을 지정할 경우 이 값은 무시된다.


6. bInheritHandle :

복제된 핸들의 상속 여부를 지정한다. TRUE면 자식에 상속되고 FALSE면 상속되지 않는다.


7. dwOption :


값 

의미 

DUPLICATE_CLOSE_SOURCE 

소스 핸들을 닫는다. 

DUPLICATE_SAME_ACCESS 

 dwDesiredAccess 을 무시한다. 중복 핸들은소스 핸들과 동일한 액세스 권한을 가진다.




반응형