IDirectWriterLock-복합 파일 구현

IDirectWriterLock 의 복합 파일 구현에서는 단일 작성기 및 다중 판독기를 사용 하 여 직접 모드에서 복합 파일을 여는 방법을 제공 합니다.

복합 파일은 STGM direct 플래그를 사용 하 여 직접 모드에서 열 수 있습니다 _ . IDirectWriterLock 인터페이스는 _ | _ _ _ 스냅숏 복사의 오버 헤드를 요구 하지 않고 직접 모드에서 stgm READWRITE stgm 공유 거부 쓰기 플래그를 유효한 것으로 설정 합니다.

STGM 트 랜 잭 트 플래그를 사용 하 여 트랜잭션 모드에서 복합 파일을 열면 _ stgm _ READWRITE | stgm _ 공유 _ 거부 _ 쓰기 플래그를 사용 하 여 여러 판독기와 단일 작성기를 사용할 수도 있습니다. 그러나이 경우 판독기에 대 한 파일의 스냅숏 복사본이 생성 됩니다. 일반적으로 스크래치 복사의 오버 헤드가 발생 합니다.

사용 시기

직접 모드에서 저장소 (STGM direct)를 열 때 _ stgm _ READWRITE | stgm _ 공유 _ 거부 _ 쓰기 플래그를 사용 하 여 시스템 제공 IDirectWriterLock의 구현을 사용 합니다.

IDirectWriterLock에 대 한 포인터를 가져오려면 IStorage 에서 QueryInterface 를 호출 하 여 복합 파일의 루트 저장소 개체를 가져옵니다.

IDirectWriterLock:: WaitForWriteAccess 를 호출 하 여 복합 파일에 대 한 배타적 쓰기 액세스 권한을 얻습니다. IDirectWriterLock:: ReleaseWriteAccess 를 호출 하 여 배타적 쓰기 액세스를 해제 합니다.

IDirectWriterLock:: HaveWriteAccess 는 파일이 현재 잠겨 있는지 여부를 나타냅니다.

설명

단일 작성기 다중 판독기 기능의 복합 파일 구현은 범위 잠금을 기반으로 합니다. 작성자는 모든 현재 판독기가 저장소를 닫은 후에 쓸 저장소에 대 한 단독 액세스 권한을 얻습니다. 작성기가 활성화 되어 있는 동안에는 이후 판독기에서 저장소를 열 수 없습니다. 작성기는 IDirectWriterLock:: WaitForWriteAccess 를 호출 하 여 배타적 쓰기 액세스 권한을 얻습니다. 그런 다음 작성기는 IDirectWriterLock:: ReleaseWriteAccess 를 호출 하 여 저장소를 해제 해야 합니다.

이 단일 판독기, 다중 기록기 모드에서 쓰려면 IDirectWriterLock:: WaitForWriteAccess 에 대 한 호출이 필요 합니다. IDirectWriterLock:: WaitForWriteAccess first를 호출 하지 않고 파일에 쓰려고 하면 stg _ E _ accessdenied가 발생 합니다. 이 오류는 작성기가 처음에 파일을 열었지만 현재 판독기에 파일이 열려 있지 않은 경우에도 반환 됩니다.

마샬링 고려 사항

사용자 지정 마샬링은 일반적으로 복합 파일이 동일한 컴퓨터의 다른 프로세스로 마샬링될 때 사용 됩니다. 저장소를 마샬링할 때 액세스 권한은 고려 되지 않으며 원래 마샬링 프로세스와 동일한 액세스 모드 및 권한을 사용 하 여 IStorage 포인터가 새 프로세스로 전달 됩니다. 액세스 모드에 대 한 자세한 내용은 Stgm 상수를 참조 하십시오. 마샬링을 수행 하는 동안 배타적 쓰기 액세스를 보장 하기 위해 잠금을 수행 하거나 확인 하지 않습니다. 이 경우 단일 작성기, 다중 판독기 모드에서 열린 복합 파일에는 단일 작성기 정책이 적용 되지 않습니다. 대신, 강제 적용은 복합 파일 구현에 의해 내부적으로 처리 됩니다.

다른 프로세스에는 마샬링할 때 IStorage 포인터가 다른 프로세스로 전달 되기 때문에 두 프로세스가 동일한 복합 파일에 동시에 액세스할 수 있습니다. 호출자가 IDirectWriterLock:: WaitForWriteAccess를 호출 하 여 저장소에 대 한 배타적 쓰기 액세스 권한을 얻은 경우에도 마샬링된 버전은 동시에 액세스할 수도 있습니다. 단일 작성기에서 파일에 액세스 하는 동안에는 마샬링된 버전이 강제로 닫히지 않습니다. 이 경우 복합 파일 구현은 내부적으로 쓰기를 동기화 합니다.

단일 작성기가, IDirectWriterLock:: WaitForWriteAccess를 호출 하 여 배타적 액세스 권한을 얻는 경우 마샬링된 저장소에도 쓰기 권한이 있으며 IDirectWriterLock:: waitforwriteaccess 를 호출할 필요가 없습니다. 두 프로세스 모두 쓰기 권한이 있으며 동기화는 내부 복합 파일 구현에 의해 제어 됩니다.

IDirectWriterLock