StorPortAcquireSpinLockEx 함수(storport.h)

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

구문

ULONG StorPortAcquireSpinLockEx(
  PVOID             HwDeviceExtension,
  STOR_SPINLOCK     SpinLock,
  PVOID             LockContext,
  PSTOR_LOCK_HANDLE LockHandle
);

매개 변수

HwDeviceExtension

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

SpinLock

[in] 획득할 스핀 잠금을 지정하는 STOR_SPINLOCK 형식의 열거자 값을 지정합니다.

LockContext

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

LockHandle

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

반환 값

스핀 잠금이 성공적으로 획득되면 StorPortAcquireSpinLockEx는 STOR_STATUS_SUCCESS 반환합니다. 그렇지 않으면 다음 중 하나와 같은 상태 코드를 반환합니다.

상태 코드 Description
STOR_STATUS_INVALID_PARAMETER 매개 변수가 잘못되었습니다.
STOR_STATUS_INVALID_IRQL 호출자가 획득하려는 SpinLock 유형에 대해 잘못된 IRQL에 있습니다.

설명

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

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

미니포트 드라이버 루틴 포트 드라이버가 보유한 스핀 잠금
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로 설정되지 않은 경우)

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows 10, 버전 1809
머리글 storport.h

추가 정보

STOR_SPINLOCK

StorPortReleaseSpinLock