Vienna

Chapter 8) 프로세스 간 통신(IPC) 2 - 핸들 테이블과 오브젝트 핸들의 상속 (1) 본문

그외/뇌를 자극하는 윈도우즈 시스템 프로그래밍

Chapter 8) 프로세스 간 통신(IPC) 2 - 핸들 테이블과 오브젝트 핸들의 상속 (1)

아는개발자 2023. 4. 21. 13:05

◇ 핸들과 커널 오브젝트의 리뷰

핸들을 통해서 다른 주소지에 할당되어있는 메일 슬롯에 접근이 가능하다.

어떻게 접근이 가능한 걸까?

나는 핸들의 개념이 소개되었을 때,
C#의 Dictionary 혹은 C++의 Map과 같은 구조로 관리되고 있지 않을까 생각이 들었다.
key값에는 Handle, 그리고 value에는 주소값이 저장된다면 이와 같은 관리가 가능하지 않을까?

 

프로세스의 핸들 테이블이란?

핸들 정보를 저장하고 있는 테이블

프로세스 별로 독립적이다. (각각의 프로세스가 자신만의 핸들 테이블을 하나씩 구성하고 관리)

 

https://vienna.tistory.com/32?category=1359267

 

Chapter 5) 프로세스 생성과 소멸 - 프로세스의 스케줄링과 상태 변화

CPU는 한 순간에 하나의 프로그램만 실행이 가능하다. == 동시에 둘 이상의 프로그램을 실행시킬 수 없다는 뜻. ■ 프로세스의 스케줄링(Scheduling) 하나의 CPU가 여러 개의 프로세스를 번갈아 가면

vienna.tistory.com

CreateProcess 함수의 5번째 전달 인자인 bInheritHandle을 통해 자식 프로세스에게 핸들 테이블에 등록되어있는 핸들 정보를 상속해 줄 것인지를 결정할 수 있다.

핸들의 상속 여부는 리소스가 생성되는 순간에 결정

프로세스가 핸들을 얻게 되었다는 의미는 핸들 테이블에 해당 핸들에 대한 정보가 갱신되었음을 의미하는 것
핸들 정보를 상속한다는 것은 프로세스 입장에서 보면 보안에 관련된 사항

 

typedef struct _SECURITY_ATTRIBUTES{
	DWORD nLength,	// 1
    LPVOID lpSecurityDescriptor,	// 2
    BOOL bInderitHandle	//3
} _SECURITY_ATTRIBUTES, *PSECURITY_ATTIRBUTES;

1. nLength

구조체 변수 크기를 바이트 단위로 설정

 

2. lpSecurityDescriptor

NULL로 초기화

 

3. bInheritHandle

상속 여부를 결정 짓는 요소.

Comments