PINSTANCE_FULL_INFORMATION 구조체가 컴파일이 안되서 FltuserStructures.h를 열어보았다.
#if FLT_MGR_BASELINE
//
// Disable warning for this file
//
FLT_MGR_BASELINE이 무슨이유에서인지 define이 안되고 있는 상태이다. FLT_MGR_BASELINE을 따라가 보면 OS VERSION의 조건이 만족되어야 한다. 음...
몇부터 되는것이지?? define 내용은 아래와 같다.
#define FLT_MGR_BASELINE (((OSVER(NTDDI_VERSION) == NTDDI_WIN2K) && (SPVER(NTDDI_VERSION) >= SPVER(NTDDI_WIN2KSP4))) || \정리해보면 NTDDI_VERSION이 NTDDI_WS03SP1 보다 같거나 높아야한다는것...
((OSVER(NTDDI_VERSION) == NTDDI_WINXP) && (SPVER(NTDDI_VERSION) >= SPVER(NTDDI_WINXPSP2))) || \
((OSVER(NTDDI_VERSION) == NTDDI_WS03) && (SPVER(NTDDI_VERSION) >= SPVER(NTDDI_WS03SP1))) || \
(NTDDI_VERSION >= NTDDI_VISTA))
음... 하지만 나의 헤더에는 아래와 같이 선언이 되있었다.
#ifndef _WIN32_WINNT
#define _WIN32_WINNT 0x0502
#endif
_WIN32_WINNT 0x0502이면 windows 2003 sp1 이란얘긴데...왜 안되지???
그럼 NTDDI_VERSION은 몇으로 되있는 것일까? 찾아보자 skddkver.h 에 아래와 같이 선언되있다.
#ifndef NTDDI_VERSION
#ifdef _WIN32_WINNT
// set NTDDI_VERSION based on _WIN32_WINNT
#define NTDDI_VERSION NTDDI_VERSION_FROM_WIN32_WINNT(_WIN32_WINNT)
#else
#define NTDDI_VERSION 0x06010000
#endif
#endif
이는 NTDDI_VERSION이 따로 선언되있지 않고 _WIN32_WINNT일때는 _WIN32_WINNT를 NTDDI_VERSION으로 컨버팅해서 따라간다는것인데...음...WINDOWS 2003 SP1인데 잘 컨버팅이 됬다면 되야하는데..왜 안되지???
#define NTDDI_VERSION_FROM_WIN32_WINNT2(ver) ver##0000
#define NTDDI_VERSION_FROM_WIN32_WINNT(ver) NTDDI_VERSION_FROM_WIN32_WINNT2(ver)
음...별거없네 그냥 뒤에 0000만 더 붙인것...그럼 0x05020000 인데...
NTDDI_VERSION 정의를 살펴보자.
NTDDI_VERSION_FROM_WIN32_WINNT 믿을놈이 못된다..ㅋㅋ
잘 확인하고 사용하자.
댓글 없음:
댓글 쓰기