컨텍스트 만들기
미니 필터가 사용하는 컨텍스트 형식을 등록하면 FltAllocateContext를 호출하여 컨텍스트를 만들 수 있습니다. 이 루틴은 컨텍스트 형식 등록에 설명된 조건에 따라 사용할 적절한 컨텍스트 정의를 선택합니다.
컨텍스트를 할당하고 설정하기 전에 미니필터는 다음 루틴을 호출하여 기본 파일 시스템이 파일, 스트림 또는 스트림 핸들 컨텍스트를 지원하는지 여부를 확인할 수 있습니다.
- FltSupportsFileContexts 또는 FltSupportsFileContextsEx
- FltSupportsStreamContexts
- FltSupportsStreamHandleContexts
CTX 샘플 미니필터 드라이버에서 가져온 다음 코드 예제에서 CtxInstanceSetup 루틴은 FltAllocateContext를 호출하여 instance 컨텍스트를 만듭니다.
status = FltAllocateContext(
FltObjects->Filter, //Filter
FLT_INSTANCE_CONTEXT, //ContextType
CTX_INSTANCE_CONTEXT_SIZE, //ContextSize
NonPagedPool, //PoolType
&instanceContext); //ReturnedContext
CTX 샘플에서 다음 컨텍스트 정의는 instance 컨텍스트에 대해 등록됩니다.
{ FLT_INSTANCE_CONTEXT, //ContextType
0, //Flags
CtxContextCleanup, //ContextCleanupCallback
CTX_INSTANCE_CONTEXT_SIZE, //Size
CTX_INSTANCE_CONTEXT_TAG }, //PoolTag
컨텍스트 정의는 크기 멤버가 CTX_INSTANCE_CONTEXT_SIZE(변수 크기 컨텍스트 정의를 나타내는 데 사용되는 FLT_VARIABLE_SIZED_CONTEXTS)이므로 고정 크기입니다. FLTFL_CONTEXT_REGISTRATION_NO_EXACT_SIZE_MATCH 플래그는 Flags 멤버에 설정되어 있지 않습니다. 이 경우 FltAllocateContext의 ContextSize 매개 변수 값이 컨텍스트 정의의 Size 멤버와 일치하는 경우 FltAllocateContext는 적절한 비페이지형 lookaside 목록에서 instance 컨텍스트를 할당합니다. 값이 일치하지 않으면 FltAllocateContext 가 STATUS_FLT_CONTEXT_ALLOCATION_NOT_FOUND 반환 값으로 실패합니다.
성공하면 FltAllocateContext 는 새 컨텍스트의 참조 수를 1로 초기화합니다. 컨텍스트가 더 이상 필요하지 않은 경우 미니필터 드라이버는 이 참조를 해제해야 합니다. 따라서 FltAllocateContext에 대한 모든 호출은 FltReleaseContext에 대한 후속 호출과 일치해야 합니다.
컨텍스트가 만들어지면 미니필터가 개체에 대해 설정할 수 있습니다.