MarshalledBuffer_t
9/8/2008
Essa classe é um wrapper para o CeOpenCallerBuffer, a CeCloseCallerBuffer, a CeAllocAsynchronousBuffere as funções CeFreeAsynchronousBuffer. Apenas usá-lo com incorporado ponteiros que foram ainda não esteja acesso-verificado ou empacotados pelo kernel.
Para duplicado uma reserva que já foi empacotada, use a função DuplicatedBuffer_t. Para obter assíncrono acessar para uma reserva que já foi empacotada, use a função AsynchronousBuffer_t.
Syntax
class MarshalledBuffer_t {
public:
MarshalledBuffer_t()
MarshalledBuffer_t()
MarshalledBuffer_t(
PVOID pSrcUnmarshalled,
DWORD cbSrc,
DWORD ArgumentDescriptor,
BOOL ForceDuplicate = TRUE,
BOOL Asynchronous = FALSE
);
MarshalledBuffer_t(
PCVOID pSrcUnmarshalled,
DWORD cbSrc,
DWORD ArgumentDescriptor,
BOOL ForceDuplicate = TRUE,
BOOL Asynchronous = FALSE
);
HRESULT Marshal(
PVOID pSrcUnmarshalled,
DWORD cbSrc,
DWORD ArgumentDescriptor,
BOOL ForceDuplicate = TRUE,
BOOL Asynchronous = FALSE
);
HRESULT Marshal(
PCVOID pSrcUnmarshalled,
DWORD cbSrc,
DWORD ArgumentDescriptor,
BOOL ForceDuplicate = TRUE,
BOOL Asynchronous = FALSE
);
HRESULT Flush();
HRESULT Unmarshal();
LPVOID ptr() const;
DWORD size() const;
};
Métodos
Métodos | Descrição |
---|---|
|
Acesso-verifica e controla um ponteiro reserva do processo de origem, para que ela pode ser acessada pelo atual processo. Expõe o ponteiro empacotado com o PTR acessador. Qualquer alocado recursos relacionado para o empacotamento é liberados somente por um chamar subseqüente para Desempacotar, ou o destrutor. Em geral, você poderia usar ou o construtor usar como padrão e Empacotamento Para empacotar a reserva ou o construtor empacotamento. Use o antigo método se você precisar Um HRESULT. Da mesma forma, você pode permitir que o destrutor para recursos empacotamento versão ou usar Desempacotar. Se um HRESULT é exigido, use o Desempacotar função. |
|
Se empacotamento falha, PTR retorna NULL, e tamanho retursn zero. Caso contrário, a reserva empacotada é acessível com PTR e tamanho. Para obter mais informações, consulte CeOpenCallerBuffer e CeAllocAsynchronousBuffer. |
|
Leva um construtor pSrcUnmarshalled. Esse método pode ser usado apenas com tipos ARG_I_ *. |
|
Leva um construtor pSrcMarshalled. |
|
Leva um construtor pSrcMarshalled. Este método só pode ser usado com tipos ARG_I_ *. |
|
Leva um construtor pSrcMarshalled. |
|
Leva a const pSrcMarshalled. Esse método pode ser usado apenas com tipos ARG_I_ *. |
|
Uma vez um MarshalledBuffer é empacotado usando o construtor empacotamento ou a Empacotamento método, ele não pode ser reutilizado por chamado Empacotamento até depois Desempacotar é chamado. Tentar fazer isso retornará ERROR_ALREADY_EXISTS. Se Empacotamento falhar, PTR retorna NULL, e tamanho Retorna zero. Caso contrário, a reserva empacotada é acessível com PTR e tamanho. Para obter mais informações, consulte CeOpenCallerBuffer e CeAllocAsynchronousBuffer. |
|
Leva um construtor pSrcUnmarshalled. Esse método pode ser usado apenas com tipos ARG_I_ *. |
|
Se a reserva já foi unmarshaled ou se ele não for um assíncrono reserva, este método falhará com ERROR_INVALID_PARAMETER. Para obter mais informações, consulte CeFlushAsynchronousBuffer. |
|
Se a reserva já foi unmarshaled, este método falhará com ERROR_ALREADY_EXISTS. Para obter mais informações, consulte CeCloseCallerBuffer. |
|
Retorna um ponteiro para a reserva empacotada, ou NULL se a reserva não foi empacotada ou já foi unmarshaled. |
|
Retorna o tamanho da reserva empacotada ou zero se a reserva não foi empacotada ou já foi unmarshaled. |
Remarks
Você pode escolher para otimizar grande assíncrono reserva acessa usando o sinalizador MARSHAL_FORCE_ALIAS. Se seu codificar é execução dentro de processo kernel e você estiver usando um microprocessador ARM com um praticamente marcados armazenar em cache, você pode transmitir MARSHAL_FORCE_ALIAS como parte das ArgumentDescriptor. Em todos os outras CPUs, MARSHAL_FORCE_ALIAS não tem nenhum efeito.
Não use o sinalizador MARSHAL_FORCE_ALIAS a menos que você esteja usando buffers maiores 16 KB.
Nas CPUs ARM que usam um praticamente marcados armazenar em cache, dentro de processo kernel, CeAllocAsynchronousBuffer Cria um duplicado copiar da memória no heap Por padrão. Em grandes buffers, criando o duplicado heap pode afetar desempenho. Para evitar duplicação, transmitir o sinalizador MARSHAL_FORCE_ALIAS para causar CeAllocAsynchronousBuffer Para criar um alias, em vez disso. No entanto, a criação de memória de alias em ARM CPUs que usam um praticamente marcados causas armazenar em cache de origem e destino memória para serem acessados como uncached, até que o alias é destruída por CeFreeAsynchronousBuffer. Isso significa que o acessa memória se tornar mais lenta na origem e destino.
Em todas as CPUs, Dentro usuário-modo processos, CeAllocAsynchronousBuffer Sempre cria um duplicado da memória com VirtualCopy, independentemente se o sinalizador MARSHAL_FORCE_ALIAS é passado. Não é possível para forçar a criação de um alias do modo usuário.
Se você transmitir MARSHAL_FORCE_ALIAS para CeAllocAsynchronousBuffer, você deve também transmiti-lo quando você chamar CeFlushAsynchronousBuffer e CeFreeAsynchronousBuffer. Não passa pode causar o sistema fique sem resposta ou vazamentos recurso.
A seguinte tabela descreve os descritores.
Descritores | Finalidade |
---|---|
ARG_I_PTR |
Input-only ponteiro. |
ARG_I_WSTR |
Input-only seqüência de caracteres Unicode. |
ARG_I_ASTR |
Input-only seqüência de caracteres ASCII. |
ARG_I_PDW |
Input-only ponteiro para uma DWORD. |
ARG_O_PTR |
Ponteiro Output-only. |
ARG_O_PDW |
OUTPUT-only ponteiro para uma DWORD. |
ARG_O_PI64 |
Valor de saída - Apenas ponteiro para uma 64 - bit. |
ARG_IO_PTR |
Entrada e saída ponteiro. |
ARG_IO_PDW |
Ponteiro E/S para uma DWORD. |
ARG_IO_PI64 |
Ponteiro E/S para um 64-bit valor. |
Requirements
Header | marshal.hpp |
Library | coredll.lib |
Windows Embedded CE | Windows Embedded CE 6.0 and later |
See Also
Reference
Kernel Buffer Marshaling Classes
CeOpenCallerBuffer
CeCloseCallerBuffer
CeAllocAsynchronousBuffer
CeFlushAsynchronousBuffer
CeFreeAsynchronousBuffer
DuplicatedBuffer_t
AsynchronousBuffer_t
Other Resources
Developing a Device Driver
Kernel Migration
Bringing Up a Hardware Platform