Compartir a través de


Interfaz IDmaChannel (portcls.h)

La interfaz IDmaChannel proporciona una abstracción de un canal DMA y sus parámetros de uso y búfer de DMA asociados. Un controlador de puerto WaveCíclico o WavePci implementa esta interfaz y lo expone al controlador de miniporte WaveCíclico o WavePci. El controlador de miniporte obtiene una referencia a la implementación del controlador de puerto de un objeto IDmaChannel llamando a uno de los métodos NewXxxDmaChannel del controlador de puerto:

IPortWavePci::NewMasterDmaChannel

IPortWaveCíclico::NewMasterDmaChannel

IPortWaveCíclico::NewSlaveDmaChannel

Un controlador de miniport también puede implementar su propia interfaz de IDmaChannel si requiere funcionalidades que no están en la implementación predeterminada del controlador de puerto. Para obtener más información sobre esto, vea filtros de onda. Cuando el controlador de puerto llama al método del controlador de miniporte (por ejemplo, IMiniportWaveCíclico::NewStream), el método genera el objeto IDmaChannel del controlador de miniport en el controlador de puerto. IDmaChannel hereda de la interfaz IUnknown.

La implementación actual de la interfaz de IDmaChannel en Portcls.sys no es segura para varios subprocesos porque no sincroniza internamente el acceso a los datos compartidos. Normalmente, un único subproceso de controlador llama a los métodos de un objeto IDmaChannel. En este caso, no hay ningún riesgo de que dos llamadas de método accedan simultáneamente a los mismos datos. Sin embargo, si varios subprocesos pueden llamar potencialmente a los métodos de un objeto IDmaChannel al mismo tiempo, el escritor de controladores debe sincronizar las llamadas al método para evitar daños internos en los datos.

Para obtener más información, vea objetos de canal DMA.

Nota

Microsoft admite un entorno diverso e inclusivo. Este artículo contiene referencias a la terminología que la guía de estilo de Microsoft para la comunicación sin sesgos reconoce como excluyente. La palabra o frase se usa en este artículo para la coherencia porque aparece actualmente en el software. Cuando el software se actualiza para quitar el idioma, este artículo se actualizará para que esté en alineación.

Herencia

La interfaz IDmaChannel hereda de la interfaz IUnknown.

Métodos

La interfaz IDmaChannel tiene estos métodos.

 
IDmaChannel::AllocateBuffer

El método AllocateBuffer asigna un búfer común al que puede acceder el controlador de puerto y el hardware DMA.
IDmaChannel::AllocatedBufferSize

El método AllocatedBufferSize devuelve el tamaño del búfer asignado.
IDmaChannel::BufferSize

El método BufferSize devuelve el tamaño en bytes del búfer de datos del canal DMA.
IDmaChannel::CopyFrom

El método CopyFrom copia datos de ejemplo del búfer común del canal DMA al búfer de destino especificado.
IDmaChannel::CopyTo

El método CopyTo copia los datos de ejemplo en el búfer común del canal DMA desde el búfer de origen especificado.
IDmaChannel::FreeBuffer

El método FreeBuffer libera el búfer asignado por la llamada anterior a IDmaChannel::AllocateBuffer.
IDmaChannel::GetAdapterObject

El método GetAdapterObject devuelve el objeto de adaptador de hardware del canal DMA.
IDmaChannel::MaximumBufferSize

El método MaximumBufferSize devuelve el tamaño en bytes del búfer más grande que este objeto de canal DMA está configurado para admitir.
IDmaChannel::P hysicalAddress

El método PhysicalAddress devuelve la dirección física del búfer asignado.
IDmaChannel::SetBufferSize

El método SetBufferSize establece el tamaño actual del búfer del canal DMA.
IDmaChannel::SystemAddress

El método SystemAddress devuelve la dirección del sistema del búfer asignado.
IDmaChannel::TransferCount

El método TransferCount devuelve el tamaño en bytes del búfer que está siendo transferido actualmente por un objeto DMA subordinado.

Requisitos

Requisito Valor
de la plataforma de destino de Windows
encabezado de portcls.h