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 형식의 열거자 값을 지정합니다. 이 함수의 경우 SpinLock 은 DpcLock, StartIoLock 또는 InterruptLock 중 하나여야 합니다. StorportAcquireSpinLockEx를 호출하여 다른 유형의 스핀 잠금을 획득합니다.
[in] LockContext
SpinLock이 DpcLock으로 설정된 경우 잠금이 유지되는 DPC 개체에 대한 포인터입니다. SpinLock이 InterruptLock 또는 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) |