1. Handle의 사용 이유
Resource
- 컴퓨터 시스템에서 사용되는 다양한 자원.
- 메모리로 관리되어집니다.
- 디바이스에 접근 가능한 정보들을 관리하는 객체를 Resource로 정의합니다.
- 크게 메모리, 파일 시스템, 디바이스, GUI, 프로세스, 스레드 등이 있습니다.
Handle의 사용 이유
Resource의 식별
- 운영체제에서 관리하는 Resource들은 메모리로 관리되어집니다.
- Handle을 통해 Resuorce들의 식별이 가능해집니다.
자원 보호 및 접근 제어
- 핸들은 보안과 접근 제어에 사용됩니다.
- 특정 Handle을 가진 프로세스나 쓰레드만이 해당 Resource에 접근할 수 있도록 제한할 수 있습니다.
- Resource에 대한 안전한 접근이 가능해집니다.
2. Handle의 정의와 유형
Handle의 정의
- WIN32 API에서 Handle은 운영체제에서 식별되고 제어되는 리소스들에 대한 참조를 나타냅니다.
- 핸들은 정수값으로 표현되어집니다.
Handle의 유형
HWND (Window Handle)
- Windows 운영체제에서 Window 들을 식별하는데 사용되는 핸들입니다.
HWND hwnd = CreateWindowEx(
0,
"MyWindowClass",
"My Window",
WS\_OVERLAPPEDWINDOW, 100, 100, 800,
600, NULL, NULL, hInstance, NULL
);
HDC (Device Context Handle)
- Device Context를 나타내는 Handle로 그래픽 출력을 다룰 때 사용됩니다.
HDC hdc = GetDC(hwnd);
// 윈도우 그리기 작업 수행
ReleaseDC(hwnd, hdc);
HINSTANCE(Instance Handle)
HINSTANCE
는 현재 실행 중인 프로그램의 인스턴스를 식별하는 핸들입니다. 주로 프로그램이 시작될 때WinMain
함수에 전달됩니다.
int WINAPI WinMain(
_In_ HINSTANCE hInstance,
_In_opt_ HINSTANCE hprevInstance,
_In_ LPSTR lpCmdLine,
_In_ int nCmdShow
)
HINSTANCE hInstance = GetModuleHandle(NULL);
HANDLE (일반적인)
- HANDLE은 다양한 윈도우 자원을 나타내는 일반적인 핸들 타입입니다.
- 파일, 프로세스, 쓰레드 등이 해당됩니다.
HANDLE hFile = CreateFile(
"example.txt",
GENERIC\_READ,
0, NULL, OPEN\_EXISTING,
FILE\_ATTRIBUTE\_NORMAL,
NULL
);
3. Handle의 사용
1. Resource Handle 획득
Resource를 사용하기 전에 Resource에 대한 Handle값을 얻어야 합니다.
Resource가 생성 전이라면 메모리에 생성됩니다. 이후 가상 메모리 공간에 실제 Resource 객체를 참조하는 객체가 생성됩니다.
생성되어 있다면 가상 메모리 공간에 Resource 객체를 참조하는 객체가 생성되고 Resource 객체를 가리킵니다.
Handle은 가상 메모리 공간에 존재하는 객체를 참조하는 정수형 주소 값입니다.
HWND hwnd = CreateWindowEx(
0, "MyWindowClass",
"My Window", WS\_OVERLAPPEDWINDOW,
100, 100, 800, 600, NULL, NULL,
hInstance, NULL
);
HANDLE hFile = CreateFile(
"example.txt", GENERIC\_READ,
0, NULL, OPEN\_EXISTING,
FILE\_ATTRIBUTE\_NORMAL, NULL
);
Window Handle과 File Handle을 획득하는 예시입니다
2. 리소스 사용 및 조작
// 윈도우 업데이트
UpdateWindow(hwnd);
// 파일 읽기
DWORD bytesRead;
char buffer\[100\];
ReadFile(
hFile, buffer, sizeof(buffer),
&bytesRead, NULL
);
획득한 Handle을 사용하여 Resource를 조작하거나 사용합니다.
3. 리소스 해제
// 윈도우 해제
DestroyWindow(hwnd);
// 파일 닫기
CloseHandle(hFile);
Resource들을 더 이상 사용하지 않을 때 Handle을 통해 해당 Resource들을 해제합니다.
'Win32 API' 카테고리의 다른 글
6. Win32 API - WindowClass (0) | 2024.02.24 |
---|---|
5. Win32 API - Event (0) | 2024.02.24 |
4. Win32 API - Message (0) | 2024.02.19 |
3. Win32 API - hInstance (0) | 2024.02.19 |
1. Win32 API - 코딩 규칙 (0) | 2024.02.19 |