CeAllocDuplicateBuffer
9/8/2008
Essa função abstrai o exigido trabalho Fazer Seguro cópias dos parâmetros API. Não o utilize para buffers diferente parâmetros API. Não esperados de reserva duplicada seja acessível depois retorna o chamar API.
Syntax
HRESULT CeAllocDuplicateBuffer(
PVOID * ppDestDuplicate,
PVOID pSrcMarshalled,
DWORD cbSrc,
DWORD ArgumentDescriptor
);
Parameters
- ppDestDuplicate
[out] Recebe um ponteiro para uma reserva heap recém-alocado.
- pSrcMarshalled
[no] Ponteiro para dados do chamador que já foi empacotados.
- cbSrc
[no] Tamanho da reserva do chamador, em bytes. Se 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 parâmetro API a reserva é. De exemplo, ARG_I_WSTR ou ARG_O_PTR. ARG_DW não é um válido descritor para duplicação.
Return Value
- E_ACCESSDENIED
A reserva origem foi um inválido endereço, possivelmente um ponteiro que não foi empacotado.
- E_INVALIDARG
O pSrcMarshalled parâmetro foi NULL, ou o comprimento era zero.
- E_OUTOFMEMORY
Falha de alocação de memória.
- S_OK
A alocação e copiar teve êxito.
Remarks
Esta função copia dados da reserva de origem para a reserva heap, se necessário, aloca uma nova reserva heap devido a Em descritores ARG_I * ou ARG_IO * e retorna a nova reserva heap. Essa função aloca os recursos que devem ser liberados por um chamar subseqüente para CeFreeDuplicateBuffer. Qualquer exigido gravar-voltar para a reserva origem é gerenciado por CeFreeDuplicateBuffer, se necessário devido a Saída descritores ARG_IO * ou ARG_O *.
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. Acessar apenas reserva do chamador como passada para o API.
Essa função não aloca qualquer memória se a chamar falhar ou se a reserva origem foi NULL. Se nenhuma memória é alocada, o ponteiro retornados em ppDestDuplicate é NULL.
Não uso CeAllocDuplicateBuffer Com uma reserva empacotada por CeOpenCallerBuffer. Em vez disso, ter CeOpenCallerBuffer Fazer a duplicação.
Você não precisará chamar CeAllocAsynchronousBuffer para usar a reserva retornada por CeAllocDuplicateBuffer de forma assíncrona. O duplicado reserva pode ser usada até que ele seja fechado por CeCloseCallerBuffer. CeAllocAsynchronousBuffer Não trabalho de buffers que tenham sido duplicados por CeAllocDuplicateBuffer.
Essa função é protegida por __try/__except para que ele faz não para lançar uma exceção ao acessar a entrada ponteiro pSrcMarshalled.
Requirements
Header | pkfuncs.h |
Library | coredll.lib |
Windows Embedded CE | Windows Embedded CE 6.0 and later |
See Also
Reference
Kernel Buffer Marshaling Functions
DuplicatedBuffer_t
CeFreeDuplicateBuffer
CeOpenCallerBuffer
CeAllocAsynchronousBuffer