오래 간만에 필터 드라이버를 사용할 일이 생겼습니다. 구석에 짱박힌 소스를 꺼내서 설치한 후 테스트해보니... 얼래... 또 키보드 마우스에 아무런 반응이 없습니다. 이런 경우 눈 앞이 캄캄해지고 정신적으로 공허해져서 믿고 싶지 않은 상태가 되는데... 그래도 오늘은 비교적 일찍 정신이 들더군요.

 사실 어제부터 분석하기 시작했지만... ㅡ_ㅡa... 답이 쉽게 안나왔습니다. 그래서 다시 처음부터 하나하나 드라이버 상태를 관찰해가면서 진행한 결과... 빙고~!!!! 다시 잘 동작하는 키보드 마우스 필터 드라이버를 완성했습니다. >ㅁ<)-b 이거 쓸일은 별로 없는데... 괜시리 시간만 투자하는게 아닌가 싶기도 하군요. ^^;;;;

 필터 드라이버 수정하기가 점점 더 힘들어지는 것 같습니다. 그래도 이렇게 나마 감을 잃지 않고 있으니 다행이네요. ㅎㅎ 요즘은 64bit OS의 늪에 빠져서 헤어나오지 못하는지라 ㅎㅎ

 아웅~ 오늘은 이만자고, 내일은 64Bit OS에 어플리케이션을 올리는 방법에 대해 생각해봐야겠습니다. 사실 이 정도만 하면 거의 끝난거나 마찬가니지... 언능하고 끝내야겠습니다. ;)

 그럼 이만~!!! 다들 좋은 밤 되세요 ;)

 아우~ 지난주와 이번주, 완전 피곤합니다. ㅜ_ㅜ 만들어 놓았던 필터 드라이버가 특정 상황에서 동작하지 않는 문제가 있어서 디버깅한다고 거의 날밤을 샜습니다. 거짓말 조금 보태서 설치하고 재부팅하고 하는 과정을 거의 200번 정도 한 것 같습니다. ㅜ_ㅜ

 증상 또한 다양했는데... 재부팅이 일어나질 않나, 갑자기 필터 드라이버가 사라지질 않나... 처음에는 프로그램을 잘 못 짠줄 알고 코드를 열심히 수정했습니다. 그런데 가만히 보니 코드의 문제가 아닌 것 같은 느낌이 들어서 다시 커널쪽으로 방향을 틀었습니다.

 역시나... 보안 프로그램이 필터 드라이버의 함수를 수정하거나,  필터 드라이버를 언로딩하고 다시 로딩하는 작업을 수행하더군요. ㅡ_ㅡ;;;; 필터 드라이버가 언로딩 되는 경우는 윈도우가 종료될 때라고 한정하고 있었기때문에 속수무책으로 당했습니다. ㅡ_ㅜ..

 그래서 부랴부랴 언로딩 루틴에 처리하는 부분을 보완하고, 수정된 필터 함수를 좀 손봤더니 잘 되는군요. 내가 쓰겠다는데 왜 내 드라이버를 손보는 것인지... 살짝 기분이 않좋습니다. ㅡ_ㅡa...

 그래도 해결했으니 기분은 좋네요. ^^)/~
 비록 하는 일은 이쪽과 거리가 있지만, 그래도 아직 죽지 않았습니다. @0@)/~!!!


 요즘 필터 드라이버 수정하랴 Virtual HID 드라이버 수정하랴 정신이 없습니다. ^^;;; 뭐랄까요... 필터 드라이버 같은 경우는 완성되긴 했지만... V3가 설치된 PC에서는 제대로 수행되지 않는 문제가 있었습니다.

 일단 수정을 위해서 V3 Internet Security 평가판을 설치하고 부랴부랴 테스트에 돌입했습니다. 결과가 어찌나올지는 모르겠지만 영향을 아주 안주는 것은 아닌 것 같군요. ^^;;;

 아휴... 이거 오늘도 피곤하게 생겼습니다. 그려... ^^;;; 뭔가 알아내면 제보(??) 날리겠습니다. ^^
 그럼 다들 좋은 밤 되시길~ ^^)/~
 간단히 시작했던 작업이 어느새 필터 드라이버를 동적 로딩하는 단계까지 발전했습니다. ㅜ_ㅜ)/~ 이게 어찌된 영문인가 모르겠습니다. ^^;;;;

 기존의 드라이버가 DDK의 소스를 기반으로 만들어졌는데, 정적으로 로딩되서 실행되는 방식이었습니다. 그런데 갑자기 동적 로딩으로 할 수 있게 해달라는 요청이 있어서 소스를 손보기 시작했습니다. 참고로 동적 로딩과 정적 로딩은 아래와 같은 차이가 있습니다. ^^

  • 정적 로딩 : 윈도우 레지스트리에 등록하여 윈도우 시작 시에 자동으로 로드되는 방식
  • 동적 로딩 : 사용자가 요청하면 로딩하는 방식, 일반적으로 시스템 초기화가 완료된 이후에 로딩됨

 처음에는 간단히 동적 로드만 되면 되겠거니 생각했는데, 이게 일이 점점 많아지는 겁니다. ㅜ_ㅜ 키를 입력하게 하는 주요 루틴을 다른 쪽으로 옮겨야 하더군요. 이때부터 작업 로드가 심하게 걸리기 시작했습니다. 잠도 못자고 분석하고 테스트하고... 후덜덜덜...

 정적 로딩하는 버전은 PNP 메시지를 받아서 드라이버가 등록될 때 상위 Driver의 Callback 함수를 가지고 있다가 그걸 강제로 호출해서 값을 넣도록 하는 방식이었는데, 동적 로딩할 때는 PNP 메시지를 받지 못한 상태로 로딩되기 때문에 MJ_READ 에서 이를 처리하도록 해야했습니다. 삽질 끝에 알았습니다. 이런... ㅜ_ㅜ 더불어 IRP를 Cancel해야 다시 읽는 다는 것두요. ^^;;;

 노트북이 없었더라면 작업 시간이 두배 정도 더 걸릴뻔 했습니다. 어휴... 끔찍하네요. ^^;;;;
 방금 테스트를 해봤는데, 정상적으로 동작하는 것 같습니다.
 신나는 주말입니다. ^^)/~

+ Recent posts