IRP_MJ_CREATE 작업의 Oplock 상태 확인

다음은 파일의 기존 스트림이 열려 있는 경우에만 적용됩니다(즉, 새로 만든 스트림에 기존 oplock이 있을 수 없음).

참고 모든 oplock에 대한 IRP_MJ_CREATE 처리할 때 원하는 액세스에 FILE_READ_ATTRIBUTES, FILE_WRITE_ATTRIBUTES 또는 SYNCHRONIZE 이외의 항목이 없는 경우 FILE_RESERVE_OPFILTER 지정하지 않으면 oplock이 중단되지 않습니다. FILE_RESERVE_OPFILTER 지정하면 만들기가 성공하면 항상 oplock 중단이 발생합니다. 간결하고 단순하게 하기 위해 다음 표에서는 모든 oplock에 적용되므로 기존을 생략합니다.

요청 유형 조건

수준 1

다음과 같은 경우 IRP_MJ_CREATE 손상됨

  • 열기가 발생하는 FILE_OBJECT 연결된 oplock 키는 oplock을 소유하는 FILE_OBJECT 연결된 oplock 키와 다릅니다.

oplock이 끊어진 경우:

  • 다음을 수행 하면 없음으로 중단합니다.

    • FILE_RESERVE_OPFILTER 플래그가 설정됨

      OR

    • 다음 중 어느 것이든 처리 만들기 값이 지정됩니다.
      • FILE_SUPERSEDE
      • FILE_OVERWRITE
      • FILE_OVERWRITE_IF

    다른:

    • 수준 2로 중단합니다.
  • 작업이 계속되기 전에 승인을 받아야 합니다.

수준 2

다음과 같은 경우 IRP_MJ_CREATE 손상됨

  • 열기가 발생하는 FILE_OBJECT 연결된 oplock 키는 oplock을 소유하는 FILE_OBJECT 연결된 oplock 키와 다릅니다.
  • 및:
    • FILE_RESERVE_OPFILTER 플래그가 설정됨

      OR

    • 다음 중 어느 것이든 처리 만들기 값이 지정됩니다.
      • FILE_SUPERSEDE
      • FILE_OVERWRITE
      • FILE_OVERWRITE_IF

oplock이 끊어진 경우:

  • 없음으로 끊습니다.

  • 승인이 필요하지 않으며 작업이 즉시 진행됩니다.

Batch

다음과 같은 경우 IRP_MJ_CREATE 손상됨

  • 열기가 발생하는 FILE_OBJECT 연결된 oplock 키는 oplock을 소유하는 FILE_OBJECT 연결된 oplock 키와 다릅니다.

oplock이 끊어진 경우:

  • 다음을 수행 하면 없음으로 중단합니다.

    • FILE_RESERVE_OPFILTER 플래그가 설정됩니다.

      OR

    • 다음 중 어느 것이든 처리 만들기 값이 지정됩니다.
      • FILE_SUPERSEDE
      • FILE_OVERWRITE
      • FILE_OVERWRITE_IF

    다른:

    • 수준 2로 중단합니다.
  • 작업이 계속되기 전에 승인을 받아야 합니다.

필터

다음과 같은 경우 IRP_MJ_CREATE 손상됨

  • 열기가 발생하는 FILE_OBJECT 연결된 oplock 키는 oplock을 소유하는 FILE_OBJECT 연결된 oplock 키와 다릅니다.

  • 및:
    • FILE_SHARE_READ 액세스를 위해 열리지 않은 스트림에서 "쓰기 가능한" 원하는 액세스가 요청되었습니다. "쓰기 가능한" 액세스는 다음 이외의 특성으로 정의됩니다.

      • FILE_READ_ATTRIBUTES
      • FILE_WRITE_ATTRIBUTES
      • FILE_READ_DATA
      • FILE_READ_EA
      • FILE_EXECUTE
      • SYNCHRONIZE
      • READ_CONTROL

oplock이 끊어진 경우:

  • 없음으로 끊습니다.

  • 작업이 계속되기 전에 승인을 받아야 합니다.

읽기

다음과 같은 경우 IRP_MJ_CREATE 손상됨

  • 열기가 발생하는 FILE_OBJECT 연결된 oplock 키는 oplock을 소유하는 FILE_OBJECT 연결된 oplock 키와 다릅니다.

  • 및:
    • FILE_RESERVE_OPFILTER 플래그가 설정됨

      OR

    • 다음 중 어느 것이든 처리 만들기 값이 지정됩니다.
      • FILE_SUPERSEDE
      • FILE_OVERWRITE
      • FILE_OVERWRITE_IF

oplock이 끊어진 경우:

  • 없음으로 끊습니다.

  • 승인이 필요하지 않으며 작업이 즉시 진행됩니다.

Read-Handle

다음과 같은 경우 IRP_MJ_CREATE 손상됨

  • 현재 열려 있는 가 기존 오픈과 충돌하여 공유 위반이 발생합니다.

    OR

  • FILE_RESERVE_OPFILTER 플래그가 설정됩니다.

    OR

  • 다음 중 어느 것이든 처리 만들기 값이 지정됩니다.

    • FILE_SUPERSEDE
    • FILE_OVERWRITE
    • FILE_OVERWRITE_IF

    AND (위의 세 가지 조건 중 한 가지)

  • 열기가 발생하는 FILE_OBJECT 연결된 oplock 키는 oplock을 소유하는 FILE_OBJECT 연결된 oplock 키와 다릅니다.

oplock이 끊어진 경우:

  • 다음을 수행 하면 없음으로 중단합니다.

    • FILE_RESERVE_OPFILTER 플래그가 설정됩니다.

      OR

    • 다음 중 어느 것이든 처리 만들기 값이 지정됩니다.
      • FILE_SUPERSEDE
      • FILE_OVERWRITE
      • FILE_OVERWRITE_IF

    다른:

    • 읽기로 중단합니다.
  • 현재 열려 있는 가 기존 열기와 충돌하여 공유 위반이 발생하므로 oplock이 끊긴 경우 작업이 계속되기 전에 승인을 받아야 합니다.
  • 중단에 대한 승인이 필요하지만 다른 이유로 인해 oplock이 중단된 경우 작업은 즉시 계속됩니다(예: 승인을 기다리지 않고).

읽기-쓰기

다음과 같은 경우 IRP_MJ_CREATE 손상됨

  • 열기가 발생하는 FILE_OBJECT 연결된 oplock 키는 oplock을 소유하는 FILE_OBJECT 연결된 oplock 키와 다릅니다.

oplock이 끊어진 경우:

  • 다음을 수행 하면 없음으로 중단합니다.

    • FILE_RESERVE_OPFILTER 플래그가 설정됩니다.

      OR

    • 다음 중 어느 것이든 처리 만들기 값이 지정됩니다.
      • FILE_SUPERSEDE
      • FILE_OVERWRITE
      • FILE_OVERWRITE_IF

    다른:

    • 읽기로 중단합니다.
  • 작업이 계속되기 전에 승인을 받아야 합니다.

읽기-쓰기-핸들

다음과 같은 경우 IRP_MJ_CREATE 손상됨

  • 열기가 발생하는 FILE_OBJECT 연결된 oplock 키는 oplock을 소유하는 FILE_OBJECT 연결된 oplock 키와 다릅니다.

oplock이 끊어진 경우:

  • 다음을 수행 하면 없음으로 중단합니다.

    • FILE_RESERVE_OPFILTER 플래그가 설정됩니다.

      OR

    • 다음 중 어느 것이든 처리 만들기 값이 지정됩니다.
      • FILE_SUPERSEDE
      • FILE_OVERWRITE
      • FILE_OVERWRITE_IF

    다른:

    • 현재 열려 있는 가 기존 열기와 충돌하여 공유 위반이 발생할 경우 Read-Write 중단합니다. 그렇지 않으면 읽기 핸들로 중단합니다.

  • 작업이 계속되기 전에 승인을 받아야 합니다.

파일 시스템은 IRP_MJ_CREATE 작업을 처리할 때 Oplock 패키지 자체가 아닌 Batch 및 Filter oplock에 대한 추가 검사를 수행하며, 이는 파일 시스템이 oplock 패키지에 oplock 중단 처리를 수행하도록 요청하는지 여부에 영향을 줍니다. 한 데이터 스트림에 대한 작업이 동일한 파일의 다른 데이터 스트림(즉, 다음 조건 목록의 마지막 두 목록 항목)에 대한 oplock에 영향을 미칠 수 있는 경우입니다. 다음 조건 중 하나 이상이 충족되면 파일 시스템은 oplock 중단 처리를 수행하기 위해 oplock 패키지에 요청을 보냅니다.

  • 네트워크 쿼리가 열려 있고 KTM 트랜잭션이 있는 경우 중단을 요청합니다. 그렇지 않으면 네트워크 쿼리 열기에서 중단을 요청하지 마세요.

  • SUPERSEDE, OVERWRITE 또는 OVERWRITE_IF 작업이 대체 데이터 스트림에서 수행되고 FILE_SHARE_DELETE 지정되지 않고 주 데이터 스트림에 Batch 또는 Filter oplock이 있는 경우 주 데이터 스트림에서 Batch 또는 Filter oplock의 중단을 요청합니다.

  • SUPERSEDE, OVERWRITE 또는 OVERWRITE_IF 작업이 기본 데이터 스트림에서 수행되고 DELETE 액세스가 요청되었으며 대체 데이터 스트림에 Batch 또는 Filter oplocks가 있는 경우 배치 또는 필터 연산을 포함하는 모든 대체 데이터 스트림에서 일괄 처리 또는 필터 oplocks의 중단을 요청합니다.

파일 시스템이 oplock 패키지에 oplock 중단 처리를 수행하도록 요청하기로 결정하면 앞의 표에 설명된 규칙이 적용됩니다.

일괄 처리 및 필터 차단을 중단하는 검사 공유 액세스 검사가 수행되기 전에 발생합니다. 즉, 공유 위반으로 인해 열려 있는 요청이 실패하더라도 Batch 또는 Filter oplock이 중단됩니다.