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