다음을 통해 공유


FltSetFileContext 함수(fltkernel.h)

FltSetFileContext 루틴은 파일에 대한 컨텍스트를 설정합니다.

구문

NTSTATUS FLTAPI FltSetFileContext(
  [in]  PFLT_INSTANCE             Instance,
  [in]  PFILE_OBJECT              FileObject,
  [in]  FLT_SET_CONTEXT_OPERATION Operation,
  [in]  PFLT_CONTEXT              NewContext,
  [out] PFLT_CONTEXT              *OldContext
);

매개 변수

[in] Instance

호출자에 대해 instance 미니필터 드라이버에 대한 불투명 포인터입니다. 이 매개 변수는 필수이며 NULL일 수 없습니다.

[in] FileObject

파일의 파일 개체에 대한 포인터입니다. 이 매개 변수는 필수이며 NULL일 수 없습니다.

[in] Operation

FltSetFileContext에서 수행할 작업 유형을 지정하는 플래그입니다. 이 매개 변수는 다음 플래그 중 하나여야 합니다.

플래그 의미
FLT_SET_CONTEXT_REPLACE_IF_EXISTS FileObject 매개 변수가 가리키는 파일에 대한 컨텍스트가 이미 설정된 경우 FltSetFileContext는 해당 컨텍스트를 NewContext에 지정된 컨텍스트로 바꿉니다. 그렇지 않으면 파일의 컨텍스트 목록에 NewContext 가 삽입됩니다.
FLT_SET_CONTEXT_KEEP_IF_EXISTS FileObject가 가리키는 파일에 대한 컨텍스트가 이미 설정된 경우 FltSetFileContext는 STATUS_FLT_CONTEXT_ALREADY_DEFINED 반환하고 기존 컨텍스트를 대체하거나 참조 수를 증가시키지 않습니다. 컨텍스트가 아직 설정되지 않은 경우 루틴은 NewContext 에 지정된 컨텍스트를 파일의 컨텍스트 목록에 삽입하고 참조 수를 증분합니다.

[in] NewContext

파일에 대해 설정할 새 컨텍스트에 대한 포인터입니다. 이 매개 변수는 필수이며 NULL일 수 없습니다.

[out] OldContext

인스턴스 매개 변수가 가리키는 instance 대한 기존 파일 컨텍스트의 주소를 수신하는 호출자 할당 변수에 대한 포인터입니다(이미 설정된 경우). 이 매개 변수는 선택 사항이며 NULL일 수 있습니다. 이 매개 변수에 대한 자세한 내용은 다음 주의 섹션을 참조하세요.

반환 값

FltSetFileContext 루틴은 STATUS_SUCCESS 또는 다음 중 하나와 같은 적절한 NTSTATUS 값을 반환합니다.

반환 코드 설명
STATUS_FLT_CONTEXT_ALREADY_DEFINED Operation 매개 변수에 대해 FLT_SET_CONTEXT_KEEP_IF_EXISTS 지정한 경우 이 오류 코드는 컨텍스트가 파일에 이미 연결되어 있음을 나타냅니다.
STATUS_FLT_CONTEXT_ALREADY_LINKED NewContext 매개 변수가 가리키는 컨텍스트가 이미 개체에 연결되어 있습니다. 즉, 이 오류 코드는 FltSetXxx컨텍스트 루틴의 성공적인 사전 호출로 인해 NewContext가 이미 사용 중임을 나타냅니다.
STATUS_FLT_DELETING_OBJECT Instance 매개 변수에 지정된 instance 삭제되고 있습니다. 오류 코드입니다.
STATUS_INVALID_PARAMETER 잘못된 매개 변수가 전달되었습니다. 예를 들어 NewContext 매개 변수는 유효한 파일 컨텍스트를 가리키지 않거나 Operation 매개 변수에 대해 잘못된 값이 지정되었습니다. 오류 코드입니다.
STATUS_NOT_SUPPORTED 이 파일에는 파일 컨텍스트가 지원되지 않습니다. 오류 코드입니다.

설명

컨텍스트에 대한 자세한 내용은 미니필터 컨텍스트 정보를 참조하세요.

미니필터 드라이버는 FltSetFileContext 를 호출하여 파일에서 자체 파일 컨텍스트를 설정하거나 대체합니다. 미니필터 드라이버는 파일에 instance 미니필터 드라이버당 하나의 컨텍스트만 연결할 수 있습니다.

미개봉된 FileObject에서는 FltSetFileContext를 호출할 수 없습니다. 따라서 해당 시점에서 파일이 열리지 않았기 때문에 파일에 대한 사전 만들기 콜백에서 FltSetFileContext 를 호출할 수 없습니다. 그러나 미니필터 드라이버는 사전 만들기 콜백에서 파일 컨텍스트를 할당하고 설정하고, 완료 컨텍스트 매개 변수를 사용하여 사후 만들기 콜백에 전달하고, 생성 후 콜백에서 해당 스트림에 해당하는 파일의 파일 컨텍스트를 설정할 수 있습니다.

참조 계산

FltSetFileContext가 성공하는 경우:

  • NewContext의 참조 수가 증가합니다. NewContext가 더 이상 필요하지 않은 경우 미니 필터는 FltReleaseContext를 호출하여 참조 횟수를 감소시켜야 합니다.

그렇지 않으면 FltSetFileContext가 실패합니다.

  • NewContext의 참조 수는 변경되지 않은 상태로 유지됩니다.
  • OldContextNULL이 아니고 NULL_CONTEXT 가리키지 않는 경우 OldContext는 현재 파일과 연결된 컨텍스트에 대한 참조된 포인터입니다. 컨텍스트 포인터가 더 이상 필요하지 않은 경우 FltSetFileContext를 호출하는 필터는 결국 OldContext에 대해 FltReleaseContext를 호출해야 합니다.

성공에 관계없이:

  • FltSetFileContext를 호출하는 필터는 FltAllocateContext에 의해 증가된 NewContext 개체의 참조 수를 감소하기 위해 FltReleaseContext를 호출해야 합니다.

자세한 내용은 컨텍스트 참조를 참조하세요.

기타 컨텍스트 작업

자세한 내용은 컨텍스트 설정컨텍스트 해제를 참조하세요.

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows Vista부터 사용 가능하고 지원됩니다.
대상 플랫폼 유니버설
헤더 fltkernel.h(Fltkernel.h 포함)
라이브러리 Fltmgr.lib
DLL Fltmgr.sys
IRQL <= APC_LEVEL

추가 정보

FLT_CONTEXT_REGISTRATION

FltAllocateContext

FltDeleteContext

FltDeleteFileContext

FltGetFileContext

FltReleaseContext

FltSupportsFileContexts

FltSupportsFileContextsEx