Usage Count 란?
자식 프로세스의 종료코드는 커널 오브젝트에 저장된다.
만약 자식 프로세스가 종료될 시 커널 오브젝트도 동시에 소멸되면
부모 프로세스는 종료코드를 얻을 수 없게 된다.
커널 오브젝트를 참조하는 대상이 하나도 없을 때 소멸하는 것이 가장 인상적이며
이것이 윈도우스가 오브젝트 소멸시기를 결정하는 방식이다.
즉 커널 오브젝트를 참조하는 프로세스가 하나라도 존재할 시
커널 오브젝트는 소멸되지 않는다.
윈도우 운영체제는 이것을 위해 Usage count(참조횟수) 를 관리하며,
이것이 0이 될 시 커널 오브젝트를 소멸한다.
또한 커널 오브젝트에 접근 가능한 핸들 개수가 증가 될때 마다 늘어난다.
그러므로 부모 프로세스가 CreateProcess 함수 호출 과정에
자식 프로세스의 핸들을 얻기 때문에 ( PROCESS_INFORMATION )
자식 프로세스 생성이 완료되면 Usage Count 는 2가 된다.
자식 프로세스는 GetCurrentProcess 함수를 통해
언제든지 자신의 커널 오브젝트 참조를 위한 핸들을 얻을 수 있다.
UsageCount 는 커널 오브젝트의 멤버로 존재한다.
즉 CloseHandle() 함수는 핸들을 반환하면서 커널 오브젝트의 UsageCount를 하나 감소 시키는
기능을 가지고 있으며, 또한 프로세스 및 쓰레드도 프로세스가 종료되는 시점에
Usage Count가 하나 감소한다.
BOOL WINAPI GetExitCodeProcess( //종료코드를 얻는다.
__in HANDLE hProcess,
__out LPDWORD lpExitCode
);
// TerminateProcess() //악성코드 제거를 위해서만 사용할 것.
//입출력도중 사용시 굉장한 오류가 발생!! 사용자제할 것.
BOOL WINAPI TerminateProcess(
__in HANDLE hProcess,
__in UINT uExitCode
);
'Windows > System Programming' 카테고리의 다른 글
커널 오브젝트의 두 가지 상태 (0) | 2011.08.12 |
---|---|
메일슬롯과 IPC 에 대한 고찰 (0) | 2011.08.12 |
메일슬롯 (MailSlot) 의 예 (0) | 2011.08.12 |
IPC 란? (Inter - Process - Communication) (0) | 2011.08.12 |
다양한 문자셋 (0) | 2011.07.16 |