프로그래밍/위도우 시스템

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은 복사된 핸들값이 리턴된다(다른 숫자로 바뀜) 이렇게 하면 부모의 핸들테이블 이 자식의 핸들테이블로 복사되는데 이렇게 되면

자식프로세스가 부모프로세스의 커널 오브젝트를 볼수 있으며 종료 되었는지 확인 할 수 있기 때문에 사용한다.