커널이란 컴퓨터를 운영하는데 있어서 중심이 되는 운영체제 핵심 부분을 뜻한다
커널에서 관리하는 중요한 정보를 담아둔 데이터 블록을 가리켜 커널 오브젝트라 한다
프로세스 상태 정보(Running,Blocked, Ready)와 우선순위 정보를 변경될 때마다 갱신되어야 한다. 이렇듯 운영체제가 프로세스를 관리하기 위해서 프로세스에 관련된 몇몇 정보를 저장할 수 있어야 하고 참조 및 변경도 가능해야 한다. 이를 위해서 Windows 개발자들은 구조체 하나를 정의하기에 이른다. 편의상'프로세스관리구조체'라고 부르겠다.
프로세스가 생성될때마다 프로세스 관리 구조체 변수가 하나씩 생성되고 프로세스 정보들로 초기화 되는데 이것이 바로 커널 오브젝트의 정체이다
프로세스 내에서 프로그램 흐름을 구성하는 쓰레드를 생성할때에도 IPC(Inter Process Communication)를 위해 사용되는 파이프나 메일슬롯을 생성할 때에도 커널 오브젝트를 생성해서 필요한 정보들을 채워야만 한다. 뿐만 아니라 Windows에서는 파일을 생성할 때에도 커널 오브젝트가 생성된다.
커널 오브젝트의 종류에 따라서 서로 다른 구조체를 기반으로 생성된다
"Windows 운영체제는 프로세스, 쓰레드 혹은 파일과 같은 리소스 들을 원할히 관리하기 위해 필요한 정보를 저장해야 한다. 이때 데이터를 저장하는 메모리 블록을 가리켜 커널 오브젝트라 한다"
프로그래머가 직접 커널오브젝트를 조작할 수 없으나 함수 호출에 의한 간접적인 조작은 가능하다
MS에서는 시스템 함수를 사용해서 안정적인 방식으로 커널 오브젝트에 접근하기를 바라고 있다.
프로세스 우선순위 변경(Priority)변경
BOOL SetPriorityClass(Handle hProcess, DWORD dwPriorityClass)
핸들이란 커널 오브젝트에 할당되는 숫자에 지나지 않는다
위 함수가 제공하는 기능은 "hProcess 가 가리키는 프로세스의 우선순위를 dwPriorityClass 로 변경시킨다