Partilhar via


Função StorPortAcquireSpinLockEx (storport.h)

A rotina StorPortAcquireSpinLockEx adquire o bloqueio de rotação especificado.

Sintaxe

ULONG StorPortAcquireSpinLockEx(
  PVOID             HwDeviceExtension,
  STOR_SPINLOCK     SpinLock,
  PVOID             LockContext,
  PSTOR_LOCK_HANDLE LockHandle
);

Parâmetros

HwDeviceExtension

[in] Ponteiro para a extensão do dispositivo de miniportor por adaptador.

SpinLock

[in] Especifica um valor enumerador do tipo STOR_SPINLOCK que especifica o bloqueio de rotação a ser adquirido.

LockContext

[in] Um ponteiro para o objeto DPC para o qual o bloqueio será mantido se SpinLock estiver definido como DpcLock. Esse membro deverá ser NULL se SpinLock indicar um tipo de InterruptLock ou StartIoLock.

LockHandle

[entrada/saída] Um ponteiro para um buffer que, no retorno, conterá um identificador de bloqueio. Para liberar o bloqueio, o chamador deve passar esse identificador para a rotinaStorPortReleaseSpinLock.

Valor de retorno

StorPortAcquireSpinLockEx retornará STOR_STATUS_SUCCESS se o bloqueio de rotação for adquirido com êxito. Caso contrário, ele retorna um código de status, como um dos seguintes:

Código de status Descrição
STOR_STATUS_INVALID_PARAMETER Um parâmetro é inválido.
STOR_STATUS_INVALID_IRQL O chamador está em um IRQL inválido para o tipo de SpinLock que ele está tentando adquirir.

Observações

Os drivers de miniporto devem garantir que eles não tentem adquirir um bloqueio que já está mantido ou adquirir bloqueios em uma ordem incorreta. Qualquer um desses erros resultará em deadlock do sistema.

Determinados bloqueios são mantidos automaticamente pelo driver de porta antes que ele chame as rotinas de retorno de chamada do driver de miniport. Para cada rotina de retorno de chamada do driver de miniporto, a tabela a seguir indica qual bloqueio o driver de porta adquire automaticamente antes de chamar a rotina de retorno de chamada.

Rotina do driver de miniporto Bloqueio de rotação mantido pelo driver de porta
HwStorFindAdapter Nenhum
HwStorInitialize Interrupção (miniportos físicos), Nenhum (miniportos virtuais)
HwStorInterrupt Interromper
HwMSIInterruptRoutine Interromper
HwStorStartIo StartIo (miniportos físicos somente quando os canais simultâneos solicitados <= 1)
HwStorBuildIo Nenhum
HwStorTimer Startio, Interrupt (when SynchronizationModel member of PORT_CONFIGURATION_INFORMATION is set to StorSynchronizeHalfDuplex)
HwStorResetBus Startio, Interrupt (when SynchronizationModel member of PORT_CONFIGURATION_INFORMATION is set to StorSynchronizeHalfDuplex)
HwStorAdapterControl Nenhum. (No Windows Server 2003, o bloqueio de rotação do StartIo foi mantido quando o tipo de controle é ScsiStopAdapter.)
HwStorUnitControl Nenhum
HwStorTracingEnabled Nenhum
HwStorPassiveInitializeRoutine Nenhum
HwStorDpcRoutine Nenhum
HwStorStateChange Startio, Interrupt (when SynchronizationModel member of PORT_CONFIGURATION_INFORMATION is set to StorSynchronizeHalfDuplex)

Os bloqueios mantidos pela influência do driver de porta que bloqueia as rotinas de retorno de chamada têm permissão para adquirir, pois os bloqueios de rotação devem ser adquiridos na seguinte ordem:

  • DPC ou StartIo
  • Interromper

Por exemplo, se o driver de porta adquirir a interrupção bloqueio de rotação antes de chamar uma rotina de retorno de chamada, essa rotina de retorno de chamada não poderá mais adquirir o de DPC ou o bloqueio de rotação do StartIo porque o de DPC e bloqueios de rotação do StartIo são de ordem inferior à interromper bloqueio de rotação. Por outro lado, se o driver de porta adquirir o StartIo bloqueio de rotação antes de chamar uma rotina de retorno de chamada, essa rotina de retorno de chamada, quando executada, ainda poderá adquirir uma interrupção ou um DPC bloqueio de rotação.

A tabela a seguir indica quais bloqueios de rotação cada rotina de driver de miniporto pode adquirir. Nos casos em que a rotina do driver de miniporto deve obter o startio o bloqueio de rotação e o bloqueio de rotação interrupção de, a rotina deve sempre adquirir o StartIo bloqueio de rotação primeiro.

Rotina do driver de miniporto Bloqueios de rotação permitidos
HwStorFindAdapter Nenhum
HwStorInitialize Nenhum
HwStorInterrupt Nenhum
HwMSIInterruptRoutine Nenhum
HwStorStartIo DPC, interrupção. Observe que o StartIo pode ser adquirido em um driver de miniporto virtual ou em um driver de miniporto físico que usa vários canais simultâneos.
HwStorBuildIo DPC, StartIo, Interrupt
HwStorTimer Interrupção (quando SynchronizationModel membro do PORT_CONFIGURATION_INFORMATION não é definido como StorSynchronizeHalfDuplex)
HwStorResetBus Interrupção (quando SynchronizationModel membro do PORT_CONFIGURATION_INFORMATION não é definido como StorSynchronizeHalfDuplex)
HwStorAdapterControl DPC, StartIo, Interrupt. (No Windows Server 2003, o bloqueio sem rotação é permitido quando o tipo de controle é ScsiStopAdapter.)
HwStorUnitControl DPC, StartIo, Interrupt
HwStorTracingEnabled DPC, StartIo, Interrupt
HwStorPassiveInitializeRoutine Nenhum
HwStorDpcRoutine DPC, StartIo, Interrupt
HwStorStateChange Interrupção (quando SynchronizationModel membro do PORT_CONFIGURATION_INFORMATION não é definido como StorSynchronizeHalfDuplex)

Requisitos

Requisito Valor
de cliente com suporte mínimo Windows 10, versão 1809
cabeçalho storport.h

Consulte também

STOR_SPINLOCK

StorPortReleaseSpinLock