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) |