CeOpenCallerBuffer
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