FsRtlInitPerStreamContext 매크로(ntifs.h)

FsRtlInitPerStreamContext 매크로는 필터 드라이버 컨텍스트 구조를 초기화합니다.

구문

void FsRtlInitPerStreamContext(
   _fc,
   _owner,
   _inst,
   _cb
);

매개 변수

_fc

파일 스트림에 대한 컨텍스트 정보를 유지하는 데 사용할 호출자가 할당한 FSRTL_PER_STREAM_CONTEXT 구조체에 대한 포인터입니다. 이 구조체는 가 있는 그대로 사용하거나 드라이버 정의 스트림별 컨텍스트 구조에 포함할 수 있습니다. 두 구조체 형식은 일반적으로 ExAllocatePoolWithTag를 호출하여 할당됩니다.

_owner

스트림별 컨텍스트 구조의 소유자를 고유하게 식별하는 호출자가 할당한 변수에 대한 포인터입니다. 이 변수의 형식은 필터 드라이버 - 특정입니다. 필터 작성기는 드라이버 개체 또는 디바이스 개체의 주소와 같이 의미 있고 편리한 값을 선택해야 합니다. 호출자는 이 매개 변수에 NULL 이 아닌 값을 지정해야 합니다.

_inst

필터 드라이버에 대한 포인터 - 동일한 필터 드라이버에서 만든 스트림별 컨텍스트 구조를 구분하는 데 사용할 수 있는 할당된 변수입니다. 이 변수의 형식은 필터 드라이버 - 특정입니다. 필터 작성기는 파일 스트림에 대한 스트림 컨텍스트 개체의 주소와 같이 의미 있고 편리한 값을 선택해야 합니다. 파일 개체에서 이 주소를 얻으려면 FsRtlGetPerStreamContextPointer 매크로를 사용합니다. 이 매개 변수는 선택 사항이며 NULL일 수 있습니다.

_cb

스트림당 컨텍스트 구조를 해제하는 콜백 루틴에 대한 포인터입니다. 호출자는 이 매개 변수에 NULL 이 아닌 값을 지정해야 합니다. 이 루틴 및 해당 매개 변수는 다음과 같이 정의됩니다.

typedef
VOID (*PFREE_FUNCTION) (
          IN PVOID Buffer
          );

Buffer

해제할 스트림별 컨텍스트 구조에 대한 포인터입니다. FreeCallback 루틴은 일반적으로 이 포인터를 적절한 구조 포인터 형식으로 캐스팅하고 ExFreePool을 호출하여 해제합니다.

반환 값

없음

설명

파일 시스템 필터 드라이버는 FsRtlInitPerStreamContext 매크로를 사용하여 새로 할당된 스트림별 컨텍스트 구조를 초기화한 후 파일 스트림과 연결합니다. 초기화된 컨텍스트 구조를 FsRtlInsertPerStreamContext에 매개 변수로 전달할 수 있습니다.

FsRtlInitPerStreamContextFreeCallback 루틴의 주소를 FSRTL_PER_STREAM_CONTEXT 구조의 FreeCallback 멤버에 저장합니다.

FreeCallback 루틴은 IRQL <= APC_LEVEL 호출됩니다. 일반적으로 IRQL PASSIVE_LEVEL 호출됩니다.

참고FreeCallback 루틴은 파일 시스템에 재귀적으로 호출하거나 파일 시스템 리소스를 가져올 수 없습니다. 또한 이 루틴은 파일 스트림의 파일 개체가 이미 해제되었다고 가정해야 합니다.
 
초기화된 스트림별 컨텍스트 구조를 파일 스트림과 연결하려면 FsRtlInsertPerStreamContext를 호출합니다.

컨텍스트 구조가 파일 스트림과 연결되면 FsRtlLookupPerStreamContext 를 호출하여 검색하거나 FsRtlRemovePerStreamContext를 호출하여 제거할 수 있습니다.

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

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows XP; Windows 2000 SP4(서비스 팩 4)에 대한 업데이트 롤업
대상 플랫폼 데스크톱
머리글 ntifs.h(Ntifs.h 포함)
IRQL 모든 수준

추가 정보

ExAllocatePoolWithTag

ExFreePool

FSRTL_PER_STREAM_CONTEXT

FsRtlGetPerStreamContextPointer

FsRtlInsertPerStreamContext

FsRtlLookupPerStreamContext

FsRtlRemovePerStreamContext

FsRtlSetupAdvancedHeader

FsRtlSupportsPerStreamContexts

FsRtlTeardownPerStreamContexts