AsynchronousBuffer_t

Windows Mobile Not SupportedWindows Embedded CE Supported

9/8/2008

Essa classe é um wrapper para CeAllocAsynchronousBuffer e CeFreeAsynchronousBuffer. Ele é devem ser utilizados com ponteiros já acesso-verificado ou empacotado, o kernel que exigem assíncrono acessar reserva. Ele deve ser usado somente no modo kernel. Para informações sobre como acessar uma reserva de forma assíncrona em modo de usuário, consulte CeAllocAsynchronousBuffer.

Métodos

Método
AsynchronousBuffer_t();
AsynchronousBuffer_t(
    PVOID pSrcMarshalled, 
    DWORD cbSrc,
    DWORD ArgumentDescriptor
);
AsynchronousBuffer_t(
    PCVOID pSrcMarshalled,
    DWORD cbSrc,
    DWORD ArgumentDescriptor
);
~AsynchronousBuffer_t();
HRESULT Free();
HRESULT Allocate(
    PVOID  pSrcMarshalled,
    DWORD cbSrc,
    DWORD ArgumentDescriptor
);
HRESULT Allocate(
    PCVOID pSrcMarshalled,
    DWORD cbSrc,
    DWORD ArgumentDescriptor
);
HRESULT Flush();
LPVOID ptr() const;
DWORD size() const;

Remarks

Você pode ambos chamar o construtor para alocar o assíncrono reserva ou usar o construtor usar como padrão e, em seguida, use o Alocar método. Se um HRESULT é exigido, use Alocar. Da mesma forma, você pode permitir que o destrutor para versão o assíncrono reserva ou usar o Livre método. Se um HRESULT é exigido, use Livre. Se Alocar falhar, PTR retorna NULL, e tamanho Retorna zero. Caso contrário, o assíncrono reserva é acessível com PTR e tamanho.

Uma vez um AsynchronousBuffer é alocado usando o construtor ou Alocar, ele não pode ser reutilizado por chamado Alocar até depois Livre é chamado. Tentar fazer isso retornará ERROR_ALREADY_EXISTS. Se a reserva não está atualmente alocada, Livre falha e retorna ERROR_ALREADY_EXISTS. Para informações sobre Alocar e Livre, consulte CeAllocAsynchronousBuffer e CeFreeAsynchronousBuffer.

Se você estiver 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 o ArgumentDescriptor. Em todos os outras CPUs, dentro de processo kernel, CeAllocAsynchronousBuffer Sempre cria um alias para a memória com VirtualCopy. 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 use um praticamente marcados armazenar em cache causas de origem e destino memória para serem acessados como uncached, até que o alias é destruída por CeFreeAsynchronousBuffer. Isso significa que acessa memória se tornar mais lento na origem e destino.

Não use o sinalizador MARSHAL_FORCE_ALIAS a menos que você esteja usando buffers maiores 16 KB.

Em todas as CPUs, Dentro usuário-modo processos, CeAllocAsynchronousBuffer Sempre cria um duplicado da memória, regardless of 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, também transmiti-lo quando você chamar o CeFlushAsynchronousBuffer e CeFreeAsynchronousBuffer funções. Não passa pode causar vazamentos o sistema pare de responder ou criar recurso.

Requisitos

Header marshal.hpp
Library coredll.lib
Windows Embedded CE Windows Embedded CE 6.0 and later

See Also

Reference

Kernel Buffer Marshaling Classes
CeAllocAsynchronousBuffer
CeFlushAsynchronousBuffer
CeFreeAsynchronousBuffer

Other Resources

Developing a Device Driver
Kernel Migration
Bringing Up a Hardware Platform