목록Windows Via C++ (4)
embelog

1. 커널 오브젝트란 무엇인가? 커널이 리소스를 관리하기 위해 만든 구조체 데이터 블록. 여기서 말한 리소스는 프로세스/쓰레드/뮤텍스/파일 등등이 있다. 예를 들어 위 소스 코드 처럼, 프로세스가 파일 생성을 요청하면, OS는 파일을 생성하기 위한 메모리를 우선 할당하고, 더불어 파일을 관리하기 위한 메모리 또한 할당한다. 여기서 파일을 관리하기 위해 만들어 놓은 구조체를 커널 오브젝트라 한다. 여기서 파일을 관리하기 위해 만든 커널오브젝트의 정보에는 바이트 오프셋, 파일 공유 모드, 파일 오픈 모드 등등이 있다. 더불어, 프로세스 커널 오브젝트의 정보에는 프로세스 ID, 기본 우선 순위, 종료 코드 등등이 있다. 2. 커널 오브젝트 와 핸들 값 OS는 커널 오브젝트를 생성하고, 난 뒤 프로세스에게 커널..
Unicode 문자기반 함수를 사용하자. 1. WhY? * 어플리케이션 지역화에 용이하다. (다국가 언어 지원 용이) * ANSI 문자 기반 함수는 성능이 떨어진다. 2. ANSI 문자 기반 함수가 성능이 떨어지는 이유? * ANSI 기반 함수 호출 시 윈도우는 내부적으로 ANSI 기반 문자열을 Unicode 기반 문자열로 바꾼다. 이때, Unicode 를 위한 메모리 공간을 할당함으로서, 메모리 공간 낭비 발생 * 이후 Unicode 기반 문자열을 매개변수로, 윈도우는 ANSI 문자열 함수에 해당하는 Unicode 문자열 함수 호출 한다. (시간 낭비 발생) * 만약 ANSI 문자 기반 함수가 ANSI 문자열을 반환하는 함수라면, Unicode 문자열을 다시 ANSI 문자열로 반환해야 한다. 결과적으로..

1. 윈도우 함수의 대표적인 반환 자료형 자료형 실패했을때 값 BOOL FALSE, 결과 비교시 TRUE 가 아닌 FALSE 랑 비교 해야함 HANDLE NULL or INVALID_HANDLE_VALUE(-1) PVOID NULL LONG/DWORD 함수별로 각기 다름( SDK 문서 확인 필요) 2. 윈도우 함수 실패 시 에러코드 확인법 DOWRD GetLastError(); 에러코드를 확인하기 위해 GetLastError()함수를 호출한다. 에러코드는 함수를 호출한 쓰레드의 TLS에 저장되는데, GetLastError() 함수는 TLS로 부터 에러코드를 가져온다. 3. 윈도우 함수 실패 시 주의 사항 윈도함수 실패 시 바로 GetLastError 함수를 호출해야 한다. 실패 했음에도 불구하고, 에러코..

// Commit a page of storage PTSTR psZData = VirtualAlloc( NULL, // 선호 어드레스 없음 1024, // 1k byte 할당 요청 MEM_RESERVE | // 가상 어드레스 공간 예약 MEM_COMIT, // 물리적 저장소 할당 PAGE_READWRITE // 읽기 쓰기 가능 페이지 속성 ); 1. 요청한 공간만큼의 가상 메모리 공간을 예약하고 커밋한다. (1k byte 요청하였으나, 페이지 단위로 라운드업(4k byte) 하여 페이지 할당) 여기서 MEM_RESERVE 는 가상 메모리 공간을 예약하는 것을 말하고, MEM_COMIT 은 가상 메모리 공간에 물리적 저장소를 매핑하는 것을 말한다. Virtualloc 함수 실행 후 해당 물리저장소는 페이징..