프로그래밍/위도우 시스템
Win System Programming
Public Class
2020. 2. 28. 13:48
핸들테이블의 정보는 핸들번호, 커널오브젝트 주소, 상속여부가 있다.
부모 프로세스는 자식 프로세스에게 핸들정보를 상속 할 수 있다.
SECURITY_ATTRIBUTE sa; // 보안 관리자 보통 NULL을 넣었었다.
sa.nLength = sizeof(sa);
sa.IpSecurityDescriptor = NULL;
sa.bInheritHandle = TRUE; //핸들의 상속여부 YES 된다.
~~~
CreateMailslot(~~,~~,~~,&sa);
~~~.
GetCurrentProcess( )함수는 자신의 프로세스 핸들정보를 리턴한다 하지만 그 리턴값은 가짜인데 왜냐 핸들테이블에 실제 저장되어 있지 않기 때문이다. 만약 자식이 부모의 핸들정보를 받고 싶다면 부모가 상속하면 되지만 부모테이블에도 부모의 핸들정보가 없으므로 방법을 소개한다.
DuplicateHandle( A 핸들, 13, B핸들, &val, ...);
위코드를 보면 A 핸들테이블의 13번을 B프로 세스의 핸들테이블에 복사하겠다. 라는 의미이다.
A핸들은 GetCurrentProcess( ), 13도 GetCurrentProcess( ), B핸들은 프로세스 생성시 리턴받은 핸들값, &val은 복사된 핸들값이 리턴된다(다른 숫자로 바뀜) 이렇게 하면 부모의 핸들테이블 이 자식의 핸들테이블로 복사되는데 이렇게 되면
자식프로세스가 부모프로세스의 커널 오브젝트를 볼수 있으며 종료 되었는지 확인 할 수 있기 때문에 사용한다.