다음을 통해 공유


컨텍스트 삭제

FltSetXxx컨텍스트 호출에 의해 설정된 모든 컨텍스트는 결국 삭제되어야 합니다.

필터 관리자는 다음 상황이 발생할 때 컨텍스트를 자동으로 삭제합니다.

  • 컨텍스트가 연결된 개체가 삭제됩니다.
  • 볼륨에서 분리된 미니필터 instance
  • 미니필터 드라이버가 언로드됨

따라서 미니필터가 컨텍스트를 명시적으로 삭제할 필요는 거의 없습니다.

미니필터는 다음 컨텍스트 삭제 루틴 중 하나를 호출하여 컨텍스트를 삭제할 수 있습니다.

컨텍스트는 현재 개체에 대해 설정된 경우에만 삭제할 수 있습니다. 아직 설정되지 않았거나 이미 FltSetXxx컨텍스트에 대한 성공적인 호출로 대체된 경우 컨텍스트를 삭제할 수 없습니다.

OldContext가 NULL이 아니고 NULL_CONTEXT 가리키지 않는 경우 FltDeleteXxx컨텍스트 루틴은 OldContext 매개 변수의 이전 컨텍스트에 대한 포인터를 반환합니다. OldContextNULL인 경우 필터 관리자는 컨텍스트에 대한 참조 수를 감소시킨 다음 미니필터에 미해결 참조가 없는 한 해제됩니다.

다음 코드 예제에서는 스트림 컨텍스트를 삭제하는 방법을 보여줍니다.

status = FltDeleteStreamContext(
 FltObjects->Instance,      //Instance
 FltObjects->FileObject,    //FileObject
           &oldContext);              //OldContext
//
// Perform any needed processing
// ...
//
if (oldContext != NULL) {
 FltReleaseContext(oldContext);
}

이 예제에서는 FltDeleteStreamContext:

  • 스트림에서 스트림 컨텍스트를 제거합니다.
  • OldContext 매개 변수가 NULL이 아니므로 컨텍스트의 참조 수가 감소하지 않습니다.
  • OldContext 매개 변수에서 삭제된 컨텍스트(스트림에서 제거된 컨텍스트)의 주소를 반환합니다.

NULL이 아닌 OldContext 매개 변수로 인해 필요한 처리를 수행한 후 필터는 FltReleaseContext를 호출하여 삭제된 컨텍스트를 해제해야 합니다.