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
상속 여부를 결정 짓는 요소.
'그외 > 뇌를 자극하는 윈도우즈 시스템 프로그래밍' 카테고리의 다른 글
Chapter 8) 프로세스 간 통신(IPC) 2 - Pseudo 핸들과 핸들의 중복(Duplicate) (0) | 2023.04.26 |
---|---|
Chapter 8) 프로세스 간 통신(IPC) 2 - 핸들 정보의 상속 (0) | 2023.04.26 |
Chapter 7) 프로세스 간 통신(IPC) 1 - Signaled vs Non-Signaled (0) | 2023.04.20 |
Chapter 7) 프로세스 간 통신(IPC) 1 - 메일슬롯 방식의 IPC (0) | 2023.04.19 |
Chapter 7) 프로세스 간 통신(IPC) 1 - IPC의 의미 (0) | 2023.04.18 |
Comments