Condividi tramite


Metodo ILockBytes::LockRegion (objidl.h)

Il metodo LockRegion limita l'accesso a un intervallo specificato di byte nella matrice di byte.

Sintassi

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

Parametri

[in] libOffset

Specifica l'offset di byte per l'inizio dell'intervallo.

[in] cb

Specifica, in byte, la lunghezza dell'intervallo da limitare.

[in] dwLockType

Specifica il tipo di restrizioni richieste per l'accesso all'intervallo. Questo parametro usa uno dei valori dell'enumerazione LOCKTYPE .

Valore restituito

Questo metodo può restituire uno di questi valori.

Codice restituito Descrizione
S_OK L'intervallo di byte specificato è stato bloccato.
STG_E_INVALIDFUNCTION Il blocco non è supportato o il tipo specifico di blocco richiesto non è supportato.
STG_E_ACCESSDENIED Accesso negato perché il chiamante non dispone di autorizzazioni sufficienti o un altro chiamante ha il file aperto e bloccato.
STG_E_LOCKVIOLATION Accesso negato perché un altro chiamante ha il file aperto e bloccato.
STG_E_INVALIDHANDLE Un file sottostante è stato chiuso prematuramente o il disco floppy corretto è stato sostituito da uno non valido.

Commenti

ILockBytes::LockRegion limita l'accesso all'intervallo di byte specificato. Una volta bloccata un'area, i tentativi da parte di altri utenti di accedere all'intervallo con restrizioni devono avere esito negativo con l'errore STG_E_ACCESSDENIED.

L'intervallo di byte può estendersi oltre la fine corrente della matrice di byte. Il blocco oltre la fine di una matrice è utile come metodo di comunicazione tra istanze diverse dell'oggetto matrice di byte senza modificare i dati che fanno effettivamente parte della matrice di byte. Ad esempio, un'implementazione di ILockBytes per i file composti può basarsi sul blocco oltre la fine corrente della matrice come mezzo di controllo di accesso, usando aree bloccate specifiche per indicare le autorizzazioni attualmente concesse.

Il parametro dwLockType specifica uno dei tre tipi di blocco, usando i valori dell'enumerazione LOCKTYPE . I tipi sono i seguenti: blocco per escludere altri writer, blocco per escludere altri lettori o writer e blocco che consente a un solo richiedente di ottenere un blocco sull'intervallo specificato. Questo terzo tipo di blocco è in genere un alias per uno degli altri due tipi di blocco e consente a un implementatore di aggiungere anche altri comportamenti. Una determinata matrice di byte può supportare uno dei primi due tipi o entrambi.

Per determinare i tipi di blocco supportati da un'implementazione ILockBytes specifica, è possibile esaminare il membro grfLocksSupported della struttura STATSTG restituito da una chiamata a ILockBytes::Stat.

Qualsiasi area bloccata con ILockBytes::LockRegion deve essere sbloccata in un secondo momento chiamando ILockBytes::UnlockRegion con esattamente gli stessi valori per i parametri libOffset, cb e dwLockType . L'area deve essere sbloccata prima del rilascio del flusso. Due aree adiacenti non possono essere bloccate separatamente e quindi sbloccate con una singola chiamata di sblocco.

Note ai chiamanti

Poiché il tipo di blocco supportato è facoltativo e può variare in implementazioni diverse di ILockBytes, è necessario fornire il codice per gestire l'errore STG_E_INVALIDFUNCTION.

Note per gli implementatori

Il supporto per questo metodo dipende dalla modalità di utilizzo dell'oggetto di archiviazione basato sull'implementazione ILockBytes . Se si sa che è possibile aprire un solo oggetto di archiviazione in qualsiasi momento nel dispositivo di archiviazione sottostante la matrice di byte, l'implementazione ILockBytes non deve supportare il blocco. Tuttavia, se sono possibili più aperture simultanee di un oggetto di archiviazione, è necessario bloccare l'area per coordinarle.

Un'implementazione lockRegion può scegliere di supportare tutti, alcuni o nessuno dei tipi di blocco. Per i tipi di blocco non supportati, l'implementazione deve restituire STG_E_INVALIDFUNCTION.

Requisiti

Requisito Valore
Client minimo supportato Windows 2000 Professional [app desktop | App UWP]
Server minimo supportato Windows 2000 Server [app desktop | App UWP]
Piattaforma di destinazione Windows
Intestazione objidl.h
Libreria Uuid.lib
DLL Ole32.dll

Vedi anche

ILockBytes - Implementazione di File-Based

ILockBytes - Implementazione della memoria globale

ILockBytes::Stat

ILockBytes::UnlockRegion

IStream::LockRegion

LOCKTYPE