반응형
미니필터를 사용하다 보면 필터매니저의 프레임이라는 개념을 접하게 되는 경우가 있다.
프레임이 여러개 존재하는 상황에 대한 정리가 필요해 기록해 둔다.
1. Frame 0 하나인 상황
먼저 기본적인 상황을 살펴본다.
보통 필터 드라이버 디바이스 스택을 보면 다음과 같다.
아래에서 두번째 줄에 FltMgr이 보이는에 여기가 바로 필터매니저가 생성한 Frame 0 다.
Frame 0 위에 AFPAnsi와 AhnFlt2k가 있는데 둘 다 위에 있지만 이렇게 위치한 이유가 좀 다르다.
AFPAnsi는 부팅시에 로드하게 되어 있는데 Group이 Filter로 설정되어 있다.
필터 매니저가 관리하는 Altitude 중 가장 위에 Filter 그룹이 위치하므로 FltMgr 위로 올라간 것이다.
필터 매니저의 Altitude 정보는 아래 링크를 참고하기 바란다.
http://msdn.microsoft.com/en-us/windows/hardware/gg462963.aspx
AhnFlt2k는 수동 로드이고 Group이 없기 때문에 부팅 후에 attach 하면서 맨 위에 붙어 버린 것이다.
이 부분은 나중에 좀 더 꼼꼼히 따져봐야 하는데 일단 현재까지는 이렇게 정리했다.
현재 상태의 프레임 정보를 보면 다음과 같다.
프레임이 여러개 존재하는 상황에 대한 정리가 필요해 기록해 둔다.
1. Frame 0 하나인 상황
먼저 기본적인 상황을 살펴본다.
보통 필터 드라이버 디바이스 스택을 보면 다음과 같다.
kd> !devstack 859a8168
!DevObj !DrvObj !DevExt ObjectName
863d8108 \Driver\AhnFlt2K 863d81c0
> 859a8168 \Driver\AFPAnsi 859a8220
8593c280 \FileSystem\FltMgr 8593c338 ===> Frame 0
8592d020 \FileSystem\Ntfs 8592d0d8
아래에서 두번째 줄에 FltMgr이 보이는에 여기가 바로 필터매니저가 생성한 Frame 0 다.
Frame 0 위에 AFPAnsi와 AhnFlt2k가 있는데 둘 다 위에 있지만 이렇게 위치한 이유가 좀 다르다.
AFPAnsi는 부팅시에 로드하게 되어 있는데 Group이 Filter로 설정되어 있다.
필터 매니저가 관리하는 Altitude 중 가장 위에 Filter 그룹이 위치하므로 FltMgr 위로 올라간 것이다.
필터 매니저의 Altitude 정보는 아래 링크를 참고하기 바란다.
http://msdn.microsoft.com/en-us/windows/hardware/gg462963.aspx
AhnFlt2k는 수동 로드이고 Group이 없기 때문에 부팅 후에 attach 하면서 맨 위에 붙어 버린 것이다.
이 부분은 나중에 좀 더 꼼꼼히 따져봐야 하는데 일단 현재까지는 이렇게 정리했다.
현재 상태의 프레임 정보를 보면 다음과 같다.
kd> !fltkd.frames
Frame List: 83a159f8
FLTP_FRAME: 8531b6c8 "Frame 0" "0 to 429998.99"
FLT_FILTER: 859e5e30 "V3Flt2K" "326020"
FLT_INSTANCE: 860c05d0 "V3Flt2K Instance" "326020"
FLT_INSTANCE: 860c0308 "V3Flt2K Instance" "326020"
FLT_FILTER: 86172008 "luafv" "135000"
FLT_INSTANCE: 86155a50 "luafv" "135000"
FLT_FILTER: 85336980 "FileInfo" "45000"
FLT_INSTANCE: 858f50e8 "FileInfo" "45000"
FLT_INSTANCE: 85900830 "FileInfo" "45000"
현재 필터 매니저를 이용중인 미니 필터들을 볼 수 있다.
Frame 0가 모든 Altitude 영역인 0 ~ 429998.99까지 모두 사용하는 것을 볼 수 있다.
2. Frame 0, Frame 1 두 개인 상황
프레임이 두개 보이는 경우가 있는데 이 때 필터 드라이버 디바이스 스택은 다음과 같다.
AFPAnsi의 동작 조건을 수정했더니 이렇게 변한 것이다.
현재 AFPAnsi는 Group을 삭제해서 지정된 Group이 없는 상태다.
그랬더니 Frame 0과 Frame 1 사이에 위치하게 되었다.
필터 매니저는 부팅시에 올라오는 Legacy 필터 드라이버는 비교적 아래쪽의 Altitude를 부여한다.
부팅시에 올라오는 필터 드라이버라서 다른 미니 필터보다 우선 순위를 높여주려는 목적으로 보인다.
(이 부분은 좀 더 확인이 필요한 부분이다.)
프레임 정보를 확인해 보면 Frame 0와 Frame 1이 어떻게 구성되어 있는지 알 수 있다.
Frame 0는 Altitude 0 ~ 49999까지 Frame 0가 사용하면서 Legacy보다도 아래쪽에 위치해야 하는 FileInfo 미니 필터의 자리를 확보해 준다.
AFPAnsi는 부팅시 로드되는 Legacy로 처리되어 바로 이 위에 붙었다.
Frame 1은 Lagacy 위에 붙어서 일반적인 미니 필터들을 위해 49999 부터 현재 가장 높은 altitude인 V3Flt2k의 Altitude인 326020까지 자리를 확보해 준다.
나중에 올라온 AhnFlt2k는 이 위에 붙었다.
3. 여기서 미니 필터가 추가로 로드되는 경우
a) 326020 이하의 Altitude를 가지는 미니 필터가 로드되면 Frame 1 안에서 동작할 것이다.
b) 326021 이상의 Altitude를 가지는 미니 필터가 로드되면 Frame 2 가 생성되고 여기서 동작할 것이다.
이 부분은 아쉽게도 아직 확인해 보지 않았다. ^^
Frame 0가 모든 Altitude 영역인 0 ~ 429998.99까지 모두 사용하는 것을 볼 수 있다.
2. Frame 0, Frame 1 두 개인 상황
프레임이 두개 보이는 경우가 있는데 이 때 필터 드라이버 디바이스 스택은 다음과 같다.
kd> !devstack 85900c08
!DevObj !DrvObj !DevExt ObjectName
86b786e0 \Driver\AhnFlt2K 86b78798
85a19ab8 \FileSystem\FltMgr 85a19b70 ===> Frame 1
> 85900c08 \Driver\AFPAnsi 85900cc0
85930648 \FileSystem\FltMgr 85930700 ===> Frame 0
85963020 \FileSystem\Ntfs 859630d8
AFPAnsi의 동작 조건을 수정했더니 이렇게 변한 것이다.
현재 AFPAnsi는 Group을 삭제해서 지정된 Group이 없는 상태다.
그랬더니 Frame 0과 Frame 1 사이에 위치하게 되었다.
필터 매니저는 부팅시에 올라오는 Legacy 필터 드라이버는 비교적 아래쪽의 Altitude를 부여한다.
부팅시에 올라오는 필터 드라이버라서 다른 미니 필터보다 우선 순위를 높여주려는 목적으로 보인다.
(이 부분은 좀 더 확인이 필요한 부분이다.)
프레임 정보를 확인해 보면 Frame 0와 Frame 1이 어떻게 구성되어 있는지 알 수 있다.
kd> !fltkd.frames
Frame List: 8743a9f8
FLTP_FRAME: 859dacc0 "Frame 1" "49999 to 326020"
FLT_FILTER: 859b66d8 "V3Flt2K" "326020"
FLT_INSTANCE: 85a6ad80 "V3Flt2K Instance" "326020"
FLT_INSTANCE: 85a658a8 "V3Flt2K Instance" "326020"
FLT_FILTER: 86852ac0 "luafv" "135000"
FLT_INSTANCE: 86856008 "luafv" "135000"
FLTP_FRAME: 8531d6c8 "Frame 0" "0 to 49999"
FLT_FILTER: 8533b438 "FileInfo" "45000"
FLT_INSTANCE: 858f5118 "FileInfo" "45000"
FLT_INSTANCE: 85976dc8 "FileInfo" "45000"
Frame 0는 Altitude 0 ~ 49999까지 Frame 0가 사용하면서 Legacy보다도 아래쪽에 위치해야 하는 FileInfo 미니 필터의 자리를 확보해 준다.
AFPAnsi는 부팅시 로드되는 Legacy로 처리되어 바로 이 위에 붙었다.
Frame 1은 Lagacy 위에 붙어서 일반적인 미니 필터들을 위해 49999 부터 현재 가장 높은 altitude인 V3Flt2k의 Altitude인 326020까지 자리를 확보해 준다.
나중에 올라온 AhnFlt2k는 이 위에 붙었다.
3. 여기서 미니 필터가 추가로 로드되는 경우
a) 326020 이하의 Altitude를 가지는 미니 필터가 로드되면 Frame 1 안에서 동작할 것이다.
b) 326021 이상의 Altitude를 가지는 미니 필터가 로드되면 Frame 2 가 생성되고 여기서 동작할 것이다.
이 부분은 아쉽게도 아직 확인해 보지 않았다. ^^
반응형