IStream::LockRegion 方法 (objidl.h)

LockRegion方法會限制對資料流程中指定位元組範圍的存取。 支援這項功能是選擇性的,因為某些檔案系統未提供此功能。

語法

HRESULT LockRegion(
  [in] ULARGE_INTEGER libOffset,
  [in] ULARGE_INTEGER cb,
  [in] DWORD          dwLockType
);

參數

[in] libOffset

整數,指定範圍開頭的位元組位移。

[in] cb

整數,指定要限制的範圍長度,以位元組為單位。

[in] dwLockType

指定存取範圍時所要求的限制。

傳回值

這個方法可以傳回其中一個值。

傳回碼 描述
S_OK 指定的位元組範圍已鎖定。
E_PENDING 僅限非同步儲存體:目前無法使用部分或所有資料流程的資料。
STG_E_INVALIDFUNCTION 完全不支援鎖定,或不支援所要求的特定鎖定類型。
STG_E_LOCKVIOLATION 支援要求的鎖定,但因為現有的鎖定而無法授與。
STG_E_REVERTED 物件已因交易樹狀結構中上方的還原作業而失效。

備註

資料流程的位元組範圍可以擴充。 鎖定資料流程的擴充範圍很實用,因為串流不同實例之間的通訊方法,而不需變更實際屬於資料流程的資料。

支援三種類型的鎖定:鎖定以排除其他寫入器、鎖定以排除其他讀取器或寫入器,以及只允許一個要求者取得指定範圍的鎖定,這通常是其他兩種鎖定類型的其中一個別名。 指定的資料流程實例可能支援前兩種類型之一,或兩者皆支援。 鎖定類型是由 dwLockType所指定,使用 LOCKTYPE 列舉中的值。

使用IStream::LockRegion鎖定的任何區域之後,都必須呼叫與libOffsetcbdwLockType參數完全相同的值來明確解除鎖定IStream::UnlockRegion。 必須先解除鎖定區域,才能釋放資料流程。 兩個連續的區域無法分開鎖定,然後使用單一解除鎖定呼叫解除鎖定。

呼叫端的附注

由於支援的鎖定類型是選擇性的,而且可能會因 IStream的不同實作而有所不同,因此您必須提供程式碼來處理STG_E_INVALIDFUNCTION錯誤。

LockRegion方法在複合檔案實作中沒有任何作用,因為實作不支援範圍鎖定。

實作者的注意事項

對於資料流程物件的實作支援是選擇性的,因為基礎檔案系統可能不支援此方法。 支援的鎖定類型也是選擇性的。 如果不支援要求的鎖定類型,則會傳回STG_E_INVALIDFUNCTION錯誤。

規格需求

   
最低支援的用戶端 Windows 2000 專業版 [傳統型應用程式|UWP 應用程式]
最低支援的伺服器 Windows 2000 Server [傳統型應用程式|UWP 應用程式]
目標平臺 Windows
標頭 objidl.h
程式庫 Uuid.lib
DLL Ole32.dll

另請參閱

IStream - 複合檔案實作

IStream::UnlockRegion

LOCKTYPE