Método IStream::LockRegion (objidl.h)

O método LockRegion restringe o acesso a um intervalo especificado de bytes no fluxo. O suporte a essa funcionalidade é opcional, pois alguns sistemas de arquivos não a fornecem.

Sintaxe

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

Parâmetros

[in] libOffset

Inteiro que especifica o deslocamento de bytes para o início do intervalo.

[in] cb

Inteiro que especifica o comprimento do intervalo, em bytes, a ser restrito.

[in] dwLockType

Especifica as restrições que estão sendo solicitadas ao acessar o intervalo.

Retornar valor

Esse método pode retornar um desses valores.

Código de retorno Descrição
S_OK O intervalo especificado de bytes foi bloqueado.
E_PENDING Somente armazenamento assíncrono: parte ou todos os dados do fluxo estão indisponíveis no momento.
STG_E_INVALIDFUNCTION Não há suporte para bloqueio ou não há suporte para o tipo específico de bloqueio solicitado.
STG_E_LOCKVIOLATION Há suporte para bloqueio solicitado, mas não pode ser concedido devido a um bloqueio existente.
STG_E_REVERTED O objeto foi invalidado por uma operação de reverter acima dele na árvore de transações.

Comentários

O intervalo de bytes do fluxo pode ser estendido. Bloquear um intervalo estendido para o fluxo é útil como um método de comunicação entre diferentes instâncias do fluxo sem alterar dados que, na verdade, fazem parte do fluxo.

Há suporte para três tipos de bloqueio: bloqueio para excluir outros gravadores, bloqueio para excluir outros leitores ou gravadores e bloqueio que permite que apenas um solicitante obtenha um bloqueio no intervalo determinado, que geralmente é um alias para um dos outros dois tipos de bloqueio. Uma determinada instância de fluxo pode dar suporte a um dos dois primeiros tipos ou ambos. O tipo de bloqueio é especificado por dwLockType, usando um valor da enumeração LOCKTYPE .

Qualquer região bloqueada com IStream::LockRegion deve ser desbloqueada explicitamente chamando IStream::UnlockRegion com exatamente os mesmos valores para os parâmetros libOffset, cb e dwLockType . A região deve ser desbloqueada antes que o fluxo seja liberado. Duas regiões adjacentes não podem ser bloqueadas separadamente e desbloqueadas com uma única chamada de desbloqueio.

Anotações para chamadores

Como o tipo de bloqueio com suporte é opcional e pode variar em diferentes implementações do IStream, você deve fornecer código para lidar com o erro de STG_E_INVALIDFUNCTION.

O método LockRegion não tem efeito na implementação de arquivo composto, pois a implementação não dá suporte ao bloqueio de intervalo.

Anotações aos implementadores

O suporte para esse método é opcional para implementações de objetos de fluxo, pois ele pode não ter suporte pelo sistema de arquivos subjacente. O tipo de bloqueio com suporte também é opcional. O erro STG_E_INVALIDFUNCTION será retornado se não houver suporte para o tipo de bloqueio solicitado.

Requisitos

Requisito Valor
Cliente mínimo com suporte Windows 2000 Professional [aplicativos da área de trabalho | Aplicativos UWP]
Servidor mínimo com suporte Windows 2000 Server [aplicativos da área de trabalho | Aplicativos UWP]
Plataforma de Destino Windows
Cabeçalho objidl.h
Biblioteca Uuid.lib
DLL Ole32.dll

Confira também

IStream – Implementação de arquivo composto

IStream::UnlockRegion

LOCKTYPE