Condividi tramite


Funzione StorPortAcquireSpinLock (storport.h)

La routine StorPortAcquireSpinLock acquisisce il blocco di selezione specificato.

Sintassi

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

Parametri

[in] DeviceExtension

Puntatore all'estensione del dispositivo miniport driver per adattatore.

[in] SpinLock

Specifica un valore dell'enumeratore di tipo STOR_SPINLOCK che specifica il blocco di selezione da acquisire. Per questa funzione, SpinLock deve essere uno dei seguenti: DpcLock, StartIoLocko interruptLock . Chiamare StorportAcquireSpinLockEx per acquisire altri tipi di blocchi di selezione.

[in] LockContext

Puntatore all'oggetto DPC per il quale viene mantenuto il blocco se SpinLock è impostato su DpcLock. Questo membro deve essere NULL se SpinLock indica un tipo di InterruptLock o StartIoLock.

[in/out] LockHandle

Puntatore a un buffer che, in caso di restituzione, conterrà un handle di blocco. Per rilasciare il blocco, il chiamante deve passare questo handle alla routineStorPortReleaseSpinLock.

Valore restituito

Nessuno

Osservazioni

I driver Miniport devono assicurarsi che non tentino di acquisire un blocco già mantenuto o di acquisire blocchi in un ordine non corretto. Uno di questi errori comporterà un deadlock del sistema.

Alcuni blocchi vengono mantenuti automaticamente dal driver di porta prima di chiamare le routine di callback del driver miniport. Per ogni routine di callback del driver miniport, la tabella seguente indica quale blocca il driver della porta acquisisce automaticamente prima di chiamare la routine di callback.

Routine del driver Miniport Blocco di selezione mantenuto dal driver di porta
HwStorFindAdapter Nessuno
HwStorInitialize Interrupt (miniport fisici), Nessuno (miniport virtuali)
HwStorInterrupt Interrompere
HwMSIInterruptRoutine Interrompere
HwStorStartIo StartIo (miniport fisici solo quando sono richiesti canali simultanei <= 1)
HwStorBuildIo Nessuno
HwStorTimer Startio, Interrupt (quando membro synchronizationModel di PORT_CONFIGURATION_INFORMATION è impostato su StorSynchronizeHalfDuplex)
HwStorResetBus Startio, Interrupt (quando membro synchronizationModel di PORT_CONFIGURATION_INFORMATION è impostato su StorSynchronizeHalfDuplex)
HwStorAdapterControl Nessuno. In Windows Server 2003 il blocco di selezione StartIo è stato mantenuto quando il tipo di controllo è ScsiStopAdapter.
HwStorUnitControl Nessuno
HwStorTracingEnabled Nessuno
HwStorPassiveInitializeRoutine Nessuno
HwStorDpcRoutine Nessuno
HwStorStateChange Startio, Interrupt (quando membro synchronizationModel di PORT_CONFIGURATION_INFORMATION è impostato su StorSynchronizeHalfDuplex)

I blocchi mantenuti dal driver di porta influiscono sui blocchi che bloccano le routine di callback possono acquisire, perché i blocchi di selezione devono essere acquisiti nell'ordine seguente:

  • DPC o StartIo
  • Interrompere

Ad esempio, se il driver della porta acquisisce l'interrupt blocco di selezione prima di chiamare una routine di callback, tale routine di callback non può più acquisire il DPC O StartIo blocco spin perché il blocco di selezione DPC e StartIo i blocchi spin sono di un ordine inferiore rispetto al blocco spin interrupt. D'altra parte, se il driver della porta acquisisce il StartIo blocco spin prima di chiamare una routine di callback, tale routine di callback, quando eseguita, potrebbe comunque acquisire un Interrupt o un blocco di selezione DPC.

La tabella seguente indica i blocchi di rotazione che ogni routine del driver miniport può acquisire. In questi casi in cui la routine del driver miniport deve ottenere sia il StartIo blocco spin che il blocco di spin interrupt, la routine deve sempre acquisire prima il blocco di selezione StartIo.

Routine del driver Miniport Blocchi di selezione consentiti
HwStorFindAdapter Nessuno
HwStorInitialize Nessuno
HwStorInterrupt Nessuno
HwMSIInterruptRoutine Nessuno
HwStorStartIo DPC, Interrupt. Si noti che StartIo può essere acquisito in un driver miniport virtuale o da un driver miniport fisico che usa più canali simultanei.
HwStorBuildIo DPC, StartIo, Interrupt
HwStorTimer Interrupt (quando membro synchronizationModel di PORT_CONFIGURATION_INFORMATION non è impostato su StorSynchronizeHalfDuplex)
HwStorResetBus Interrupt (quando membro synchronizationModel di PORT_CONFIGURATION_INFORMATION non è impostato su StorSynchronizeHalfDuplex)
HwStorAdapterControl DPC, StartIo, Interrupt. In Windows Server 2003 non è consentito alcun blocco di selezione quando il tipo di controllo è ScsiStopAdapter.
HwStorUnitControl DPC, StartIo, Interrupt
HwStorTracingEnabled DPC, StartIo, Interrupt
HwStorPassiveInitializeRoutine Nessuno
HwStorDpcRoutine DPC, StartIo, Interrupt
HwStorStateChange Interrupt (quando membro synchronizationModel di PORT_CONFIGURATION_INFORMATION non è impostato su StorSynchronizeHalfDuplex)

Fabbisogno

Requisito Valore
piattaforma di destinazione Universale
intestazione storport.h (include Storport.h)
regole di conformità DDI StorPortSpinLock(storport), StorPortSpinLock3(storport), StorPortSpinLock4(storport)

Vedere anche

STOR_SPINLOCK

StorPortReleaseSpinLock