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 de dispositivo de miniportor por adaptador.

SpinLock

[in] Especifica um valor de 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 rotina StorPortReleaseSpinLock .

Retornar valor

StorPortAcquireSpinLockEx retornará STOR_STATUS_SUCCESS se o bloqueio de rotação for adquirido com êxito. Caso contrário, ele retornará um código 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 está tentando adquirir.

Comentários

Os drivers de miniporta devem garantir que eles não tentem adquirir um bloqueio que já esteja 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 de chamar 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 Interrupção
HwMSIInterruptRoutine Interrupção
HwStorStartIo StartIo (miniportos físicos somente quando solicitado canais <simultâneos = 1)
HwStorBuildIo Nenhum
HwStorTimer Startio, Interrupt (quando SynchronizationModel membro do PORT_CONFIGURATION_INFORMATION é definido como StorSynchronizeHalfDuplex)
HwStorResetBus Startio, Interrupt (quando SynchronizationModel membro do PORT_CONFIGURATION_INFORMATION é definido como StorSynchronizeHalfDuplex)
HwStorAdapterControl Nenhum. (No Windows Server 2003, o bloqueio de rotação StartIo foi mantido quando o tipo de controle é ScsiStopAdapter.)
HwStorUnitControl Nenhum
HwStorTracingEnabled Nenhum
HwStorPassiveInitializeRoutine Nenhum
HwStorDpcRoutine Nenhum
HwStorStateChange Startio, Interrupt (quando SynchronizationModel membro do PORT_CONFIGURATION_INFORMATION é definido como 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
  • Interrupção

Por exemplo, se o driver de porta adquirir o bloqueio de rotação de interrupção antes de chamar uma rotina de retorno de chamada, essa rotina de retorno de chamada não poderá mais adquirir o bloqueio de rotação DPC ou StartIo porque os bloqueios de rotação DPC e StartIo são de uma ordem menor do que o bloqueio de rotação de interrupção . Por outro lado, se o driver de porta adquirir o bloqueio de rotação StartIo 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 bloqueio de rotação DPC .

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 bloqueio de rotação StartIo e o bloqueio de rotação de interrupção , a rotina sempre deve adquirir o bloqueio de rotação StartIo 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 miniporta virtual ou em um driver de miniporto físico que usa vários canais simultâneos.
HwStorBuildIo DPC, StartIo, Interrupt
HwStorTimer Interrupção (quando o membro SynchronizationModel do PORT_CONFIGURATION_INFORMATION não está definido como StorSynchronizeHalfDuplex)
HwStorResetBus Interrupção (quando o membro SynchronizationModel do PORT_CONFIGURATION_INFORMATION não está 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 o membro SynchronizationModel do PORT_CONFIGURATION_INFORMATION não está definido como StorSynchronizeHalfDuplex)

Requisitos

Requisito Valor
Cliente mínimo com suporte Windows 10, versão 1809
Cabeçalho storport.h

Confira também

STOR_SPINLOCK

StorPortReleaseSpinLock