06. 프로그램 실행 제어
·
Windows/DeviceDriver
06. 프로그램 실행 제어 프로그램의 실행을 통제하는 드라이버 이론 윈도우 프로세스 실행 과정 프로그램을 실행시키면, 메모리에 프로세스를 위한 공간을 할당하고 EPROCESS 등의 구조체를 생성한다. 공간 할당이 끝나면, 커널이 등록된 Notify Routine 함수를 호출하여 프로세스의 실행 여부를 결정한다. 드라이버에게 프로세스의 생성과 소멸 시기를 알려주기 프로세스가 실행될 때마다 호출할 함수를 커널에 등록해야 한다. WDK에서 제공되는, Notify Routine 함수를 등록하는 함수들 PsSetCreateProcessNotifyRoutine NTSTATUS PsSetCreateProcessNotifyRoutine( IN PCREATE_PROCESS_NOTIFY_ROUTINE NotifyRouti..
05. 5편 구조체분석1 (DRIVER_OBJECT, UNICODE_STRING)
·
Windows/DeviceDriver
05. 5편 구조체분석1 (DRIVER_OBJECT, UNICODE_STRING) WDK 도움말에 구조체 이름을 검색하여 참고하면 좋다. 디바이스 드라이버 구조체 간단한 샘플 드라이버 코드 #include NTSTATUS DriverEntry(PDRIVER_OBJECT pDrvObj, PUNICODE_STRING pRegPath) { return STATUS_UNSUCCESSFUL; } DriverEntry 함수의 인자는 다음과 같다. pDrvObj : 샘플 드라이버를 설명하는 DRIVER_OBJECT 구조체의 주소 pRegPath : 샘플 드라이버가 등록된 시스템 레지스트리의 키 이름 정보가 보관된 메모리를 설명하는 UNICODE_STRING 구조체의 주소 DRIVER_OBJECT 구조체 DriverI..
4. 프로세스 강제 종료 방지 연습
·
Windows/DeviceDriver
4. 프로세스 강제 종료 방지 연습 하제소프트 대표이사 이봉석님의 윈도우 드라이버 연대기 강의를 보고 기록한 내용이다. 이론 프로세스가 생성되면 고유의 Process ID를 갖는다. PsLookupProcessByProcessId 함수를 통해 EPROCESS라는 구조체의 주소를 얻을 수 있다. NTSTATUS PsLookupProcessByProcessId( IN HANDLE ProcessId, OUT PEPROCESS *Process ); 첫 번째 인자로 PID를 받아서, 두 번째 인자를 역참조하여 EPROCESS의 주소(PEPROCESS)를 넘겨준다. "EPROCESS 구조체의 주소 - 0x15"에 해당하는 주소의 값을 0x14로 변경하면, 다른 프로세스가 종료할 수 없도록 설정된다. "EPROCES..
3. 간단한 드라이버와 디버깅
·
Windows/DeviceDriver
3. 간단한 드라이버와 디버깅 하제소프트 대표이사 이봉석님의 윈도우 드라이버 연대기 강의를 보고 기록한 내용이다. 디버깅을 위한 준비 가상 머신에서 호스트와의 파일 공유가 원활하도록 공유 폴더를 지정해둔다. 가상 머신, WinDbg, 비주얼 스튜디오 프로그램을 실행한다. 빌드 새 프로젝트 생성에서 Empty WDM Driver를 선택한다. 프로젝트명은 sample로 설정하였다. Driver Files에서 sample.inf가 존재하는데, 아직 사용하지 않으므로 지워준다. 소스 파일에 sample.c 파일을 생성한다. sample.c #include NTSTATUS DriverEntry(PDRIVER_OBJECT pDrvObj, PUNICODE_STRING pRegistryPath) { pDrvObj = ..
2. 윈도우 디버거 환경을 준비하자
·
Windows/DeviceDriver
2. 윈도우 디버거 환경을 준비하자 하제소프트 대표이사 이봉석님의 윈도우 드라이버 연대기 강의를 보고 기록한 내용이다. WinDBG MS Windows의 다용도 디버거이다. 유저 모드 애플리케이션 뿐만 아니라 장치 드라이버나 커널 모드에서 운영체제 자체를 디버깅할 수도 있다. GUI가 있으며 VS 디버거보다 강력하다. 덤프 파일을 통해 디버깅할 수 있다. 고려 사항 타겟 컴퓨터(가상 머신)의 부트 설정을 변경해야 한다. 디버깅이 가능하도록 부트설정을 변경한다. 가상 머신의 실행 창에서 msconfig 입력 후, 부팅 탭에서 고급 옵션에 들어간다. 전역 디버그 설정에서 디버그 포트를 COM1, 전송 속도를 115200으로 맞추고 확인을 누른다. 종료하지 않고 TESTSIGNING 모드 설정을 진행한다. T..
1. 윈도우 드라이버 개발 환경 준비
·
Windows/DeviceDriver
1. 윈도우 드라이버 개발 환경 준비 하제소프트 대표이사 이봉석님의 윈도우 드라이버 연대기 강의를 보고 기록한 내용이다. WDK(Windows Driver Kit) 설치 https://docs.microsoft.com/en-us/windows-hardware/drivers/download-the-wdk 의 내용을 따라가면 된다. Step 1 : Visual Studio 2019 설치 설치할 때 Desktop development with C++을 선택하고, 우측 Installation details의 모든 항목을 체크하여 설치하는 것을 추천한다. 다운로드 속도가 너무 느리면 VPN을 사용하거나, MS 다운로드 서버의 IP를 변경하면 된다고 한다. 계속 You require permission from S..