IT/System & Network
오브젝트 핸들(HANDLE)을 이용한 커널 오브젝트 조작 함수
Hotman
2011. 8. 10. 00:43
커널 오브젝트(Kernel Object) :
Windows 운영체제가 프로세스, 스레드, 파일과 같은 리소스들을 원활히 관리하기 위해 필요한 정보가 저장된
메모리 블록.
오브젝트 핸들(HANDLE)을 이용한 커널 오브젝트 조작
- 프로세스 우선 순위 변경
- 프로세스의 핸들 정보 알아내기
- 해당 프로세스의 핸들을 얻어 Priority 값을 다음과 같이 변경 시킨다.
- PROCESS_INFORMATION 구조체
- CloseHandle 함수
ex)
BOOL SetPriorityClass( HANDLE hProcess, // 우선 순위를 변경할 프로세스의 핸들 전달 DWORD dwpriorityClass // 새롭게 적용할 우선순위 정보 전달 ); // if the function fails, the return value is zero.// if the function fails, the return value is zero.
- 프로세스의 핸들 정보 알아내기
HANDLE GetCurrentProcess( VOID );
- 해당 프로세스의 핸들을 얻어 Priority 값을 다음과 같이 변경 시킨다.
SetPriorityClass(GetCurrentProcess(), HIGH_PRIORITY_CLASS
- PROCESS_INFORMATION 구조체
typedef struct _PROCESS_INFORMATION { HANDLE hProcess; // 프로세스 핸들 HANDLE hThread; // 스레드 핸들 DWORD dwProcessId; // 프로세스 ID DWORD dwThreadId; // 스레드 ID } PROCESS_INFORMATION;새로운 프로세스 생성시 PROCESS_INFORMATION 구조체의 변수의 주소값을 인자로 전달하면서 PROCESS_ INFORMATION 구조체의 첫 번재 멤버 hProcess는 새로 생성된 프로세스의 핸들 정보로 채워진다. ** 프로세스 핸들은 프로세스의 커널 오브젝트를 가리키기 위한 것이고, 프로세스 ID는 커널 오브젝트가 아니 라 프로세스 자체를 구분짓기 위한 것이다.
- CloseHandle 함수
BOOL CloseHandle( HANDLE hObject ); If the funciotn succeeds the return value is nonzero.
ex)
#include#include #include int _tmain(int argc, TCHAR* argv[]) { STARTUPINFO si={0,}; PROCESS_INFORMATION pi; si.cb = sizeof(si); TCHAR command = _T("calc.exe"); CreateProcess( NULL, command, NULL, NULL, TRUE, 0, NULL, NULL, &si, &pi ); CloseHandle(pi.hProcess); return 0; } ** CloseHandle() 함수는 핸들을 닫는 기능(반환하는 기능)을 하는 역할을 한다. 커널 오브젝트 소멸이 아님.