IoCheckShareAccess 함수(wdm.h)

파일 개체에 대한 공유 액세스가 허용되는지 여부를 검사 위해 IoCheckShareAccess 루틴은 파일 시스템 드라이버(FSD) 또는 기타 최상위 드라이버에 의해 호출됩니다.

구문

NTSTATUS IoCheckShareAccess(
  [in]      ACCESS_MASK   DesiredAccess,
  [in]      ULONG         DesiredShareAccess,
  [in, out] PFILE_OBJECT  FileObject,
  [in, out] PSHARE_ACCESS ShareAccess,
  [in]      BOOLEAN       Update
);

매개 변수

[in] DesiredAccess

현재 열린 요청에 대해 지정된 FileObject에 대한 원하는 액세스 유형을 나타내는 ACCESS_MASK 값을 지정합니다. 드라이버는 IRP_MJ_CREATE 요청에서 요청된 액세스를 취한 다음 각 보안 설명자에 대해 SeAccessCheck 를 적용하여 부여된 실제 액세스를 확인하여 이 매개 변수의 값을 계산합니다. 부여된 액세스 권한이 원하는 액세스보다 더 제한적인 경우 이는 오류이며 드라이버는 STATUS_ACCESS_DENIED 상태 사용하여 현재 IRP를 완료해야 합니다. (SeAccessCheck는 부여된 액세스에서 MAXIMUM_ALLOWED 비트를 지웁니다. 원하는 액세스 권한을 부여된 액세스와 비교할 때 해당 비트를 사용하지 않도록 합니다.) 그런 다음 드라이버는 부여된 액세스 권한을 DesiredAccess 값으로 전달합니다.

[in] DesiredShareAccess

현재 열려 있는 요청에 대해 FileObject 에 대한 원하는 유형의 공유 액세스를 지정합니다. 이 매개 변수의 값은 일반적으로 열려 있는 요청이 수행되었을 때 I/O 관리자가 파일 시스템에 전달한 ShareAccess 또는 최상위 드라이버와 동일합니다. 이 값은 0이거나 다음의 조합일 수 있습니다.

FILE_SHARE_READ

FILE_SHARE_WRITE

FILE_SHARE_DELETE

[in, out] FileObject

현재 열려 있는 요청에 대한 액세스를 검사 파일 개체에 대한 포인터입니다.

[in, out] ShareAccess

FileObject와 연결된 일반적인 공유 액세스 데이터 구조에 대한 포인터입니다. 드라이버는 이 구조를 불투명으로 처리해야 합니다.

[in] Update

FileObject에 대한 공유 액세스 상태 업데이트할지 여부를 지정합니다. TRUE의 부울 값은 열려 있는 요청이 허용되는 경우 이 루틴이 파일 개체에 대한 공유 액세스 정보를 업데이트한다는 것을 의미합니다.

반환 값

IoCheckShareAccess 는 요청자의 파일 개체 액세스가 현재 열려 있는 방식과 호환되는 경우 STATUS_SUCCESS 반환합니다. 공유 위반으로 인해 요청이 거부되면 STATUS_SHARING_VIOLATION 반환됩니다.

설명

IoCheckShareAccess 는 파일 개체 열기 요청을 확인하여 지정된 원하는 액세스 및 공유 액세스 형식이 현재 파일 개체에 액세스하는 방식과 호환되는지 여부를 확인합니다.

파일 시스템은 FCB(파일 제어 블록)라는 구조를 통해 파일에 대한 상태를 유지 관리합니다. SHARE_ACCESS 열려 있는 모든 파일에 현재 액세스하는 방법을 설명하는 구조체입니다. 이 상태는 각 파일 개체에 대해 열린 상태의 일부로 FCB에 포함됩니다. 각 파일 개체에는 하나의 공유 액세스 구조만 있어야 합니다. 다른 최고 수준의 드라이버는 이러한 드라이버의 디바이스 개체를 나타내는 파일 개체가 열릴 때 요청된 액세스를 검사 위해 이 루틴을 호출할 수 있습니다.

IoCheckShareAccess 는 원자성 작업이 아닙니다. 따라서 이 루틴을 호출하는 드라이버는 공유 액세스 수의 손상을 방지하기 위해 뮤텍스 또는 리소스 잠금과 같은 일종의 잠금을 통해 IoCheckShareAccess 에 전달된 공유 파일 개체를 보호해야 합니다.

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows 2000부터 사용할 수 있습니다.
대상 플랫폼 유니버설
헤더 wdm.h(Wdm.h, Ntddk.h, Ntifs.h 포함)
라이브러리 NtosKrnl.lib
DLL NtosKrnl.exe
IRQL PASSIVE_LEVEL
DDI 규정 준수 규칙 HwStorPortProhibitedDDIs(storport), IrqlIoPassive2(wdm), PowerIrpDDis(wdm)

추가 정보

ACCESS_MASK

IoCreateFile

IoCreateFileEx

IoGetRelatedDeviceObject

IoRemoveShareAccess

IoSetShareAccess

IoUpdateShareAccess