Book Blog by pyrasis @ 07-03 [10:52 pm]
2009년 말부터 지금까지 많은 일들이 있었습니다. 다니던 회사도 옮기게 되었고, 새 회사로 오고 나서도 우여곡절이 많았습니다. 다행히 프로젝트를 매우 체계적으로 진행하는 곳에서 일을 할 수 있게 되었습니다. 그 무엇보다도 소프트웨어 개발팀은 팀장이 매우 중요하다는 것을 몸소 체험할 수 있었습니다.
by pyrasis @ 01-04 [04:33 pm]
안녕하세요. 이재홍입니다.윈도우 프로젝트 필수 유틸리티 Subversion, Trac, CruiseControl.NET에는 420페이지 "날짜를 버전으로 사용하기" 부분이 있습니다.이제 2010년이 되었습니다. 하지만 책에 나와있는 PowerShell 스크립트 rcversion-date.ps1, tracversion-date.ps1은 2009년까지만 정상 동작하도록 되어 있습니다.자세한 수정 방법은 윈도우 프로젝트 필수 유틸리티 추가팁 2010년 이..
by pyrasis @ 08-27 [10:29 pm]
오늘은 PYRASIS.COM(피라시스닷컴)이 문을 연지 6년째 되는 날입니다.어쩌다 보니 5주년은 그냥 넘어가버렸습니다.앞으로 더 나은 기술 정보를 제공할 수 있도록 노력하겠습니다. 감사합니다.
by pyrasis @ 08-09 [09:38 pm]
포팅 작업을 할 때 의외로 중요한 부분이 시간에 관련된 부분입니다. 별것 아닌것 같지만 특정 시간 주기로 루틴이 실행된다던가, 데이터에 시간이 포함된다면 시간 함수 처리를 잘못하면 포팅을 하고 나서도 제대로 동작이 되지 않을 때가 많습니다.먼저 포팅에 앞서 유저 모드와 커널 모드의 시간 처리 기준에 대해 이해할 필요가 있습니다. - 유저 모드 : 밀리초, 100나노초 - 커널 모드 : 100나노초따라서 유저 모드와 커널 모드의 처리 기준이 다르다면..
by pyrasis @ 08-09 [12:27 am]
Windows Driver Kit(WDK) 7.0.0 정식 버전이 발표되었습니다.이번 WDK 7.0.0은 Windows 7에 대응하는 버전입니다. 7.0.0 버전 부터는 Windows 2000 지원이 제외되었습니다. 그동안 Microsoft Connect를 통해서 WDK 베타 버전을 받을 수 있었지만, 이제부터 Microsoft Connect를 통하지 않고 Microsoft Download 페이지에서 직접 받을 수 있습니다.WDK 공식 페이지 : h..
by pyrasis @ 07-25 [08:30 pm]
커널 모드 드라이버에서 큰 비중을 차지하는 부분은 아무래도 동기화 객체 부분일 것입니다.유저 모드에서 사용할 수 있는 동기화 객체는 커널 오브젝트인 것도 있고 아닌 것도 있습니다. 커널 오브젝트로 존재하는 동기화 객체는 커널 모드 함수를 사용하여 구현을 하고, 그렇지 않은 경우 대체할 수 있는 함수를 사용하여 구현합니다.하지만 어떻게 해서든 유저 모드와 동일하게 구현하기 어려운 경우가 있습니다. 이 때에는 불가피하게 원본 소스 코드를 수정하여, 커널..
by pyrasis @ 07-22 [12:02 am]
이번에는 가장 기본적인 메모리 할당 함수를 구현해보도록 하겠습니다.유저 모드에서는 보통 CRT 함수인 malloc을 많이 사용합니다. 또한 HeapAlloc, LocalAlloc 등의 함수들도 사용됩니다.커널 모드에서는 이 함수들을 ExAllocatePoolWithTag 함수로 대체할 수 있습니다. 단 한가지 주의해야 할 점은 유저 모드에서는 IRQL 이라는 개념이 없기 때문에 메모리 함수 호출에 아무런 제약이 없습니다. 하지만 커널 모드에서는 IR..
by pyrasis @ 07-20 [11:29 pm]
이제부터는 호환 레이어 위에서 각 기능들을 구현할 차례입니다. 이번에는 파일 I/O 함수 구현 방법에 대해 알아보도록 하겠습니다.유저 모드에서 사용할 수 있는 파일 I/O 함수는, 똑같이 커널 모드에서도 사용할 수 있습니다. 당연한 말이겠지만, 커널 모드에서 파일 I/O 함수를 제공해 주기 때문에 유저 모드에서 사용할 수 있는 것입니다. 실제로 유저 모드에서 사용하는 함수들은 빈 껍데기일 뿐입니다. 실제로는 커널 모드 함수가 모든 일을 처리합니다.따..
by pyrasis @ 07-17 [10:32 pm]
포팅을 쉽게 하려면 원본 소스 코드를 최소한으로 수정해야 합니다. WDK에 없는 함수를 구현할 호환 레이어를 작성해야 합니다.이제 부터 매크로와 인라인 함수를 이용하여 에러를 막았던 부분을 구현해줄 차례입니다. 호환 레이어는 호환 레이어 소스를 원본 소스 코드 빌드 설정에 추가하는 것도 좋지만, lib(라이브러리) 형태로 작성하는 것이 편리합니다.[CODE type=C]TARGETNAME=libcompatTARGETTYPE=LIBRARYSOURCES= \ io...
by pyrasis @ 07-12 [05:47 pm]
커널 모드 포팅 작업에서 가장 중요한 것은 빌드(컴파일)하기 입니다.포팅을 결심하고나서도 컴파일 할 때의 무수한 에러와 경고 때문에, 대부분 이 단계에서 포기를 하게 됩니다.유저 모드에서 동작하던 프로그램들은 빌드 환경이 Visual Studio 및 Platform SDK에 맞추어져 있습니다. 따라서 이 부분을 WDK(DDK) 환경에 맞게 수정해주고 에러와 경고를 줄여나가야 합니다.그러므로 이번 단계에서는 일단 빌드만 가능하도록 수정합니다. 따라서..
by pyrasis @ 07-11 [10:24 pm]
안녕하세요. 이재홍입니다.윈도우 드라이버 개발을 하다 보면 유저 모드에서 돌아가는 응용프로그램의 기능을 커널 모드 드라이버에서 지원해줘야 하는 경우가 있습니다.하지만 유저 모드 응용프로그램의 기능을 커널 모드 드라이버로 옮긴 다는 것은 말처럼 쉬운 일이 아닙니다.포팅에 있어서 가장 먼저 해야 할 일은 포팅이 가능한지 여부를 판단하는 것입니다. 대략적으로 포팅 가능 여부는 아래 기준으로 판단할 수 있습니다.1. 로직으로만 구성되어있는가?암호화 알고리즘..
by pyrasis @ 06-27 [02:15 am]
저번 글에서는 세마포어를 이용하여 Condition Variable을 구현해보았습니다.이번에는 커널 모드 이벤트를 이용하여 Condition Variable을 구현해보도록 하겠습니다.기존 세마포어를 이용한 구현이 있음에도 불구하고 이벤트로 또다시 구현한 이유는 세마포어를 이용한 것 보다 이벤트를 이용하는 것이 성능이 좀더 좋기 때문입니다. 또한 세마포어를 이용한 것은 객체의 최대 갯수를 정해야 하지만 이벤트를 이용한 것은 객체의 최대 갯수를 정하지..
by pyrasis @ 06-20 [01:18 pm]
안녕하세요. 이재홍입니다.윈도우는 Windows Vista, Windows Server 2008 부터 유저 모드에서 사용할 수 있는 Condition Variable 함수들이 추가되었습니다. (Windows Vista에 새로 추가된 동기화 기본 형식)세마포어를 이용하여 커널 모드에서 사용할 수 있는 Condition Variable을 구현해보도록 하겠습니다.Condition Variable은 기존 동기화 객체와는 약간 다른 특징을 가지고 있습니다...
by pyrasis @ 05-17 [09:38 pm]
64비트 드라이버를 개발하여 배포를 하려고 하면 베리사인과 같은 인증 기관에서 발급한 공인인증서로 서명을 해야 합니다.현재 64비트 드라이버 서명에 사용할 수 있는 인증서 업체는 다음과 같습니다. Baltimore CyberTrust Equifax Secure GTE CyberTrust GlobalSign GeoTrust VeriSign 이 6개 업체 이외의 인증서는 발급 받아서 인증을 해봐야 드라이버 로드가 되지 않습니다.그런데 6개 업체 중에서..
by pyrasis @ 04-28 [04:06 pm]
VS2005의 버그 때문에 이 VS2005로 컴파일한 exe 파일만 실행해도 재부팅이 발생할 수 있습니다.그 조합은 Windows XP SP2, IE6(기타 보안패치를 설치하지 않은 상태)에 Visual Studio 2005 상세 버전 8.0.50727.42로 빌드한 exe 파일을 실행할때 입니다.문제는 exe 파일을 한번만 실행하면 괜찮은데, 2회에서 3회 반복 실행하면 재부팅이 발생합니다. (이것도 PC마다 다름)[CODE type=text] *..
by pyrasis @ 04-25 [01:33 pm]
SQLite는 아주 가벼운 데이터베이스 라이브러리입니다. SQL 문법을 사용할 수 있고 트랜잭션을 지원합니다.이번에 윈도우 커널 모드(드라이버)에서 사용할 수 있는 SQLite를 만들어봤습니다. 윈도우 드라이버에서도 데이터를 데이터베이스 형식으로 관리하고자 할 때 사용할 수 있습니다. 혹은 유저모드에서 만든 SQLite 데이터베이스 파일을 윈도우 드라이버에서 읽거나 쓸 때에도 사용할 수 있습니다.SQLite 버전은 3.6.12이며 WDK 6000 이..
by pyrasis @ 04-06 [08:59 pm]
커널 모드 드라이버에서도 유저 모드의 DLL과 비슷한 형태로 불러 쓸 수 있는 것이 Export Driver입니다.커널 모드 DLL이라고도 하는데, 실제 형태를 보면 유저 모드의 DLL 보다는 커널 모드 드라이버 형태를 띄고 있기 때문에 Export Driver 쪽이 맞습니다.이 Export Driver의 특성은 일반 커널 모드 드라이버의 특성과 유저 모드 DLL의 특성을 모두 가지고 있습니다.유저 모드 DLL과의 공통점 .def 파일로 Export..
by pyrasis @ 04-01 [02:27 pm]
WDM 필터드라이버를 로드할 때 SetupDiCallClassInstaller 함수를 많이 사용합니다.이 함수는 장치 트리를 재구성 할 때 사용하는데, 필터 드라이버는 특정 디바이스에 필터값을 설정하고 장치 트리를 재구성하면서 드라이버를 로드하는 것입니다.여기서 SetupDiCallClassInstaller 함수가 동작하지 않을 때가 있습니다. 함수가 리턴하는 값이 TRUE 이면서 별다른 이상이 없는데도, 드라이버는 로드가 되지 않는 현상이 발생합니..
by pyrasis @ 03-02 [12:22 am]
2008년 5월 윈도우 프로젝트 필수 유틸리티 출간 이후 이렇다 할 활동을 하지 않고 있습니다. 책이 출간된 직후 부터 회사 생활에 있어 많은 변화가 있었고, 기술력에 더불어 조직문화의 차이가 성과에 큰 영향을 미친다는 것을 직접적으로 경험할 수 있었던 시기였습니다. 오래전 부터 조직문화, 기업문화에 대한 관심은 지속적으로 있어 왔지만 최근의 경험들을 통해 이러한 분야의 중요성을 느끼게 되었고, 좀더 전문적으로 다가갈 수 있는 계기가 되었습니다. 윈..
by pyrasis @ 02-01 [12:21 pm]
처음에 우연히 이 책의 이름을 듣게 되었을 때 전산이라는 단어 때문에 일본 IT 업계 이야기인줄 알았습니다. 하지만 책을 사들고 한자로 된 회사명을 보고 난 뒤 전산이 전자계산이 아닌 전기산업이라는 것을 알게 되었습니다. 그렇습니다. 일본전산은 모터 제조회사입니다. 이 책의 초반부를 읽으면서 상당한 거부감을 느낀것이 사실입니다. 읽으면서 짜증이 날 정도였으니깐 말이죠.초반부는 그다지 공감가지 않을 수 있는, 그저 사장의 오기로만 비춰질 수 있는 사장..
|
|
|
|
|
|