다음을 통해 공유


FltGetTunneledName 함수(fltkernel.h)

FltGetTunneledName 루틴은 파일의 터널링된 이름을 검색합니다. fltGetFileNameInformation,FltGetFileNameInformationUnsafe또는 fltGetDestinationFileNameInformation이전 호출로 파일에 대해 반환된 정규화된 이름을 지정합니다.

통사론

NTSTATUS FLTAPI FltGetTunneledName(
  [in]  PFLT_CALLBACK_DATA         CallbackData,
  [in]  PFLT_FILE_NAME_INFORMATION FileNameInformation,
  [out] PFLT_FILE_NAME_INFORMATION *RetTunneledFileNameInformation
);

매개 변수

[in] CallbackData

I/O 작업(FLT_CALLBACK_DATA)에 대한 콜백 데이터 구조에 대한 포인터입니다. 이 매개 변수는 필수이며 NULL 수 없습니다.

[in] FileNameInformation

fltGetFileNameInformation,FltGetFileNameInformationUnsafe또는 파일에 대한 fltGetDestinationFileNameNameInformation이전 호출에서 반환된 정규화된 이름 정보를 포함하는 FLT_FILE_NAME_INFORMATION 구조체에 대한 포인터입니다.

[out] RetTunneledFileNameInformation

터널링된 파일 이름을 포함하는 새로 할당된 구조체의 주소를 받는 호출자 할당 변수에 대한 포인터입니다. 터널된 이름을 찾을 수 없으면 이 변수는 NULL 받습니다. 이 매개 변수는 필수이며 입력에서 NULL 수 없습니다.

반환 값

FltGetTunneledName 터널링된 이름을 찾거나 파일에 대한 터널링된 이름이 없는 경우 STATUS_SUCCESS 반환합니다. 그렇지 않으면 다음과 같은 NTSTATUS 값을 반환합니다.

반환 코드 묘사
STATUS_INSUFFICIENT_RESOURCES FltGetTunneledName 풀 할당 오류가 발생했습니다. 오류 코드입니다.

발언

NTFS 및 FAT와 같은 파일 시스템은 볼륨별 터널 캐시를 사용하여 이름 바꾸기, 연결 또는 삭제되는 파일에 대한 파일 이름 및 기타 메타데이터를 간략하게 유지합니다. 파일 이름 터널링으로 인해 fltGetFileNameInformation,FltGetFileNameNameInformationUnsafe또는 fltGetDestinationFileNameInformation대한 사전 운용 호출에서 반환된 정규화된 파일 이름 정보의 최종 구성 요소가 무효화될 수 있습니다.

미니 필터 드라이버가 만들기(PFLT_PRE_OPERATION_CALLBACKIRP_MJ_CREATE), fileLinkInformation 설정된 하드 링크(IRP_MJ_SET_INFORMATION), fileLinkInformation FILE_INFORMATION_CLASS하드 링크(FILE_INFORMATION_CLASS fileRenameInformation 로 설정된 IRP_MJ_SET_INFORMATION)에 대해 정규화된 파일 이름 정보를 검색하는 경우 파일에 대한 올바른 파일 이름 정보를 검색하려면 FltGetTunneledName 해당 사후 콜백 루틴(PFLT_POST_OPERATION_CALLBACK)에서 호출해야 합니다.

정규화된 파일 이름 정보만 터널링의 영향을 받습니다. 필터 관리자는 터널링으로 인해 짧은 이름이 긴 이름으로 변경될 수 있으므로 만들기, 하드 링크 또는 이름 바꾸기 작업이 실제로 발생할 때까지 최종 구성 요소가 정규화되도록 할 수 없습니다. 따라서 미니 필터 드라이버는 운영 후 콜백 루틴에서 FltGetTunneledName 호출하여 사전 운용 콜백 루틴에서 검색된 정규화된 파일 이름 정보가 유효한지 여부를 확인해야 합니다.

정규화된 파일 이름 정보에 대한 자세한 내용은 FLT_FILE_NAME_INFORMATION참조하세요.

짧거나 열린 파일 이름 정보만 검색하는 미니 필터 드라이버는 FltGetTunneledName호출하면 안 됩니다.

FltGetFileNameInformation호출한 후, FltGetFileNameInformationUnsafe또는 사전 작업 콜백 루틴에서 fltGetDestinationFileNameInformation 미니 필터 드라이버는 반환된 FileNameInformation 포인터를 사전 운용 콜백 루틴의 CompletionContext 구조에 저장해야 하므로 사후 작업 콜백이 FileNameInformation 매개 변수에 이 포인터를 전달하여 FltGetTunneledName 수 있습니다.

메모

파일 이름 터널링이 이러한 방식으로 만들기, 하드 링크 및 이름 바꾸기 작업에만 영향을 줍니다. 읽기 및 쓰기와 같은 다른 I/O 작업에는 영향을 주지 않습니다.

다음 쌍을 이루는 작업으로 인해 파일 이름 이름 터널될 수 있습니다.

  • delete(name)/create(name)
  • delete(name)/rename(source, name)
  • rename(name, newname)/create(name)
  • rename(name, newname)/rename(source, name)

파일에 대한 터널링된 이름이 없으면 RetTunneledFileNameNameInformation 매개 변수는 NULL 받습니다.

fltGetTunneledName 성공적으로 호출한 후 호출자는 FltReleaseFileNameNameInformation호출하여 더 이상 필요하지 않은 경우 RetTunneledFileNameNameInformation및 fileNameInformation 포인터를 해제할 책임이 있습니다.

FltGetTunneledName IRP_MJ_CREATE 또는 IRP_MJ_SET_INFORMATION 미니 필터 드라이버의 사후 콜백 루틴에서만 호출해야 합니다. 다른 유형의 I/O 작업에 대한 사후 콜백 루틴에서 FltGetTunneledName 호출하거나 사전 운용 콜백 루틴에서 호출하는 것은 프로그래밍 오류입니다.

이 구조는 필터 관리자에서 모든 미니 필터 드라이버에서 사용할 수 있도록 캐시되므로 호출자는 RetTunneledFileNameNameInformation 매개 변수에 반환된 구조체의 내용을 수정해서는 안 됩니다.

파일 터널링을 사용하면 파일 시스템에 의존하는 프로그램과 호환되어 짧은 시간 동안 파일 메타 정보를 유지할 수 있습니다. 예를 들어 안전한 저장 프로세스의 경우입니다. 터널링에서는 파일의 길고 짧은 이름(8.3) 이름 간의 연결을 유지합니다. 파일 이름이 디렉터리(이름 바꾸기 또는 삭제)에서 제거되면 짧고 긴 이름 쌍과 생성 시간이 제거된 이름으로 키가 지정된 터널 캐시에 저장됩니다. 이름이 디렉터리에 추가되면(이름 바꾸기 또는 만들기) 캐시를 검색하여 복원할 정보가 있는지 확인합니다. 캐시는 디렉터리의 인스턴스당 유효합니다. 디렉터리가 삭제되면 해당 캐시가 제거됩니다.

요구 사항

요구
대상 플랫폼 보편적
헤더 fltkernel.h(Fltkernel.h 포함)
라이브러리 FltMgr.lib
DLL Fltmgr.sys
IRQL <= APC_LEVEL

참고 항목

FLT_CALLBACK_DATA

FLT_FILE_NAME_INFORMATION

FltGetDestinationFileNameInformation

fltGetFileNameInformation

FltGetFileNameInformationUnsafe

fltParseFileNameInformation

fltReferenceFileNameInformation

FltReleaseFileNameInformation

PFLT_POST_OPERATION_CALLBACK

PFLT_PRE_OPERATION_CALLBACK