PREFETCH_OPEN_ECP_CONTEXT 구조체(ntifs.h)

PREFETCH_OPEN_ECP_CONTEXT 구조는 프리페처가 파일에 대해 지정된 열린 요청을 수행하는지 여부를 전달합니다.

구문

typedef struct _PREFETCH_OPEN_ECP_CONTEXT {
  PVOID Context;
} PREFETCH_OPEN_ECP_CONTEXT, *PPREFETCH_OPEN_ECP_CONTEXT;

멤버

Context

열린 요청과 연결된 불투명 컨텍스트에 대한 포인터입니다.

설명

프리페처는 캐시 관리자 및 메모리 관리자와 긴밀하게 통합되어 디스크 액세스의 효율성을 높이고 성능을 향상시키는 운영 체제의 구성 요소입니다. 다른 구성 요소가 프리페처를 방해하면 시스템 성능이 저하되고 교착 상태가 발생할 수 있습니다. 따라서 prefetcher는 PREFETCH_OPEN_ECP_CONTEXT 구조를 파일에 연결하여 프리페처가 해당 파일에 대해 열린 요청을 수행했음을 전달합니다. 프리페처는 FltCreateFileEx2 또는 IoCreateFileEx 루틴을 호출할 때 GUID_ECP_PREFETCH_OPEN GUID를 사용하여 PREFETCH_OPEN_ECP_CONTEXT 구조를 연결합니다. 파일 시스템 필터 드라이버(필터)는 FltFindExtraCreateParameter 를 호출하여 PREFETCH_OPEN_ECP_CONTEXT 파일에 연결되어 있는지 확인한 다음 적절한 조치를 취할 수 있습니다. 필터는 FltIsEcpFromUserMode 루틴을 호출하여 PREFETCH_OPEN_ECP_CONTEXT 컨텍스트 구조가 커널 모드에서 시작되었는지 여부를 확인해야 합니다. 악의적인 애플리케이션이 프리페처를 스푸핑하지 못하도록 하려면 필터가 사용자 모드에서 시작된 경우 PREFETCH_OPEN_ECP_CONTEXT 허용하면 안 됩니다.

prefetcher가 PREFETCH_OPEN_ECP_CONTEXT 구조를 파일에 연결한 후 파일에 대한 모든 추가 프리페처 작업에는 PREFETCH_OPEN_ECP_CONTEXT 첨부된 파일 개체가 포함됩니다. 필터가 요청 만들기 이외의 프리페처 파일 시스템 요청을 식별해야 하는 경우 필터는 자체 상태를 유지해야 합니다(예: 필터 관리자 핸들 컨텍스트). 필터는 특정 파일 개체가 프리페처 파일 개체인지 여부를 확인하기 위해 자체 상태를 유지합니다.

메모리 관리자는 프리페처 파일 개체를 캐시할 수 있습니다. 그런 다음 메모리 관리자는 캐시 관리자를 사용하여 매핑된 I/O 또는 캐시된 I/O를 수행하는 다른 애플리케이션에 대해 프리페처 파일 개체를 사용할 수 있습니다. 따라서 프리페처 파일 개체는 프리페처가 핸들을 닫기 전이나 후에 I/O를 페이징하는 데 사용할 수 있습니다. 이 페이징 I/O에는 프리페처가 데이터를 기록하지 않더라도 페이징 쓰기가 포함될 수 있습니다. 페이징 쓰기는 다른 애플리케이션에서 생성됩니다. 메모리 관리자는 캐시된 프리페처 파일 개체를 사용하여 애플리케이션에서 데이터를 씁니다. 따라서 필터는 페이징 쓰기에 의해 트리거되는 작업을 수행하며, 페이징 쓰기가 프리페처 파일 개체에 오더라도 필터는 여전히 해당 작업을 수행해야 합니다.

필터가 프리페처 파일 개체에서 정리 작업이 발생했음을 확인하면 필터는 더 이상 해당 파일 개체를 프리페처 열기로 간주하지 않아야 합니다.

다음은 프리페처가 수행하는 일반적인 작업입니다(그러나 이러한 작업에서는 프리페처가 파일 내용을 변경하지 않습니다).

  • 볼륨 열기 및 닫기
  • 파일 열기 및 닫기
  • 파일 정보 쿼리
  • 파일 정보 설정(이 열기에 대한 마지막 액세스 시간을 업데이트하지 않도록 파일 시스템에 지시하기 위해서만)
  • 이미지 및 데이터 만들기 섹션
  • 비동기 페이징 I/O 수행

가능한 교착 상태 상황을 유도하지 않도록 필터는 다음을 수행해야 합니다.

  • 프리페처 작업을 차단하지 마세요.
  • 다른 파일 시스템 요청을 실행하지 않고 프리페처 작업을 통과합니다.

애플리케이션 또는 드라이버가 프리페치되는 데이터에 액세스하려면 파일에 대한 자체 핸들을 열거나 섹션 또는 둘 다를 만들어야 합니다.

ECP를 사용하여 파일의 IRP_MJ_CREATE 작업과 추가 정보를 연결하는 방법에 대한 자세한 내용은 IRP_MJ_CREATE 작업과 함께 추가 만들기 매개 변수 사용을 참조하세요.

PREFETCH_OPEN_ECP_CONTEXT 구조체는 읽기 전용입니다. 프리페처 열기 ECP에 대한 정보만 검색하는 데 사용해야 합니다. 이 문제에 대한 자세한 내용은 시스템 정의 ECP를 참조하세요.

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows Vista
머리글 ntifs.h(Ntifs.h 포함)

추가 정보

FltCreateFileEx2

FltIsEcpFromUserMode

IoCreateFileEx