Partager via


StorPortAcquireSpinLock, fonction (storport.h)

La routine StorPortAcquireSpinLock acquiert le verrou de rotation spécifié.

Syntaxe

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

Paramètres

[in] DeviceExtension

Pointeur vers l’extension de périphérique par adaptateur du pilote miniport.

[in] SpinLock

Spécifie une valeur d’énumérateur de type STOR_SPINLOCK qui spécifie le verrou de rotation à acquérir. Pour cette fonction, SpinLock doit être l’un des suivants : DpcLock, StartIoLock ou InterruptLock. Appelez StorportAcquireSpinLockEx pour acquérir d’autres types de verrous de rotation.

[in] LockContext

Pointeur vers l’objet DPC pour lequel le verrou est conservé si SpinLock est défini sur DpcLock. Ce membre doit avoir la valeur NULL si SpinLock indique un type InterruptLock ou StartIoLock.

[in/out] LockHandle

Pointeur vers une mémoire tampon qui, au retour, contiendra un handle de verrouillage. Pour libérer le verrou, l’appelant doit passer ce handle à la routine StorPortReleaseSpinLock .

Valeur de retour

None

Remarques

Les conducteurs de Miniport doivent s’assurer qu’ils ne tentent pas d’acquérir une serrure déjà détenue ou d’acquérir des verrous dans un ordre incorrect. L’une ou l’autre de ces erreurs entraîne un blocage du système.

Certains verrous sont conservés automatiquement par le pilote de port avant qu’il appelle les routines de rappel du pilote miniport. Pour chaque routine de rappel de pilote miniport, le tableau suivant indique les verrous que le pilote de port acquiert automatiquement avant d’appeler la routine de rappel.

Routine du pilote Miniport Verrouillage de rotation maintenu par le pilote de port
HwStorFindAdapter None
HwStorInitialize Interruption (miniports physiques), Aucun (miniports virtuels)
HwStorInterrupt Interruption
HwMSIInterruptRoutine Interruption
HwStorStartIo StartIo (miniports physiques uniquement lorsque les canaux simultanés demandés <= 1)
HwStorBuildIo None
HwStorTimer Startio, Interruption (lorsque le membre SynchronizationModel de PORT_CONFIGURATION_INFORMATION est défini sur StorSynchronizeHalfDuplex)
HwStorResetBus Startio, Interruption (lorsque le membre SynchronizationModel de PORT_CONFIGURATION_INFORMATION est défini sur StorSynchronizeHalfDuplex)
HwStorAdapterControl Aucun. (Dans Windows Server 2003, le verrou de rotation StartIo a été maintenu lorsque le type de contrôle est ScsiStopAdapter.)
HwStorUnitControl None
HwStorTracingEnabled None
HwStorPassiveInitializeRoutine None
HwStorDpcRoutine None
HwStorStateChange Startio, Interruption (lorsque le membre SynchronizationModel de PORT_CONFIGURATION_INFORMATION est défini sur StorSynchronizeHalfDuplex)

Les verrous détenus par le pilote de port influencent qui verrouille les routines de rappel sont autorisés à acquérir, car les verrous de rotation doivent être acquis dans l’ordre suivant :

  • DPC ou StartIo
  • Interruption

Par instance, si le pilote de port acquiert le verrou de rotation d’interruption avant d’appeler une routine de rappel, cette routine de rappel ne peut plus acquérir le verrou de rotation DPC ou StartIo, car les verrous de rotation DPC et StartIo sont d’un ordre inférieur à celui du verrou de rotation d’interruption. En revanche, si le pilote de port acquiert le verrou de rotation StartIo avant d’appeler une routine de rappel, cette routine de rappel, lorsqu’elle est exécutée, peut toujours acquérir une interruption ou un verrou de rotation DPC .

Le tableau suivant indique les verrous de rotation que chaque routine de pilote miniport peut acquérir. Dans les cas où la routine du pilote miniport doit obtenir à la fois le verrou de rotation StartIo et le verrou de rotation d’interruption , la routine doit toujours acquérir le verrou de rotation StartIo en premier.

Routine du pilote Miniport Verrous de rotation autorisés
HwStorFindAdapter None
HwStorInitialize None
HwStorInterrupt None
HwMSIInterruptRoutine None
HwStorStartIo DPC, Interruption. Notez que StartIo peut être acquis dans un pilote de miniport virtuel ou à partir d’un pilote de miniport physique qui utilise plusieurs canaux simultanés.
HwStorBuildIo DPC, StartIo, Interrupt
HwStorTimer Interruption (lorsque le membre SynchronizationModel de PORT_CONFIGURATION_INFORMATION n’est pas défini sur StorSynchronizeHalfDuplex)
HwStorResetBus Interruption (lorsque le membre SynchronizationModel de PORT_CONFIGURATION_INFORMATION n’est pas défini sur StorSynchronizeHalfDuplex)
HwStorAdapterControl DPC, StartIo, Interrupt. (Dans Windows Server 2003, aucun verrouillage tournant n’est autorisé lorsque le type de contrôle est ScsiStopAdapter.)
HwStorUnitControl DPC, StartIo, Interrupt
HwStorTracingEnabled DPC, StartIo, Interrupt
HwStorPassiveInitializeRoutine None
HwStorDpcRoutine DPC, StartIo, Interrupt
HwStorStateChange Interruption (lorsque le membre SynchronizationModel de PORT_CONFIGURATION_INFORMATION n’est pas défini sur StorSynchronizeHalfDuplex)

Configuration requise

Condition requise Valeur
Plateforme cible Universal
En-tête storport.h (inclure Storport.h)
Règles de conformité DDI StorPortSpinLock(storport), StorPortSpinLock3(storport), StorPortSpinLock4(storport)

Voir aussi

STOR_SPINLOCK

StorPortReleaseSpinLock