Erase my memory...


아랫 글에 이어서 이번에는 WinDDK로 컴파일을 해봤습니다.

VS로 컴파일 할 때와 DDK로 컴파일 할때의 차이는, VS는 C++이고, DDK는 C만 지원한다는 점입니다.
그 외에는 크게 차이점은 없습니다.

일반적인 드라이버와의 차이는 Driver는 모듈인데 반해서, Native App는 실행 파일이라는 점입니다.
따라서, 컴파일도 맞게 해줘야 하지요.

DDK 프로젝트의 source파일을 보면 TARGETTYPE항목이 있는데, 일반적인 드라이버는 "DRIVER"를, Native App는 "PROGRAM"을 사용하면 됩니다.
eg> TARGETTYPE = PROGRAM

그리고 Makefile.def에 PROGRAM TYPE에 대한 헤더 경로 정의가 빠져있기 때문에, 프로젝트의 Makefile에 다음을 추가 해두면 DDK 헤더를 사용 할 수 있습니다.
NTINCLUDES=$(NTINCLUDES);$(DDK_INC_PATH);$(WDM_INC_PATH)
(source파일을 이용해도 됩니다.)

그리고 코드 작성 후 DDK Env.에서 build하면 exe확장자의 실행파일이 만들어집니다.
당연히 Win32 Desktop에서는 실행이 불가능 하죠 [..]

그 후에 System32 디렉토리에 파일을 복사하고, 레지스트리에 항목을 추가하면 부팅시에 실행되게 됩니다.

참고로, 이 프로그램은 Driver와 거의 동격이기 때문에, 에러가 발생하면 부팅이 불가능 합니다 [..]
심지어 안전모드도 안들어가지니, Virtual PC같은 프로그램을 이용하시는것이 좋습니다.


-Source code
Compiler : WinDDK 6000
Platform : Window XP
testsvc_src.zip (1.5 KB)

-Binary
install.cmd를 실행하면 파일 복사/레지스트리 입력을 수행 합니다.
uninstall.cmd를 실행하면 파일을 삭제/레지스트리 값을 삭제합니다.
(testsvc.inf참조)
testsvc.exe 바이너리는 WinDDK Windows XP free build Env.에서 컴파일 했습니다.
testsvc_bin.zip (2.6 KB)




간만에 프로그래밍 관련 포스팅을 .. [..]

Native Application은 Windows가 시스템 내부적으로 사용하는 Application을 총칭합니다.
이 프로그램들은 User Mode Win32 API 외에 Native API를 이용하여 프로그래밍 되어 있는데,
..MS는 Native API를 문서화 하지 않았습니다 [..]
따라서, 마구 바뀔 수 있다! .. 라고 경고하지만, w2k 이후로 크게 바뀐 내용도 없을 뿐더러, 대부분의 함수를 DDK를 이용하여 끌어 쓸 수 있습니다.
(DDK에 심볼이 없으면 GetProcAddress를 이용하여 사용할 수 있습니다)

Native API를 이용한 프로그래밍은 이곳저곳 많이 보이니 넘어가고 [..]

이번에 볼것은 Native App중에서도 Boot Excution App입니다.
Boot Excution App는 Driver가 로드되고 Window Session이 기동할 때 동작하게 됩니다.

다음 레지스트리 경로로 autochk가 기본 설정 되어 있는데, 이 App는 부팅 시에 디스크를 확인하여, 필요하면 디스크 검사를 수행하게 됩니다.
(MULTI_SZ로 나열하면 순차적으로 실행하게 됩니다.)
HKLM/SYSTEM/CurrentControlSet/Control/Session Manager/
Value Name : BootExecute, MULTI_SZ

이렇게 장황[..]하게 설명한 이유는, 물론 저런 App를 만들 수도 있기 때문이죠.
필요 사항은 WinDDK. ..끝..?
저 처럼 DDK 컴파일이 귀찮은 분은 VS2005 이상도 필요 [..]
물론, 용자왕[...]은 Delphi로 하셔도 무방 [.....]

기본적인 사항은 일반적인 Kernel Driver를 컴파일 하듯이 하면 됩니다.
단지, Entry Function을 끝내기 전에 NtTerminateProcess를 호출 해줘야 한다는 부분과, NtCreateHeap을 해줘야 메모리 할당이 가능하다는 것 정도입니다.

그렇게 만든 Hello World [..]
C/C++, Linker탭에서 DDK경로를 정확히 설정 해 주셔야 합니다.
(OS에 대한 대응도 같은 방법으로...)
부팅시에 Hello World를 표시하고 5초간 기다립니다.

Compiler : Visual Studio 2008 Professional Edition
Library : Windows DDK 6000
Platform : Windows XP Only
testsvc.zip (16.8 KB)

Ref. Native Application : http://technet.microsoft.com/en-us/sysinternals/bb897447.aspx
Ref. Native API Documents : http://undocumented.ntinternals.net/




[이전 목록]   [1] ... [3][4][5][6][7][8][9][10][11] ... [60]   [다음 목록]



 | 관리자 | 새글쓰기

お花は好きですか?
검색
카테고리
분류 전체보기
Personally
もう一つ
くろねこさん
分からない
Conversation
Narcissus
태그 목록
방문자 집계
전체 36485 명
오늘 2 명
어제 5 명
글 보관함
달력
<<   2010 Sep   >>
S M T W T F S
2930311234
567891011
12131415161718
19202122232425
262728293012
최근에 올라온 글
최근에 달린 댓글
최근에 받은 트랙백
링크 사이트
Powered by TatterTools