Compartir a través de


Función StorPortAcquireSpinLock (storport.h)

La rutina StorPortAcquireSpinLock adquiere el bloqueo de número especificado.

Sintaxis

void StorPortAcquireSpinLock(
  [in]     PVOID             DeviceExtension,
  [in]     STOR_SPINLOCK     SpinLock,
  [in]     PVOID             LockContext,
  [in/out] PSTOR_LOCK_HANDLE LockHandle
);

Parámetros

[in] DeviceExtension

Puntero a la extensión de dispositivo del controlador de minipuerto por adaptador.

[in] SpinLock

Especifica un valor de enumerador de tipo STOR_SPINLOCK que especifica el bloqueo de número que se va a adquirir. Para esta función, SpinLock debe ser uno de: DpcLock, StartIoLock o InterruptLock. Llame a StorportAcquireSpinLockEx para adquirir otros tipos de bloqueos de número.

[in] LockContext

Puntero al objeto DPC para el que se mantiene el bloqueo si SpinLock está establecido en DpcLock. Este miembro debe ser NULL si SpinLock indica un tipo de InterruptLock o StartIoLock.

[in/out] LockHandle

Un puntero a un búfer que, a cambio, contendrá un identificador de bloqueo. Para liberar el bloqueo, el autor de la llamada debe pasar este identificador a la rutina StorPortReleaseSpinLock .

Valor devuelto

None

Observaciones

Los controladores de minipuerto deben asegurarse de que no intenten adquirir un bloqueo que ya está retenido o adquirir bloqueos en un orden incorrecto. Cualquiera de estos errores provocará un interbloqueo del sistema.

El controlador de puerto mantiene automáticamente determinados bloqueos antes de llamar a las rutinas de devolución de llamada del controlador de miniporte. Para cada rutina de devolución de llamada del controlador de miniporte, la tabla siguiente indica qué bloqueos adquiere el controlador de puerto automáticamente antes de llamar a la rutina de devolución de llamada.

Rutina del controlador de miniporte Bloqueo de número mantenido por el controlador de puerto
HwStorFindAdapter None
HwStorInitialize Interrupción (minipuertos físicos), Ninguno (minipuertos virtuales)
HwStorInterrupt Interrupción
HwMSIInterruptRoutine Interrupción
HwStorStartIo StartIo (miniportes físicos solo cuando se solicitan canales <simultáneos = 1)
HwStorBuildIo None
HwStorTimer Startio, Interrupt (cuando el miembro SynchronizationModel de PORT_CONFIGURATION_INFORMATION está establecido en StorSynchronizeHalfDuplex)
HwStorResetBus Startio, Interrupt (cuando el miembro SynchronizationModel de PORT_CONFIGURATION_INFORMATION está establecido en StorSynchronizeHalfDuplex)
HwStorAdapterControl Ninguno. (En Windows Server 2003, el bloqueo de número StartIo se mantiene cuando el tipo de control es ScsiStopAdapter).
HwStorUnitControl None
HwStorTracingEnabled None
HwStorPassiveInitializeRoutine None
HwStorDpcRoutine None
HwStorStateChange Startio, Interrupt (cuando el miembro SynchronizationModel de PORT_CONFIGURATION_INFORMATION está establecido en StorSynchronizeHalfDuplex)

Los bloqueos mantenidos por el controlador de puerto influyen en los bloqueos que bloquean las rutinas de devolución de llamada pueden adquirirse, ya que los bloqueos de giro deben adquirirse en el orden siguiente:

  • DPC o StartIo
  • Interrupción

Por ejemplo, si el controlador de puerto adquiere el bloqueo de número de interrupción antes de llamar a una rutina de devolución de llamada, esa rutina de devolución de llamada ya no puede adquirir el bloqueo de número DPC o StartIo porque los bloqueos de número DPC e StartIo tienen un orden inferior al bloqueo de número de interrupción . Por otro lado, si el controlador de puerto adquiere el bloqueo de número StartIo antes de llamar a una rutina de devolución de llamada, esa rutina de devolución de llamada, cuando se ejecuta, podría adquirir un bloqueo de número de interrupción o DPC .

En la tabla siguiente se indica qué bloqueos de número puede adquirir cada rutina de controlador de minipuerto. En aquellos casos en los que la rutina del controlador de miniporte debe obtener el bloqueo de giro StartIo y el bloqueo de giro de interrupción , la rutina siempre debe adquirir primero el bloqueo de giro StartIo .

Rutina del controlador de miniporte Bloqueos de número permitidos
HwStorFindAdapter None
HwStorInitialize None
HwStorInterrupt None
HwMSIInterruptRoutine None
HwStorStartIo DPC, Interrupción. Tenga en cuenta que StartIo se puede adquirir en un controlador de minipuerto virtual o desde un controlador de minipuerto físico que use varios canales simultáneos.
HwStorBuildIo DPC, StartIo, Interrupt
HwStorTimer Interrupción (cuando el miembro SynchronizationModel de PORT_CONFIGURATION_INFORMATION no está establecido en StorSynchronizeHalfDuplex)
HwStorResetBus Interrupción (cuando el miembro SynchronizationModel de PORT_CONFIGURATION_INFORMATION no está establecido en StorSynchronizeHalfDuplex)
HwStorAdapterControl DPC, StartIo, Interrupt. (En Windows Server 2003, no se permite el bloqueo de número cuando el tipo de control es ScsiStopAdapter).
HwStorUnitControl DPC, StartIo, Interrupt
HwStorTracingEnabled DPC, StartIo, Interrupt
HwStorPassiveInitializeRoutine None
HwStorDpcRoutine DPC, StartIo, Interrupt
HwStorStateChange Interrupción (cuando el miembro SynchronizationModel de PORT_CONFIGURATION_INFORMATION no está establecido en StorSynchronizeHalfDuplex)

Requisitos

Requisito Value
Plataforma de destino Universal
Encabezado storport.h (incluya Storport.h)
Reglas de cumplimiento de DDI StorPortSpinLock(storport), StorPortSpinLock3(storport), StorPortSpinLock4(storport)

Consulte también

STOR_SPINLOCK

StorPortReleaseSpinLock