FsRtlRemovePerStreamContext 함수(ntifs.h)

FsRtlRemovePerStreamContext 는 파일 스트림과 연결된 스트림별 컨텍스트 목록에서 스트림별 컨텍스트 구조를 제거합니다.

구문

PFSRTL_PER_STREAM_CONTEXT FsRtlRemovePerStreamContext(
  [in]           PFSRTL_ADVANCED_FCB_HEADER StreamContext,
  [in, optional] PVOID                      OwnerId,
  [in, optional] PVOID                      InstanceId
);

매개 변수

[in] StreamContext

파일 스트림의 FSRTL_ADVANCED_FCB_HEADER 구조체에 대한 포인터입니다. 파일 개체에서 이 포인터를 얻으려면 FsRtlGetPerStreamContextPointer 매크로를 사용합니다.

[in, optional] OwnerId

컨텍스트 정보를 특정 필터 드라이버에 속하는 것으로 식별하는 데 사용됩니다.

[in, optional] InstanceId

스트림별 컨텍스트의 특정 인스턴스를 검색하는 데 사용됩니다. 제공하지 않으면 필터 드라이버가 소유한 컨텍스트가 제거되고 반환됩니다.

OwnerIdInstanceId가 모두 제공되지 않으면 연결된 스트림별 컨텍스트가 제거되고 반환됩니다.

반환 값

FsRtlRemovePerStreamContext 는 제거된 스트림별 컨텍스트에 대한 포인터를 반환합니다. 일치하는 항목이 없거나 파일 시스템에서 필터 컨텍스트를 지원하지 않는 경우 FsRtlRemovePerStreamContextNULL을 반환합니다.

설명

파일 시스템 필터 드라이버는 FsRtlRemovePerStreamContext 를 호출하여 파일 스트림과 연결된 스트림별 컨텍스트 목록에서 자체 스트림별 컨텍스트 구조를 제거합니다.

참고FsRtlRemovePerStreamContext 는 발견된 첫 번째 일치하는 스트림별 컨텍스트 구조만 제거합니다. 스트림당 일치하는 컨텍스트가 추가로 있는 경우 필터 드라이버는 FsRtlRemovePerStreamContext 를 모두 제거하는 데 필요한 횟수만큼 호출해야 합니다.
 
이 루틴은 스트림이 열려 있는 동안 필터 드라이버가 파일 스트림과 연결된 컨텍스트 정보를 삭제해야 하는 경우에만 사용해야 합니다. 예를 들어 필터 드라이버는 다음과 같은 경우에 FsRtlRemovePerStreamContext 를 호출할 수 있습니다.
  • 사용자 모드 애플리케이션에서 특정 볼륨에 대한 I/O 요청 로깅을 중지하라는 요청을 수신하는 경우
  • 파일 또는 디렉터리의 이름이 변경되었음을 감지하는 경우
파일 스트림이 닫힌 경우 파일 시스템은 해당 스트림과 연결된 모든 스트림별 컨텍스트가 제거되고 해제되도록 합니다. 이렇게 하려면 파일 시스템에서 파일 제어 블록(FCB) 또는 파일 스트림에 대한 다른 스트림 컨텍스트 개체에서 FsRtlTeardownPerStreamContexts 를 호출해야 합니다. FsRtlTeardownPerStreamContexts 는 FilterContexts 목록을 안내하여 각 항목을 제거하고 FreeCallback 루틴을 호출합니다.

따라서 파일 시스템 필터 드라이버는 IRP_MJ_CLOSE 또는 IRP_MJ_PNP 디스패치 루틴 내에서 FsRtlRemovePerStreamContext 를 호출해서는 안 됩니다. 이러한 호출은 필요하지 않을 뿐만 아니라 FsRtlTeardownPerStreamContexts에 대한 파일 시스템의 호출을 방해할 수도 있습니다.

참고 파일 시스템 필터 드라이버는 스트림별 컨텍스트 구조의 FreeCallback 루틴 내에서 FsRtlRemovePerStreamContext를 호출해서는 안 됩니다. 이는 기본 파일 시스템이 FilterContexts 목록에서 컨텍스트 구조를 이미 제거한 후 FreeCallback 루틴을 호출하기 때문입니다.
 
스트림별 컨텍스트 구조를 초기화하려면 FsRtlInitPerStreamContext 매크로를 사용합니다.

초기화된 스트림별 컨텍스트 구조를 파일 스트림과 연결하려면 FsRtlInsertPerStreamContext를 호출합니다.

파일 스트림과 연결된 스트림별 컨텍스트 구조를 검색하려면 FsRtlLookupPerStreamContext를 호출합니다.

FsRtlRemovePerStreamContext 는 필터 컨텍스트를 지원하는 파일 시스템에서만 사용할 수 있습니다.

자세한 내용은 레거시 파일 시스템 필터 드라이버에서 Per-Stream 컨텍스트 추적을 참조하세요.

요구 사항

   
지원되는 최소 클라이언트 이 루틴은 Windows 2000 SP4(서비스 팩 4) 및 Microsoft Windows XP 이상용 업데이트 롤업에서 사용할 수 있습니다.
대상 플랫폼 유니버설
헤더 ntifs.h(Ntifs.h 포함)
라이브러리 NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <= APC_LEVEL

참고 항목

FSRTL_ADVANCED_FCB_HEADER

FSRTL_PER_STREAM_CONTEXT

FsRtlGetPerStreamContextPointer

FsRtlInitPerStreamContext

FsRtlInsertPerStreamContext

FsRtlLookupPerStreamContext

FsRtlSetupAdvancedHeader

FsRtlSupportsPerStreamContexts

FsRtlTeardownPerStreamContexts

IRP_MJ_CLOSE

IRP_MJ_PNP