최신목록

2016년 8월 12일 금요일

[WINDDK] INCLUDE 폴더 와 LIBRARY 폴더

visual studio에서 minifilter driver를 개발하고 있었다. 
환경셋팅은 vs에 vc++ 디렉터리에 ddk inc 폴더들을 추가해서 사용하고 있었으므로 당연히 ddk build시 vs 에서 셋팅한 inc 패스를 사용하고 있으리라 생각했다....ㅜ

너무나 뭐든 당연하게 생각하고 넘겨버림이....개발 마지막 단계에서 incude 폴더와 library 폴더의 혼란으로 삽질을......

ddkbuild.cmd를 사용하고 있었으므로 내부적으로 경로를 잘 찾겠거니..ㅠ

어느날...
드라이버개발과 c++ 개발을 같이 하고 있던 나는 sid로 사용자계정을 얻을 일이 생겨서 SecLookupAccountSid 함수를 사용하게 되었다. ddk의 header와 library를 추가할 일이 생겼다. 당연히 아래와 같은 코드를 추가하였다.

당시 vc++ 디렉토리에는 inc\ddk만이 추가되어 있었다.

#include <ntfis.h>
#pragma comment(lib, "ksecdd.lib")

함수를 찾을수 없다한다. include 폴더를 추가해 주지 않았다고 생각한 나는
vc++ 디렉터리로 가서 inc\api 폴더를 추가한다. 
unresolved....어쩌고 저쩌고..음..저건 library import 안되면 나는건데...
난 당연히 위와 같이 해줬으므로 계속 헤더만을 찾아주고 있었다. 마침 함수를 잡고 정의로 이동하면 찾을수 없다는 메시지도 나오고....ㅎ

너무 ntfis.h에 뻔히 있는 함수를 못찾아서 vc++ 디렉토리에서 inc\ddk와 inc\api를 둘다 빼보았다. 컴파일시 vc++ 디렉토리 셋팅에 의존하고 있으면 많은 에러가 쏟아져야할 타이밍이었다. 어라....아까와 똑같이 seclookupaccountsid만 못찾는단다. 다른 함수는 다 잘 찾는다. 엥????? 뭐지 지금까지 나는 왜 여기다 계속 셋팅해서 쓰고 있던거지?? 다들 거기다 셋팅하라고 하던데...음...기존 다른 ddk 함수를 붙잡고 정의로 이동을 해보았다. 헉...찾지 못한다. vc++ 디렉터리에 정의함은 단지 visual studio에서 심볼을 찾아가기 위함이었다. 빌드와는 상관이 없는...

그럼 빌드와 상관있는 include 폴더는 어디있단 말인가...
그러다가 문득.. 아... library 정의를 저렇게 하는게 아니고 sources에서 한다는게 생각이 나서 sources에 가서 추가하였다. 음..바로 빌드가 잘된다.
include 폴더는 어디에도 추가하지 않은 상태...sources에서도 뺐다.

그럼 default include 폴더가 어딘가에 정의되있다는것
환경설정밖에 없는데
나는 미련하게 cmd 시스템 환경변수만 쳐다보고 암것도 없다고 생각하고..ㅠㅠ
삽질을...

결론은 ddk build 환경인 x64 checked build environment 콘솔창이 뜨면서 환경변수가 셋팅되고있었다는... 내가 찾던 온갖 변수들이 거기 다 모여있었다. 
IFSKIT_LIB_PATH 와 INCLUDES 등등
make시 DDK폴더 bin안에 있는 make.new를 이용하여 셋팅을 하는듯 했다 비슷한 셋팅들이 해당 파일에 존재하였다. 


음...vc++ 디렉터리 include 와 헷갈리지 말자~!! 결국 sources 에서 INCLUDES를 잘 정의해주면 적용이 될것이다. 난 ddk와 api둘만을 쓰기에 sources에 아무것도 적지 않아도 잘 돌아갔다는것~!!

댓글 없음:

댓글 쓰기