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 |