FltSetTransactionContext 함수(fltkernel.h)
FltSetTransactionContext 루틴은 트랜잭션에 대한 컨텍스트를 설정합니다.
구문
NTSTATUS FLTAPI FltSetTransactionContext(
[in] PFLT_INSTANCE Instance,
[in] PKTRANSACTION Transaction,
[in] FLT_SET_CONTEXT_OPERATION Operation,
[in] PFLT_CONTEXT NewContext,
[out, optional] PFLT_CONTEXT *OldContext
);
매개 변수
[in] Instance
호출자에 대한 불투명 instance 포인터입니다.
[in] Transaction
컨텍스트가 설정되는 트랜잭션에 대한 불투명 트랜잭션 포인터입니다.
[in] Operation
수행할 작업의 세부 정보를 지정하는 플래그입니다. 이 매개 변수는 다음 중 하나여야 합니다.
플래그 | 의미 |
---|---|
FLT_SET_CONTEXT_REPLACE_IF_EXISTS | Transaction 매개 변수가 가리키는 트랜잭션에 대해 컨텍스트가 이미 설정된 경우 FltSetTransactionContext는 이를 NewContext 매개 변수가 가리키는 컨텍스트로 바꿉니다. 그렇지 않으면 NewContext 매개 변수가 가리키는 컨텍스트를 Transaction 매개 변수가 가리키는 트랜잭션의 컨텍스트로 설정합니다. |
FLT_SET_CONTEXT_KEEP_IF_EXISTS | Transaction 매개 변수가 가리키는 트랜잭션에 대해 컨텍스트가 이미 설정된 경우 FltSetTransactionContext는 STATUS_FLT_CONTEXT_ALREADY_DEFINED 반환하고 기존 컨텍스트를 대체하거나 참조 수를 증가시키지 않습니다. 컨텍스트가 아직 설정되지 않은 경우 이 루틴은 NewContext 매개 변수가 가리키는 컨텍스트를 Transaction 매개 변수가 가리키는 트랜잭션의 컨텍스트로 설정하고 참조 횟수를 증가합니다. |
[in] NewContext
트랜잭션에 대해 설정할 새 컨텍스트에 대한 포인터입니다. 이 매개 변수는 필수이며 NULL일 수 없습니다.
[out, optional] OldContext
이미 설정된 경우 기존 트랜잭션 컨텍스트의 주소를 수신하는 호출자가 할당한 변수에 대한 포인터입니다. 이 매개 변수는 선택 사항이며 NULL일 수 있습니다. 이 매개 변수에 대한 자세한 내용은 다음 주의 섹션을 참조하세요.
반환 값
FltSetTransactionContext 는 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 매개 변수에 대해 잘못된 값이 지정되었습니다. 오류 코드입니다. |
설명
컨텍스트에 대한 자세한 내용은 미니필터 컨텍스트 정보를 참조하세요.
미니필터 드라이버는 FltSetTransactionContext 를 호출하여 트랜잭션에 컨텍스트를 연결하거나 기존 트랜잭션 컨텍스트를 제거하거나 대체합니다. 미니필터 드라이버는 지정된 트랜잭션에 하나의 컨텍스트만 연결할 수 있습니다.
참조 계산
FltSetTransactionContext가 성공하면 다음을 수행합니다.
- NewContext의 참조 수가 증가합니다. NewContext가 더 이상 필요하지 않은 경우 미니 필터는 FltReleaseContext를 호출하여 참조 횟수를 감소시켜야 합니다.
그렇지 않으면 FltSetTransactionContext가 실패합니다.
- NewContext의 참조 수는 변경되지 않은 상태로 유지됩니다.
- OldContext가 NULL이 아니고 NULL_CONTEXT 가리키지 않는 경우 OldContext는 현재 트랜잭션과 연결된 컨텍스트에 대한 참조된 포인터입니다. 컨텍스트 포인터가 더 이상 필요하지 않은 경우 FltSetTransactionContext를 호출하는 필터는 OldContext에 대해 FltReleaseContext를 호출해야 합니다.
성공에 관계없이:
- FltSetTransactionContext를 호출하는 필터는 FltReleaseContext를 호출하여 FltAllocateContext에 의해 증가된 NewContext 개체의 참조 수를 감소시켜야 합니다.
자세한 내용은 컨텍스트 참조를 참조하세요.
기타 컨텍스트 작업
자세한 내용은 컨텍스트 설정 및 컨텍스트 해제를 참조하세요.
- 새 컨텍스트를 할당하려면 FltAllocateContext를 호출합니다.
트랜잭션 컨텍스트를 얻으려면 FltGetTransactionContext를 호출합니다.
- 트랜잭션 컨텍스트를 삭제하려면 FltDeleteTransactionContext 또는 FltDeleteContext를 호출합니다.
요구 사항
요구 사항 | 값 |
---|---|
지원되는 최소 클라이언트 | Windows Vista 이상 운영 체제에서 사용 가능하고 지원됩니다. |
대상 플랫폼 | 유니버설 |
헤더 | fltkernel.h(Fltkernel.h 포함) |
라이브러리 | FltMgr.lib |
DLL | FltMgr.sys |
IRQL | <= APC_LEVEL. |