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