다음을 통해 공유


FltAttachVolumeAtAltitude 함수(fltkernel.h)

FltAttachVolumeAtAltitude는 미니필터 드라이버 instance 지정된 고도의 볼륨에 연결하여 미니필터 드라이버의 INF 파일에 있는 모든 설정을 재정의하는 디버깅 지원 루틴입니다.

구문

NTSTATUS FLTAPI FltAttachVolumeAtAltitude(
  [in, out]       PFLT_FILTER      Filter,
  [in, out]       PFLT_VOLUME      Volume,
  [in]            PCUNICODE_STRING Altitude,
  [in, optional]  PCUNICODE_STRING InstanceName,
  [out, optional] PFLT_INSTANCE    *RetInstance
);

매개 변수

[in, out] Filter

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

[in, out] Volume

미니필터 드라이버가 연결할 instance 볼륨에 대한 불투명 볼륨 포인터입니다. 이 매개 변수는 필수이며 NULL일 수 없습니다.

[in] Altitude

instance 대한 고도 문자열을 포함하는 UNICODE_STRING 구조체에 대한 포인터입니다. 이 매개 변수는 필수이며 NULL일 수 없습니다. (이 매개 변수에 대한 자세한 내용은 다음 주의 섹션을 참조하세요.)

[in, optional] InstanceName

instance 대한 instance 이름을 포함하는 UNICODE_STRING 구조체에 대한 포인터입니다. 이 매개 변수는 선택 사항이며 NULL일 수 있습니다. NULL인 경우 FltAttachVolumeAtAltitude는 미니필터 드라이버 이름과 고도가 가리키는 고도 문자열에서 instance 이름을 생성합니다. 필요한 경우 생성된 이름이 잘리면 문자가 INSTANCE_NAME_MAX_CHARS.

[out, optional] RetInstance

새로 만든 instance 대한 불투명 instance 포인터를 수신하는 호출자가 할당한 변수에 대한 포인터입니다. 이 매개 변수는 선택 사항이며 NULL일 수 있습니다.

반환 값

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

반환 코드 설명
STATUS_FLT_DELETING_OBJECT
지정된 필터 또는 볼륨 이 삭제되고 있습니다. 오류 코드입니다.
STATUS_FLT_FILTER_NOT_READY
미니필터 드라이버가 필터링을 시작하지 않았습니다. 자세한 내용은 FltStartFiltering을 참조하세요. 오류 코드입니다.
STATUS_FLT_INSTANCE_ALTITUDE_COLLISION
지정된 볼륨의 이 고도에 이미 instance 있습니다. 오류 코드입니다.
STATUS_FLT_INSTANCE_NAME_COLLISION
지정된 볼륨에 이 이름을 가진 instance 이미 있습니다. 오류 코드입니다.
STATUS_INSUFFICIENT_RESOURCES
FltAttachVolumeAtAltitude 에서 풀 할당 오류가 발생했습니다. 오류 코드입니다.
STATUS_INVALID_PARAMETER
고도가 가리키는 UNICODE_STRING 구조체에 유효한 고도 문자열이 포함되어 있지 않습니다. 오류 코드입니다.

설명

미니필터 드라이버는 디버깅 에 FltAttachVolumeAtAltitude 만 사용해야 합니다. 미니필터 드라이버의 소매 버전에서는 이 루틴을 호출해서는 안 됩니다.

FltAttachVolumeAtAltitude 는 Win32 FilterAttachAtAltitude 함수와 동일한 커널입니다.

"고도"라는 용어는 볼륨에 대한 미니필터 드라이버 instance 스택에서 instance 차지하거나 차지해야 하는 위치를 나타냅니다. 고도가 높을수록 스택의 기본 파일 시스템에서 instance 멀리 떨어져 있습니다. 지정된 볼륨의 지정된 고도에서 하나의 instance 연결할 수 있습니다.

고도는 0에서 9까지의 10진수를 하나 이상 포함하는 와이드 문자 배열인 고도 문자열에 의해 지정됩니다. 배열에는 단일 소수점이 포함될 수 있습니다. 예를 들어 "100.123456" 및 "03333"은 유효한 고도 문자열입니다.

문자열 "03333"은 "100.123456"보다 높은 고도를 나타냅니다(선행 및 후행 0은 무시됨). 즉, 고도가 "03333"인 instance 고도가 "100.123456"인 instance 기본 파일 시스템에서 더 멀리 떨어져 있습니다. 그러나 이 비교는 두 인스턴스가 동일한 볼륨에 연결된 경우에만 의미가 있습니다.

InstanceName 매개 변수에 지정된 instance 이름은 시스템 전체에서 고유해야 합니다.

FltAttachVolumeAtAltitude는 *RetInstance의 새 instance 대한 불투명 instance 포인터를 반환합니다. 이 포인터 값은 미니필터 드라이버 instance 고유하게 식별하며 instance 볼륨에 연결되어 있는 한 일정하게 유지됩니다.

FltAttachVolumeAtAltitude*RetInstance에서 반환된 불투명 instance 포인터에 런다운 참조를 추가합니다. 이 포인터가 더 이상 필요하지 않은 경우 호출자는 FltObjectDereference를 호출하여 해제해야 합니다. 따라서 FltAttachVolumeAtAltitude 에 대한 모든 성공적인 호출은 FltObjectDereference에 대한 후속 호출과 일치해야 합니다.

동일한 볼륨에 연결된 두 개의 미니필터 드라이버 인스턴스의 고도를 비교하려면 FltCompareInstanceAltitudes를 호출합니다.

볼륨에서 instance 미니필터 드라이버를 분리하려면 FltDetachVolume을 호출합니다.

요구 사항

요구 사항
대상 플랫폼 유니버설
헤더 fltkernel.h(Fltkernel.h 포함)
라이브러리 FltMgr.lib
IRQL PASSIVE_LEVEL

추가 정보

FilterAttachAtAltitude

FltAttachVolume

FltCompareInstanceAltitudes

FltDetachVolume

FltGetVolumeInstanceFromName

FltObjectDereference

FltStartFiltering

UNICODE_STRING