티스토리 뷰
728x90
반응형
NTFS vs ReFS - 파일 필터 드라이버 개발 시 차이점
✅ 기본 개념
Microsoft의 FltMgr 기반 미니필터 드라이버는 NTFS와 ReFS 모두에서 작동할 수 있지만, ReFS는 구조적 차이로 인해 필터링 동작이 제한됩니다. NTFS를 기준으로 작성된 드라이버는 ReFS에서 정상 작동하지 않거나 무시될 수 있습니다.
📌 NTFS vs ReFS - 주요 차이점 요약
항목 | NTFS | ReFS |
---|---|---|
필터링 범위 | Pre/Post Callbacks 대부분 지원 | 일부 IRP만 필터링 가능 |
저널링 구조 | $LogFile , $USN Journal 등 존재 |
USN Journal 없음, 메타데이터 구조 비공개 |
파일 경로 확인 | FltGetFileNameInformation() 대부분 성공 |
경로 캐시 불완전 → 실패 가능성 높음 |
Reparse Point | 지원 | 미지원 |
압축, EFS 등 | 지원 | 기능 자체 미지원 → 필터링 불필요 |
파일 ID 추적 | FileObject → 안정적 FileId 조회 가능 | 불안정하거나 무의미 |
FileSystem Control | IRP_MJ_FILE_SYSTEM_CONTROL 등 대부분 필터링 가능 | 일부 동작 차단 또는 무시 |
🔍 코드 예시: ReFS에서의 비정상 동작
FLT_PREOP_CALLBACK_STATUS
MyPreWriteCallback(
PFLT_CALLBACK_DATA Data,
PCFLT_RELATED_OBJECTS FltObjects,
PVOID* CompletionContext)
{
// NTFS에서는 정상 호출됨
// ReFS에서는 Callback이 호출되지 않거나 Length가 0인 경우 있음
}
🛠️ ReFS 대응 시 고려사항
- FltGetFileNameInformation()은 실패 가능성이 높으므로 오류 처리 필수
- IRP_MJ_SET_INFORMATION, DIRECTORY_CONTROL 등 일부는 필터링 안 됨
- PreWrite/PreFlush 대체 또는 사용자 모드 감시 방식 검토 필요
- Fallback 설계: 필터링 실패 시 user-mode에서 보완 처리 고려
- 모든 동작을 로그로 남기는 습관 필요 (ReFS 예외 대응용)
✅ 결론
NTFS 전용으로 설계된 파일 필터 드라이버는 ReFS에서 제대로 동작하지 않으며, ReFS의 제한된 구조에 맞춰 재설계가 필요합니다. IRP 지원 범위, 메타데이터 처리 방식, 파일 경로 추적 방식 등이 달라 전용 설계가 아니면 오동작하거나 필터링되지 않습니다.
ReFS 대상 시스템이라면 필터링 우회 감지, 사용자 모드와 커널 모드 혼합 감시, ETW 기반 로깅 등 새로운 방식으로 접근하는 것이 바람직합니다.
728x90
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- ip
- Build
- 제주도
- 암호화
- CMake
- C#
- C#.NET
- 울릉도
- OpenSource
- 리눅스
- 서귀포
- 스쿠버다이빙
- 블루버블다이브팀
- DLL
- 서귀포블루버블
- C# 고급 기술
- Windows
- Linux
- 현포다이브
- Thread
- 패턴
- 외돌개
- C++
- 블루버블다이빙팀
- ReFS
- C
- 윈도우
- 성산블루버블
- PowerShell
- 블루버블
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
글 보관함