다음을 통해 공유


StorPortAcquireSpinLock 함수(storport.h)

StorPortAcquireSpinLock 루틴은 지정된 스핀 잠금을 획득합니다.

구문

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

매개 변수

[in] DeviceExtension

어댑터별 미니포트 드라이버 디바이스 확장에 대한 포인터입니다.

[in] SpinLock

획득할 스핀 잠금을 지정하는 STOR_SPINLOCK 형식의 열거자 값을 지정합니다. 이 함수의 경우 SpinLockDpcLock, StartIoLock 또는 InterruptLock 중 하나여야 합니다. StorportAcquireSpinLockEx를 호출하여 다른 유형의 스핀 잠금을 획득합니다.

[in] LockContext

SpinLockDpcLock으로 설정된 경우 잠금이 유지되는 DPC 개체에 대한 포인터입니다. SpinLockInterruptLock 또는 StartIoLock 형식을 나타내는 경우 이 멤버는 NULL이어야 합니다.

[in/out] LockHandle

반환될 때 잠금 핸들을 포함하는 버퍼에 대한 포인터입니다. 잠금을 해제하려면 호출자가 이 핸들을 StorPortReleaseSpinLock 루틴에 전달해야 합니다.

반환 값

없음

설명

미니포트 드라이버는 이미 보유하고 있는 잠금을 획득하거나 잘못된 순서로 잠금을 획득하지 않도록 해야 합니다. 이러한 실수 중 하나로 인해 시스템 교착 상태가 발생합니다.

특정 잠금은 미니포트 드라이버 콜백 루틴을 호출하기 전에 포트 드라이버에 의해 자동으로 유지됩니다. 각 미니포트 드라이버 콜백 루틴에 대해 다음 표에서는 콜백 루틴을 호출하기 전에 포트 드라이버가 자동으로 획득하는 잠금을 나타냅니다.

미니포트 드라이버 루틴 포트 드라이버에서 보유하는 스핀 잠금
HwStorFindAdapter 없음
HwStorInitialize 인터럽트(물리적 미니포트), 없음(가상 미니포트)
HwStorInterrupt Interrupt
HwMSIInterruptRoutine Interrupt
HwStorStartIo StartIo(요청된 동시 채널 <에만 물리적 미니포트 = 1)
HwStorBuildIo 없음
HwStorTimer Startio, 인터럽트(PORT_CONFIGURATION_INFORMATIONSynchronizationModel 멤버가 StorSynchronizeHalfDuplex로 설정된 경우)
HwStorResetBus Startio, 인터럽트(PORT_CONFIGURATION_INFORMATIONSynchronizationModel 멤버가 StorSynchronizeHalfDuplex로 설정된 경우)
HwStorAdapterControl 없음 (Windows Server 2003에서는 제어 유형이 ScsiStopAdapter일 때 StartIo 스핀 잠금이 유지되었습니다.)
HwStorUnitControl 없음
HwStorTracingEnabled 없음
HwStorPassiveInitializeRoutine 없음
HwStorDpcRoutine 없음
HwStorStateChange Startio, 인터럽트(PORT_CONFIGURATION_INFORMATIONSynchronizationModel 멤버가 StorSynchronizeHalfDuplex로 설정된 경우)

포트 드라이버에서 보유하는 잠금은 다음 순서로 스핀 잠금을 획득해야 하므로 콜백 루틴을 잠그는 데 영향을 줍니다.

  • DPC 또는 StartIo
  • Interrupt

instance 경우 포트 드라이버가 콜백 루틴을 호출하기 전에 인터럽트 스핀 잠금을 획득하는 경우 DPC 및 StartIo 스핀 잠금이 인터럽트 스핀 잠금보다 낮은 순서이기 때문에 해당 콜백 루틴은 더 이상 DPC 또는 StartIo 스핀 잠금을 획득할 수 없습니다. 반면, 포트 드라이버가 콜백 루틴을 호출하기 전에 StartIo 스핀 잠금을 획득하는 경우 해당 콜백 루틴이 실행될 때 인터럽트 또는 DPC 스핀 잠금을 획득할 수 있습니다.

다음 표에서는 각 미니포트 드라이버 루틴을 획득할 수 있는 스핀 잠금을 나타냅니다. 미니포트 드라이버 루틴이 StartIo 스핀 잠금과 인터럽트 스핀 잠금을 모두 가져와야 하는 경우 루틴은 항상 StartIo 스핀 잠금을 먼저 획득해야 합니다.

미니포트 드라이버 루틴 허용되는 스핀 잠금
HwStorFindAdapter 없음
HwStorInitialize 없음
HwStorInterrupt 없음
HwMSIInterruptRoutine 없음
HwStorStartIo DPC, 인터럽트. StartIo는 가상 미니포트 드라이버 또는 여러 동시 채널을 사용하는 물리적 미니포트 드라이버에서 가져올 수 있습니다.
HwStorBuildIo DPC, StartIo, 인터럽트
HwStorTimer 인터럽트(PORT_CONFIGURATION_INFORMATIONSynchronizationModel 멤버가 StorSynchronizeHalfDuplex로 설정되지 않은 경우)
HwStorResetBus 인터럽트(PORT_CONFIGURATION_INFORMATIONSynchronizationModel 멤버가 StorSynchronizeHalfDuplex로 설정되지 않은 경우)
HwStorAdapterControl DPC, StartIo, 인터럽트. (Windows Server 2003에서는 컨트롤 형식이 ScsiStopAdapter인 경우 스핀 잠금 없음이 허용됩니다.)
HwStorUnitControl DPC, StartIo, 인터럽트
HwStorTracingEnabled DPC, StartIo, 인터럽트
HwStorPassiveInitializeRoutine 없음
HwStorDpcRoutine DPC, StartIo, 인터럽트
HwStorStateChange 인터럽트(PORT_CONFIGURATION_INFORMATIONSynchronizationModel 멤버가 StorSynchronizeHalfDuplex로 설정되지 않은 경우)

요구 사항

요구 사항
대상 플랫폼 유니버설
헤더 storport.h(Storport.h 포함)
DDI 규정 준수 규칙 StorPortSpinLock(storport), StorPortSpinLock3(storport), StorPortSpinLock4(storport)

추가 정보

STOR_SPINLOCK

StorPortReleaseSpinLock