120114 windows viacpp_03
-
Upload
steve-hansol-kim -
Category
Documents
-
view
1.119 -
download
1
Transcript of 120114 windows viacpp_03
![Page 2: 120114 windows viacpp_03](https://reader036.fdocuments.net/reader036/viewer/2022062405/5563a557d8b42a01658b542b/html5/thumbnails/2.jpg)
커널 오브젝트를 알기 전에 ..
커널 ?
![Page 3: 120114 windows viacpp_03](https://reader036.fdocuments.net/reader036/viewer/2022062405/5563a557d8b42a01658b542b/html5/thumbnails/3.jpg)
네이버 백과사전에 의하면…
![Page 4: 120114 windows viacpp_03](https://reader036.fdocuments.net/reader036/viewer/2022062405/5563a557d8b42a01658b542b/html5/thumbnails/4.jpg)
네이버 백과사전에 의하면…
즉 , 커널 오브젝트를 관리하는 운영체제의 핵심요소
![Page 5: 120114 windows viacpp_03](https://reader036.fdocuments.net/reader036/viewer/2022062405/5563a557d8b42a01658b542b/html5/thumbnails/5.jpg)
커널 오브젝트 ?
프로세스 오브젝트스레드 오브젝트잡 오브젝트IOCP 오브젝트세마포어 오브젝트뮤텍스 오브젝트
…… ETC
![Page 6: 120114 windows viacpp_03](https://reader036.fdocuments.net/reader036/viewer/2022062405/5563a557d8b42a01658b542b/html5/thumbnails/6.jpg)
커널 오브젝트 ?
• 자원을 사용하기 위해 커널에 의해 할당된 간단한 메모리 블럭 .
• 메모리 블록에는 커널 오브젝트에 대한 세부정보 포함 .
• 커널에 의해서만 접근이 가능한 구조체로 구성 .
• 커널 오브젝트의 소유자는 프로세스가 아닌 커널 .
![Page 7: 120114 windows viacpp_03](https://reader036.fdocuments.net/reader036/viewer/2022062405/5563a557d8b42a01658b542b/html5/thumbnails/7.jpg)
자원커널애플리케이션
자원 1
자원 2
자원 3
…
…커널
오브젝트 1
커널오브젝트 2
커널오브젝트 3
…
…핸들 1
핸들 2
핸들 3
…
…
![Page 8: 120114 windows viacpp_03](https://reader036.fdocuments.net/reader036/viewer/2022062405/5563a557d8b42a01658b542b/html5/thumbnails/8.jpg)
사용 카운트
보안 디스크립터
타입에 따른 고유의 정보
커널 오브젝트
![Page 9: 120114 windows viacpp_03](https://reader036.fdocuments.net/reader036/viewer/2022062405/5563a557d8b42a01658b542b/html5/thumbnails/9.jpg)
사용 카운트
보안 디스크립터
타입에 따른 고유의 정보
커널 오브젝트• 레퍼런스 카운트와 비슷 • 커널 오브젝트가 생성되거나 다른 프로세스가 접근 권한을 획득하면 1 증가 .
• CloseHandle() 함수를 이용하거나 프로세스가 종료 되면 1 감소
• 이거시 0 이 되면 커널 오브젝트 삭제 !!
![Page 10: 120114 windows viacpp_03](https://reader036.fdocuments.net/reader036/viewer/2022062405/5563a557d8b42a01658b542b/html5/thumbnails/10.jpg)
사용 카운트
보안 디스크립터
타입에 따른 고유의 정보
커널 오브젝트
• 커널 오브젝트의 소유자 , 접근권한 / 제한 정보 .
• 주로 서버 개발에 사용 . Private Namespace 추가로 클라이언트 사용 .........?
![Page 11: 120114 windows viacpp_03](https://reader036.fdocuments.net/reader036/viewer/2022062405/5563a557d8b42a01658b542b/html5/thumbnails/11.jpg)
Create* 함수 매개변수
![Page 12: 120114 windows viacpp_03](https://reader036.fdocuments.net/reader036/viewer/2022062405/5563a557d8b42a01658b542b/html5/thumbnails/12.jpg)
보안 주의 사항
• 보안 접근 플래그를 간과하지 말 것 .
올바른 플래그 사용하면 다른 윈도우 버전으로 포팅이 쉬워짐 .
EX) 사용자 계정 컨트롤 (UAC)
![Page 13: 120114 windows viacpp_03](https://reader036.fdocuments.net/reader036/viewer/2022062405/5563a557d8b42a01658b542b/html5/thumbnails/13.jpg)
커널 오브젝트 핸들 테이블 ?
• 프로세스가 초기화 되면 커널 오브젝트 핸들 테이블 할당 . ( 데이터 구조체 배열 )
• 프로세스 별로 핸들이 독립적으로 유지 . • 유저오브젝트나 GDI 오브젝트 는 사용되지 않는 Only 커널 오브젝트를 위한 테이블 .
• MS 는 핸들 테이블 구조와 관리방법등을 문서화 X
![Page 14: 120114 windows viacpp_03](https://reader036.fdocuments.net/reader036/viewer/2022062405/5563a557d8b42a01658b542b/html5/thumbnails/14.jpg)
인덱스
커널 오브젝트 메모리 포인터
액세스 마스크
플래그
1 0x00000000 0x???????? 0x????????
2 0x00000000 0x???????? 0x????????
… … … ..Create 호출
커널 오브젝트 할당 또는 기존 오브젝트 반환(0xF0000001)
인덱스
커널 오브젝트 메모리 포인터
액세스 마스크
플래그
1 0xF0000001 0x???????? 0x00000000
2 0x00000000 0x???????? 0x????????
… … … ..
커널 오브젝트 생성
테이블에 등록된
핸들반환
사용 카운트 + 1
![Page 15: 120114 windows viacpp_03](https://reader036.fdocuments.net/reader036/viewer/2022062405/5563a557d8b42a01658b542b/html5/thumbnails/15.jpg)
커널 오브젝트 생성
• Create 함수로 반환되는 핸들을 (/ 4) 나 (>>2) 하면 커널 오브젝트 테이블의 인덱스를 얻을 수 있음 .
• 대부분의 Create 함수 실패 -> return NULL; CreateFile 같은 함수 실패 -> INVALID_HANDLE_VALUE; 주의 요망 .
![Page 16: 120114 windows viacpp_03](https://reader036.fdocuments.net/reader036/viewer/2022062405/5563a557d8b42a01658b542b/html5/thumbnails/16.jpg)
인덱스
커널 오브젝트 메모리 포인터
액세스 마스크
플래그
1 0xF0000001 0x???????? 0x00000000
2 0x00000000 0x???????? 0x????????
… … … ..CloseHandle()
사용 카운트가 0 이면 삭제 .(0xF0000001)
인덱스
커널 오브젝트 메모리 포인터
액세스 마스크
플래그
1 0x00000000 0x???????? 0x????????
2 0x00000000 0x???????? 0x????????
… … … ..
커널 오브젝트 삭제
사용 카운트 - 1
핸들 테이블에서 “핸들 “삭제
![Page 17: 120114 windows viacpp_03](https://reader036.fdocuments.net/reader036/viewer/2022062405/5563a557d8b42a01658b542b/html5/thumbnails/17.jpg)
프로세스 별로 독립적 ?다른 프로세스에서 같은 커널 오브젝트를 쓰고 싶은데…
프로세스간 같은 파일 매핑 오브젝트나 뮤텍스를 쓰고 싶다면 ?
![Page 18: 120114 windows viacpp_03](https://reader036.fdocuments.net/reader036/viewer/2022062405/5563a557d8b42a01658b542b/html5/thumbnails/18.jpg)
프로세스간 커널 오브젝트의 공유
1. 오브젝트 핸들의 상속 이용
2. 명명된 오브젝트 사용
3. 오브젝트 핸들의 복사 이용
![Page 19: 120114 windows viacpp_03](https://reader036.fdocuments.net/reader036/viewer/2022062405/5563a557d8b42a01658b542b/html5/thumbnails/19.jpg)
오브젝트 핸들의 상속 이용
![Page 20: 120114 windows viacpp_03](https://reader036.fdocuments.net/reader036/viewer/2022062405/5563a557d8b42a01658b542b/html5/thumbnails/20.jpg)
오브젝트 핸들의 상속 이용
인덱스
커널 오브젝트 메모리 포인터
액세스 마스크
플래그
1 0xF0000001 0x???????? 0x00000000
2 0x00000000 0x???????? 0x????????
3 0xF0000010 0x???????? 0x00000001
bIn-heritHandle == TRUE
인덱스
커널 오브젝트 메모리 포인터
액세스 마스크
플래그
1 0x00000000 0x???????? 0x????????
2 0x00000000 0x???????? 0x????????
3 0xF0000010 0x???????? 0x00000001
Parent Process
Child Process
정확히 같은 위치에 복사
![Page 21: 120114 windows viacpp_03](https://reader036.fdocuments.net/reader036/viewer/2022062405/5563a557d8b42a01658b542b/html5/thumbnails/21.jpg)
오브젝트 핸들의 상속 이용
조건 및 제한
• Parent Process 와 Child Process 간에만 가능
• 새로 생성되는 Child Process 만 가능
• Child Process 는 어떤 핸들이 상속되었는지 모름 알려줘야만 쓸 수 있다 .
![Page 22: 120114 windows viacpp_03](https://reader036.fdocuments.net/reader036/viewer/2022062405/5563a557d8b42a01658b542b/html5/thumbnails/22.jpg)
오브젝트 핸들의 상속 이용
![Page 23: 120114 windows viacpp_03](https://reader036.fdocuments.net/reader036/viewer/2022062405/5563a557d8b42a01658b542b/html5/thumbnails/23.jpg)
명명된 오브젝트 사용
Create 호출 커널 오브젝트 이름 검사
커널 오브젝트 타입 검사 핸들 반환
![Page 24: 120114 windows viacpp_03](https://reader036.fdocuments.net/reader036/viewer/2022062405/5563a557d8b42a01658b542b/html5/thumbnails/24.jpg)
오브젝트 핸들 복사
복사 옵션DUPLICATE_SAME_ACCESS Source 와 동일한 엑세스 마스크
( 보안 플래그 무시 )
DUPLICATE_CLOSE_SOURCE 이동 .
![Page 25: 120114 windows viacpp_03](https://reader036.fdocuments.net/reader036/viewer/2022062405/5563a557d8b42a01658b542b/html5/thumbnails/25.jpg)
인덱스
커널 오브젝트 메모리 포인터
액세스 마스크
플래그
1 0xF0000001 0x???????? 0x00000000
2 0x00000000 0x???????? 0x????????
3 0xF0000010 0x???????? 0x00000001인덱
스커널 오브젝트 메모리 포인터
액세스 마스크
플래그
1 0x00000000 0x???????? 0x????????
2 0xF0000030 0x???????? 0x00000000
3 0x00000000 0x???????? 0x????????
Source Process
복사 전 Target Process
Source Han-dle
인덱스
커널 오브젝트 메모리 포인터
액세스 마스크
플래그
1 0xF0000010 0x???????? 0x00000001
2 0xF0000030 0x???????? 0x00000000
3 0x00000000 0x???????? 0x????????
복사 후 Target Process
Target Handle
![Page 26: 120114 windows viacpp_03](https://reader036.fdocuments.net/reader036/viewer/2022062405/5563a557d8b42a01658b542b/html5/thumbnails/26.jpg)
오브젝트 핸들 복사
Target Process 는 복사된 커널 오브젝트를
사용할 수 있다는 통보를 받지 못하므로
윈도우 메시지나 프로세스간 통신 메커니즘으로
핸들을 전달해야 한다 .