Método IByteBuffer::LockRegion
[O método LockRegion está disponível para uso nos sistemas operacionais especificados na seção Requisitos. Ele não está disponível para uso no Windows Server 2003 com Service Pack 1 (SP1) e posterior, Windows Vista, Windows Server 2008 e versões subsequentes do sistema operacional. A interface IStream fornece funcionalidade semelhante.]
O método LockRegion restringe o acesso a um intervalo especificado de bytes no objeto buffer.
Sintaxe
HRESULT LockRegion(
[in] LONG libOffset,
[in] LONG cb,
[in] LONG dwLockType
);
Parâmetros
-
libOffset [in]
-
Inteiro que especifica o deslocamento de bytes para o início do intervalo.
-
cb [in]
-
Inteiro que especifica o comprimento do intervalo, em bytes, a ser restrito.
-
dwLockType [in]
-
Especifica as restrições que estão sendo solicitadas ao acessar o intervalo. Esse pode ser um dos valores na tabela a seguir.
Valor Significado - LOCK_WRITE
O intervalo especificado de bytes pode ser aberto e lido várias vezes, mas a gravação no intervalo bloqueado é proibida, exceto pelo proprietário que recebeu esse bloqueio. - LOCK_EXCLUSIVE
A gravação no intervalo especificado de bytes é proibida, exceto pelo proprietário que recebeu esse bloqueio. - LOCK_ONLYONCE
Se esse bloqueio for concedido, nenhum outro bloqueio LOCK_ONLYONCE poderá ser obtido no intervalo. Normalmente, esse tipo de bloqueio é um alias para algum outro tipo de bloqueio. Portanto, implementações específicas podem ter um comportamento adicional associado a esse tipo de bloqueio.
Valor retornado
O valor retornado é um HRESULT. Um valor de S_OK indica que a chamada foi bem-sucedida.
Comentários
O intervalo de bytes pode se estender além do final atual do fluxo. O bloqueio além do final de um 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 LockRegion deve ser desbloqueada explicitamente chamando IByteBuffer::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.
Exemplos
O exemplo a seguir mostra a restrição do acesso a um intervalo de bytes.
HRESULT hr;
// Lock a region.
hr = pIByteBuff->LockRegion(0, 10, LOCK_EXCLUSIVE);
if (FAILED(hr))
printf("Failed IByteBuffer::LockRegion\n");
Requisitos
Requisito | Valor |
---|---|
Cliente mínimo com suporte |
Windows XP [somente aplicativos da área de trabalho] |
Servidor mínimo com suporte |
Windows Server 2003 [somente aplicativos da área de trabalho] |
Fim do suporte ao cliente |
Windows XP |
Fim do suporte ao servidor |
Windows Server 2003 |
Cabeçalho |
|
Biblioteca de tipos |
|
DLL |
|
IID |
IID_IByteBuffer é definido como E126F8FE-A7AF-11D0-B88A-00C04FD424B9 |