ILockBytes::LockRegion 方法 (objidl.h)
LockRegion 方法會限制對位元組陣列中指定位元組範圍的存取。
語法
HRESULT LockRegion(
[in] ULARGE_INTEGER libOffset,
[in] ULARGE_INTEGER cb,
[in] DWORD dwLockType
);
參數
[in] libOffset
指定範圍開頭的位元組位移。
[in] cb
以位元組為單位,指定要限制的範圍長度。
[in] dwLockType
指定存取範圍時所要求的限制類型。 此參數使用 LOCKTYPE 列舉的其中一個值。
傳回值
這個方法可以傳回下列其中一個值。
傳回碼 | 描述 |
---|---|
S_OK | 指定的位元組範圍已鎖定。 |
STG_E_INVALIDFUNCTION | 完全不支援鎖定,或不支援所要求的特定鎖定類型。 |
STG_E_ACCESSDENIED | 因為呼叫端的許可權不足,或另一個呼叫端開啟並鎖定檔案,所以拒絕存取。 |
STG_E_LOCKVIOLATION | 因為另一個呼叫端已開啟並鎖定檔案,所以拒絕存取。 |
STG_E_INVALIDHANDLE | 基礎檔案已提前關閉,或正確的磁碟片已被無效的磁碟取代。 |
備註
ILockBytes::LockRegion 會限制對指定位元組範圍的存取。 鎖定區域之後,其他人嘗試取得限制範圍的存取權必須失敗,並出現STG_E_ACCESSDENIED錯誤。
位元組範圍可以延伸超過位元組陣組的目前結尾。 超出陣列結尾的鎖定,有助於做為位元組陣組物件不同實例之間通訊的方法,而不需要變更實際屬於位元組陣列的數據。 例如,複合檔案的 ILockBytes 實作可能依賴鎖定超過數位目前結尾的鎖定作為訪問控制的方法,使用特定的鎖定區域來指出目前授與的許可權。
dwLockType 參數會使用LOCKTYPE列舉中的值,指定三種鎖定類型的其中一種。 這些類型如下所示:鎖定以排除其他寫入器、鎖定以排除其他讀取器或寫入器,以及只允許一個要求者取得指定範圍鎖定的鎖定。 第三種類型的鎖定通常是其他兩種鎖定類型之一的別名,並允許實作者新增其他行為。 指定的位元組陣列可能支援前兩個類型之一,或兩者皆支援。
若要判斷特定 ILockBytes 實作所支援的鎖定類型,您可以檢查呼叫 ILockBytes::Stat 所傳回之 STATSTG 結構的 grfLocksSupported 成員。
使用 ILockBytes::LockRegion 鎖定的任何區域之後,都必須呼叫與 libOffset、cb 和 dwLockType 參數完全相同的 ILockBytes::UnlockRegion 來明確解除鎖定。 必須先解除鎖定區域,才能釋放數據流。 無法個別鎖定兩個相鄰區域,然後使用單一解除鎖定呼叫解除鎖定。
來電者附註
由於支持的鎖定類型是選擇性的,而且在 ILockBytes 的不同實作中可能會有所不同,因此您必須提供程式碼來處理STG_E_INVALIDFUNCTION錯誤。實作者的注意事項
此方法的支持取決於使用 ILockBytes 實作之上建置的儲存物件方式。 如果您知道在任何指定時間只能開啟一個儲存物件,且該儲存裝置在位元組陣列之下,則 您的ILockBytes 實作不需要支持鎖定。 不過,如果可以同時開啟記憶體物件,則需要區域鎖定來協調它們。LockRegion 實作可以選擇支援所有、部分或無鎖定類型。 對於不支持的鎖定類型,實作應該會傳回STG_E_INVALIDFUNCTION。
規格需求
需求 | 值 |
---|---|
最低支援的用戶端 | Windows 2000 專業版 [傳統型應用程式 |UWP 應用程式] |
最低支援的伺服器 | Windows 2000 Server [傳統型應用程式 |UWP 應用程式] |
目標平台 | Windows |
標頭 | objidl.h |
程式庫 | Uuid.lib |
Dll | Ole32.dll |