Compartilhar via


IMAPISupport::IStorageFromStream

Aplica-se a: Outlook 2013 | Outlook 2016

Implementa um objeto de armazenamento para acessar um fluxo.

HRESULT IStorageFromStream(
  LPUNKNOWN lpUnkIn,
  LPCIID lpInterface,
  ULONG ulFlags,
  LPSTORAGE FAR * lppStorageOut
);

Parâmetros

lpUnkIn

[in] Um ponteiro para um objeto stream.

lpInterface

[in] Um ponteiro para o IID (identificador de interface) que representa a interface a ser usada para acessar o fluxo apontado por lpUnkIn. Qualquer um dos seguintes valores é válido: IID_IStream, IID_ILockBytes ou nulo, o que indica que a interface IStream deve ser usada para acessar o fluxo.

ulFlags

[in] Um bitmask de sinalizadores que controla como o objeto de armazenamento deve ser criado em relação ao objeto stream. Por padrão, o armazenamento é criado com acesso somente leitura e o fluxo começa na posição zero no armazenamento. Os seguintes sinalizadores podem ser definidos:

STGSTRM_CREATE

Um novo objeto de armazenamento deve ser criado para o objeto stream.

STGSTRM_CURRENT

O objeto de armazenamento deve começar na posição atual do fluxo.

STGSTRM_MODIFY

O chamador deve ter permissão de leitura/gravação para o objeto de armazenamento retornado.

STGSTRM_RESET

O objeto de armazenamento deve começar na posição zero.

lppStorageOut

[out] Um ponteiro para um ponteiro para o objeto de armazenamento.

Valor de retorno

S_OK

O objeto de armazenamento foi criado com êxito.

Comentários

O método IMAPISupport::IStorageFromStream é implementado para todos os objetos de suporte do provedor de serviços. Os provedores de serviços chamam IStorageFromStream para criar um objeto de armazenamento a ser usado para abrir propriedades específicas. Os provedores de serviços que têm sua própria implementação da interface IStorage não precisam chamar IStorageFromStream.

O objeto de armazenamento criado por IStorageFromStream chama o método IUnknown::AddRef do fluxo para incrementar sua contagem de referência e, em seguida, decrementa a contagem quando o armazenamento é lançado.

Notas para chamadores

Quando o método IMAPIProp::OpenProperty de um de seus objetos é chamado para abrir uma propriedade com a interface IStorage , execute as seguintes tarefas:

  1. Abra um objeto stream com permissão de leitura/gravação para a propriedade.

  2. Marque internamente o fluxo de propriedades como um objeto de armazenamento.

  3. Chame IStorageFromStream para gerar um objeto de armazenamento.

  4. Retorne um ponteiro para este objeto de armazenamento.

Se você implementar interfaces adicionais que usam o objeto de armazenamento, crie um objeto que embrulhe o objeto de armazenamento e implemente um método IUnknown::QueryInterface de nível superior.

Não permita que uma propriedade seja aberta com a interface IStream se ela for criada com iStorage. Por outro lado, não permita que uma propriedade seja aberta com a interface IStorage se ela foi criada com o IStream.

Com uma exceção, é aceitável usar a interface IStreamDocfile para transmitir um objeto de armazenamento de um contêiner para outro, mas o identificador de interface IID_IStreamDocfile deve ser passado no parâmetro lpInterface do método OpenProperty.

Confira também

IMAPIProp::OpenProperty

IMAPISupport: IUnknown