FltGetTunneledName 함수(fltkernel.h)
FltGetTunneledName 루틴은 FltGetFileNameInformation, FltGetFileNameNameInformationUnsafe 또는 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, FltGetFileNameNameInformationUnsafe 또는 FltGetDestinationFileNameInformation에 대한 이전 호출에서 반환된 정규화된 이름 정보를 포함하는 FLT_FILE_NAME_INFORMATION 구조체에 대한 포인터입니다.
[out] RetTunneledFileNameInformation
터널링된 파일 이름을 포함하는 새로 할당된 구조체의 주소를 수신하는 호출자가 할당한 변수에 대한 포인터입니다. 터널된 이름을 찾을 수 없으면 이 변수는 NULL을 받습니다. 이 매개 변수는 필수이며 입력에서 NULL 일 수 없습니다.
반환 값
FltGetTunneledName 은 터널링된 이름이 찾거나 파일에 터널링된 이름이 없는 경우 STATUS_SUCCESS 반환합니다. 그렇지 않으면 다음과 같은 NTSTATUS 값을 반환합니다.
반환 코드 | 설명 |
---|---|
STATUS_INSUFFICIENT_RESOURCES | FltGetTunneledName 에서 풀 할당 오류가 발생했습니다. 오류 코드입니다. |
설명
NTFS 및 FAT와 같은 파일 시스템은 볼륨별 터널 캐시를 사용하여 파일 이름 바꾸기, 연결 또는 삭제되는 파일에 대한 파일 이름 및 기타 메타데이터를 간략하게 유지합니다. 파일 이름 터널링으로 인해 FltGetFileNameInformation, FltGetFileNameInformationUnsafe 또는 FltGetDestinationFileNameInformation에 대한 사전 운용 호출에서 반환된 정규화된 파일 이름 정보의 최종 구성 요소가 무효화될 수 있습니다.
미니필터 드라이버가 만들기(IRP_MJ_CREATE), 하드 링크(FILE_INFORMATION_CLASS FileRenameInformation으로 설정된IRP_MJ_SET_INFORMATION) 또는 fileLinkInformation으로 설정된 IRP_MJ_SET_INFORMATION(FILE_INFORMATION_CLASS FileLinkInformation으로 설정된 IRP_MJ_SET_INFORMATION)에 대한 사전 운용 콜백 루틴(PFLT_PRE_OPERATION_CALLBACK)에서 정규화된 파일 이름 정보를 검색하는 경우 해당 사후 운용 콜백 루틴()에서 FltGetTunneledName을 호출해야 합니다.PFLT_POST_OPERATION_CALLBACK)를 사용하여 파일에 대한 올바른 파일 이름 정보를 검색합니다.
정규화된 파일 이름 정보만 터널링의 영향을 받습니다. 터널링으로 인해 짧은 이름이 긴 이름으로 변경될 수 있으므로 필터 관리자는 만들기, 하드 링크 또는 이름 바꾸기 작업이 실제로 발생할 때까지 최종 구성 요소가 정규화되도록 할 수 없습니다. 따라서 미니필터 드라이버는 운영 후 콜백 루틴에서 FltGetTunneledName 을 호출하여 사전 운용 콜백 루틴에서 검색된 정규화된 파일 이름 정보가 유효한지 여부를 확인해야 합니다.
정규화된 파일 이름 정보에 대한 자세한 내용은 FLT_FILE_NAME_INFORMATION 참조하세요.
짧거나 열린 파일 이름 정보만 검색하는 미니필터 드라이버는 FltGetTunneledName을 호출하면 안 됩니다.
FltGetFileNameInformation을 호출한 후 Preoperation 콜백 루틴의 FltGetFileNameNameInformationUnsafe 또는 FltGetDestinationFileNameInformation은 미니필터 드라이버가 반환된 FileNameInformation 포인터를 사전 운용 콜백 루틴의 CompletionContext 구조에 저장해야 합니다. 그러면 Postoperation 콜백이 FileNameInformation 매개 변수에서 이 포인터를 FltGetTunneledName에 전달할 수 있습니다.
참고
파일 이름 터널링에서는 이러한 방식으로 만들기, 하드 링크 및 이름 바꾸기 작업에만 영향을 줍니다. 읽기 및 쓰기와 같은 다른 I/O 작업에는 영향을 주지 않습니다.
다음 쌍을 이루는 작업으로 인해 파일 이름 이름이 터널화될 수 있습니다.
- delete(name)/create(name)
- delete(name)/rename(source, name)
- rename(name, newname)/create(name)
- rename(name, newname)/rename(source, name)
파일에 대해 터널링된 이름을 찾을 수 없는 경우 RetTunneledFileNameInformation 매개 변수는 NULL을 받습니다.
FltGetTunneledName을 성공적으로 호출한 후 호출자는 FltReleaseFileNameInformation을 호출하여 더 이상 필요하지 않은 경우 RetTunneledFileNameInformation 및 FileNameInformation 포인터를 해제할 책임이 있습니다.
FltGetTunneledName 은 IRP_MJ_CREATE 또는 IRP_MJ_SET_INFORMATION 대한 미니필터 드라이버의 사후 콜백 루틴에서만 호출해야 합니다. 다른 유형의 I/O 작업에 대해 사후 콜백 루틴에서 FltGetTunneledName 을 호출하거나 사전 운용 콜백 루틴에서 호출하는 것은 프로그래밍 오류입니다.
호출자는 RetTunneledFileNameInformation 매개 변수에 반환된 구조체의 내용을 수정해서는 안 됩니다. 이 구조체는 필터 관리자에 의해 캐시되므로 모든 미니필터 드라이버에서 사용할 수 있습니다.
파일 터널링을 사용하면 파일 시스템에 의존하여 파일 메타 정보를 짧은 기간 동안 보존하는 프로그램과 호환할 수 있습니다. 예를 들어 안전한 저장 프로세스의 경우 입니다. 터널링에서는 파일의 long 및 short(8.3) 이름 간의 연결을 유지합니다. 파일 이름이 디렉터리에서 제거되면(이름 바꾸기 또는 삭제) 짧고 긴 이름 쌍과 생성 시간이 제거된 이름으로 키로 지정된 터널 캐시에 저장됩니다. 이름이 디렉터리에 추가되면(이름 바꾸기 또는 만들기) 캐시가 검색되어 복원할 정보가 있는지 확인합니다. 캐시는 디렉터리의 instance 따라 유효합니다. 디렉터리가 삭제되면 해당 캐시가 제거됩니다.
요구 사항
요구 사항 | 값 |
---|---|
대상 플랫폼 | 유니버설 |
헤더 | fltkernel.h(Fltkernel.h 포함) |
라이브러리 | FltMgr.lib |
DLL | Fltmgr.sys |
IRQL | <= APC_LEVEL |
추가 정보
FltGetDestinationFileNameInformation
FltGetFileNameInformationUnsafe