IoCreateStreamFileObject 함수(ntifs.h)

IoCreateStreamFileObject 루틴은 새 스트림 파일 개체를 만듭니다.

구문

PFILE_OBJECT IoCreateStreamFileObject(
  [in, optional] PFILE_OBJECT   FileObject,
  [in, optional] PDEVICE_OBJECT DeviceObject
);

매개 변수

[in, optional] FileObject

새 스트림 파일이 관련된 파일 개체에 대한 포인터입니다. 이 매개 변수는 선택 사항이며 NULL일 수 있습니다.

[in, optional] DeviceObject

스트림 파일을 열 디바이스의 디바이스 개체에 대한 포인터입니다. 호출자가 FileObject대해 NULL이 아닌 값을 지정하는 경우 DeviceObject 값은 무시됩니다. 그렇지 않으면 호출자는 DeviceObject대해 NULL이 아닌 값을 지정해야 합니다.

반환 값

IoCreateStreamFileObject 는 새로 만든 스트림 파일 개체에 대한 포인터를 반환합니다.

설명

파일 시스템은 IoCreateStreamFileObject 를 호출하여 새 스트림 파일 개체를 만듭니다. 스트림 파일 개체는 FO_STREAM_FILE 파일 개체 플래그가 설정되어 있다는 점을 제외하고 일반 파일 개체와 동일합니다.

스트림 파일 개체는 일반적으로 파일 시스템에 의해 탑재된 볼륨의 내부 스트림을 나타내는 데 사용됩니다. 이 가상 볼륨 파일 은 파일 시스템이 일반 파일인 것처럼 볼륨의 디스크 내 구조를 보고, 변경하고, 캐시할 수 있도록 허용합니다. 이 경우 IoCreateStreamFileObject 호출의 DeviceObject 매개 변수는 볼륨에 대한 VDO(볼륨 디바이스 개체)를 지정합니다.

스트림 파일 개체를 사용하여 확장 특성 또는 보안 설명자와 같은 파일의 메타데이터에 액세스하기 위한 대체 데이터 스트림을 나타낼 수도 있습니다. 이 경우 IoCreateStreamFileObject 호출의 FileObject 매개 변수는 파일에 대한 기존 파일 개체를 지정합니다. 새로 만든 스트림 파일 개체를 사용하면 파일 시스템이 일반 파일인 것처럼 파일의 메타데이터를 보고, 변경하고, 캐시할 수 있습니다.

스트림 파일 개체가 더 이상 필요하지 않은 경우 호출자는 ObDereferenceObject를 호출하여 참조 수를 감소시켜야 합니다. 스트림 파일 개체의 참조 수가 0에 도달하면 IRP_MJ_CLOSE 요청이 볼륨의 파일 시스템 드라이버 스택으로 전송됩니다.

파일 시스템 필터 드라이버 작성기는 IoCreateStreamFileObject 로 인해 IRP_MJ_CLEANUP 요청이 볼륨의 파일 시스템 드라이버 스택으로 전송된다는 점에 유의해야 합니다. 파일 시스템은 종종 스트림 파일 개체를 IRP_MJ_CREATE 이외의 작업의 부작용으로 만들기 때문에 필터 드라이버가 스트림 파일 개체 생성을 안정적으로 검색하기가 어렵습니다. 따라서 필터 드라이버는 이전에 보이지 않는 파일 개체에 대한 IRP_MJ_CLEANUP 및 IRP_MJ_CLOSE 요청을 수신해야 합니다.

풀 할당 오류가 발생하면 IoCreateStreamFileObject 에서 STATUS_INSUFFICIENT_RESOURCES 예외가 발생합니다.

요구 사항

요구 사항
대상 플랫폼 유니버설
헤더 ntifs.h(Ntifs.h 포함)
라이브러리 NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <= DISPATCH_LEVEL

추가 정보

IRP_MJ_CLEANUP

IRP_MJ_CLOSE

IRP_MJ_CREATE

IoCreateStreamFileObjectEx

IoCreateStreamFileObjectLite

ObDereferenceObject