Compartilhar via


CeOpenCallerBuffer

Windows Mobile Not SupportedWindows Embedded CE Supported

9/8/2008

Essa função verifica acessar e controla um ponteiro reserva do processo de origem para que ela pode ser acessada pelo atual processo. Ele retorna o ponteiro empacotado. Essa função aloca os recursos que devem ser liberados por um chamar subseqüente para CeCloseCallerBuffer.

Syntax

HRESULT CeOpenCallerBuffer(
  PVOID * ppDestMarshalled,
  PVOID pSrcUnmarshalled,
  DWORD cbSrc,
  DWORD ArgumentDescriptor
  BOOL ForceDuplicate
);

Parameters

  • ppDestMarshalled
    [out] Recebe um ponteiro que o atual processo pode usar para acessar a reserva sincronicamente.
  • pSrcUnmarshalled
    [no] Ponteiro para dados do chamador, seja acessar marcada, empacotado e possivelmente duplicado.
  • cbSrc
    [no] Tamanho da reserva do chamador, em bytes. Se a pasta ArgumentDescriptor é um WSTR ou ASTR, um tamanho de zero pode ser usado. Se o tamanho de uma seqüência de caracteres é não-zero, ele deve incluir um terminando NULL.
  • ArgumentDescriptor
    [no] Descritor explicando o tipo de argumento API a reserva é. De exemplo, ARG_I_WSTR ou ARG_O_PTR. ARG_DW não é um válido descritor de empacotamento.
  • ForceDuplicate
    [no] Indica se uma reserva temporária heap deve ser alocada no atual processo. Definido como FALSE para permitir CeOpenCallerBuffer Para selecionar o método mais eficiente empacotamento.

Return Value

  • E_ACCESSDENIED
    A reserva origem foi um inválido endereço, ou seu codificar não tem privilégios suficientes para acessar a memória.
  • E_INVALIDARG
    O pSrcUnmarshalled parâmetro foi NULL, o comprimento era zero ou algum outro argumento era inválido.
  • E_OUTOFMEMORY
    Falha de alocação de memória.
  • S_OK
    A alocação e duplicação, se necessário, com êxito.

Remarks

A duplicação impede assíncrono modificação da reserva, o chamador. Se a duplicação não for exigido para fins de segurança, não o utilize. Em seguida, CeOpenCallerBuffer pode selecionar o método empacotamento mais eficiente para melhor desempenho.

Se a duplicação é exigido, essa função aloca uma nova reserva heap, copia dados da reserva de origem para a reserva heap, se necessário devido a Em descritores ARG_I * ou ARG_IO * e retorna a nova reserva heap. Se a duplicação não for exigido, CeOpenCallerBuffer Pode ainda duplicado a reserva ou ele pode alocar virtual espaço de endereço no atual processo com a função VirtualAlloc e apontá-lo no ' o processo chamador memória com a função VirtualCopy para criar um alias para a mesma memória. Em todos os casos, qualquer exigido gravar-voltar para a reserva origem é gerenciado por CeCloseCallerBuffer.

Este chamar usa ReadProcessMemory e WriteProcessMemory. Se seu codificar é execução em um privilégio baixo o suficiente nível que ele não tem acessar essas APIs, essa falha chamar e retorna E_ACCESSDENIED.

Essa função não aloca quaisquer recursos se a chamar falhar ou se a reserva origem é NULL. Se este chamar falhar por algum motivo, o ponteiro retornado na ppDestMarshalled não é alterado.

Essa função abrirá a reserva chamador para síncrono acessar durante um chamar API. Você deve chamar CeAllocAsynchronousBuffer para usar a reserva retornada por CeOpenCallerBuffer de forma assíncrona. Não fechar a reserva chamador até depois de ter chamado CeFreeAsynchronousBuffer.

Essa função é protegida por __try/__except para que ele não lançar uma exceção ao acessar a entrada ponteiro pSrcUnmarshalled.

Usar as macros teve êxito e falha para testar a valor de retorno desta função.

Requirements

Header pkfuncs.h
Library coredll.lib
Windows Embedded CE Windows Embedded CE 6.0 and later

See Also

Reference

Kernel Buffer Marshaling Functions
MarshalledBuffer_t
CeCloseCallerBuffer
VirtualCopy
CeAllocAsynchronousBuffer
CeAllocDuplicateBuffer

Other Resources

VirtualAlloc
ReadProcessMemory
WriteProcessMemory
Kernel Migration