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