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鎖定的任何區域之後,都必須呼叫與libOffset、cb和dwLockType參數完全相同的值來明確解除鎖定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 |