본문 바로가기
Program

[Program] (윈도우 시스템 프로그래밍) 커널 오브젝트와 핸들의 관계

by snwo 2021. 4. 15.
부모 프로세스 A 핸들 테이블 자식 프로세스 B 핸들 테이블  운영체제
핸들 3 -> 프로세스 A 의 커널오브젝트 핸들 3 -> 프로세스 B 의 커널 오브젝트 프로세스 A 커널 오브젝트 (UC 2)
핸들 7 -> 프로세스 B 의 커널 오브젝트   프로세스 B 커널 오브젝트 (UC 2)
  핸들 4 -> 파일 커널 오브젝트 파일 커널 오브젝트 (UC 1)

UC -> usage count. 

프로세스 A 커널 오브젝트 UC 2 ( 프로세스 A 를 실행한 파일탐색기, 자기자신 )

프로세스 B 커널 오브젝트 UC 2 ( 부모프로세스, 자기 자신 )

파일 커널 오브젝트 UC 1 ( 프로세스 B )

 

핸들 값 ( 테이블 )은 프로세스에 종속적이다.

 

프로세스 B 가 종료되면, UC 가 감소할 뿐이지, 커널 오브젝트가 감소하는 것은 아니다.

UC 가 1이 될 뿐이다. 하지만 파일 커널 오브젝트의 UC 는 0이되어 소멸 된다.

( 물리적으로 파일이 사라지는 것은 아니다 )

 

GetCurrentProcess 함수는 자기 자신을 가리키는 상수값을 리턴한다.

 

CloseHandle( HANDLE hObject );

핸들테이블에 핸들정보 삭제, UC 감소

CreateProcess 함수를 호출하고 정보를 반환받기위해 넘겨준

PROCESS_INFORMATION 구조체변수의 멤버인 hProcess 를 넘겨주면 된다. (pi.hProcess)

 

프로세스 B가 종료되어도, 부모프로세스의 핸들테이블에는 남아있고, UC 가 0으로 감소하지 않아서 커널오브젝트가 소멸되지 않는데, 종료코드를 확인하고 핸들을 반환하기위해 사용한다.