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] SpinLock 이 DpcLock으로 설정된 경우 잠금이 유지되는 DPC 개체에 대한 포인터입니다. SpinLock이 InterruptLock 또는 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 |