Share via


EVT_SPB_CONTROLLER_LOCK 콜백 함수(spbcx.h)

SPB 컨트롤러 드라이버의 EvtSpbControllerLock 이벤트 콜백 함수는 버스에서 단일 대상 디바이스에 액세스하기 위해 SPB 컨트롤러를 잠급니다.

구문

EVT_SPB_CONTROLLER_LOCK EvtSpbControllerLock;

void EvtSpbControllerLock(
  [in] WDFDEVICE Controller,
  [in] SPBTARGET Target,
  [in] SPBREQUEST LockRequest
)
{...}

매개 변수

[in] Controller

SPB 컨트롤러를 나타내는 프레임워크 디바이스 개체 에 대한 WDFDEVICE 핸들입니다.

[in] Target

이 I/O 요청에 대한 대상에 대한 SPBTARGET 핸들입니다. 대상은 버스에 연결된 주변 장치 또는 포트입니다. SPB 프레임워크 확장(SpbCx)은 이전에 대상에 대한 연결을 연 EvtSpbTargetConnect 콜백의 대상에 이 핸들을 할당했습니다.

[in] LockRequest

컨트롤러를 잠그기 위한 I/O 컨트롤 요청에 대한 SPBREQUEST 핸들입니다. SPB 컨트롤러 드라이버는 요청된 작업을 수행하거나 오류 상태 반환하여 이 요청을 완료해야 합니다. 자세한 내용은 비고를 참조하세요.

반환 값

없음

설명

SpbCx는 SPB 컨트롤러에 대한 I/O 큐를 관리합니다. SPB 컨트롤러 드라이버가 EvtSpbControllerLock 콜백 함수를 등록하는 경우 SpbCx는 컨트롤러의 클라이언트(주변 드라이버)가 버스의 대상에 IOCTL_SPB_LOCK_CONTROLLER 요청을 보낼 때 이 함수를 호출합니다. LockRequest 매개 변수 값은 이 요청을 캡슐화하는 핸들입니다.

EvtSpbControllerLockEvtSpbControllerUnlock 함수는 보완 작업을 수행합니다. 두 함수는 모두 선택 사항입니다. SPB 컨트롤러 드라이버가 EvtSpbControllerUnlock 함수를 구현하는 경우 드라이버는 EvtSpbControllerLock 함수를 구현할 필요가 없지만 그렇게 할 수 있습니다. 그러나 SPB 컨트롤러 드라이버가 EvtSpbControllerLock 함수를 구현하는 경우 EvtSpbControllerUnlock 함수도 구현해야 합니다. 자세한 내용은 SPB_CONTROLLER_CONFIG 설명을 참조하세요.

잠금이 적용되는 동안 컨트롤러는 LockRequest 매개 변수로 지정된 대상이 아닌 버스의 대상에 대한 액세스를 허용해서는 안 됩니다.

SPB 컨트롤러 드라이버가 일반 대상 선택 메커니즘을 일시적으로 재정의하도록 컨트롤러 모드를 변경해야 하는 경우 EvtSpbControllerLock 콜백 중에 이 작업을 수행할 수 있습니다. 이 모드 변경에 긴 지연이 있거나 드라이버가 디바이스 인터럽트 대기를 요구하는 경우 드라이버는 모드 변경을 시작한 다음, 지연 없이 콜백에서 돌아와야 합니다. 나중에 드라이버는 타이머 DPC 또는 인터럽트 DPC에서 잠금 작업을 완료할 수 있습니다.

잠금 작업이 DPC에서 완료되면 SPB 컨트롤러 드라이버가 이전에 잠금 작업에 필요한 모든 리소스를 할당해야 합니다.

EvtSpbControllerLock 콜백은 잠금 요청 실패를 피해야 합니다. 드라이버 검증 도구가 사용하도록 설정된 경우 이러한 오류는 검증 도구 트랩을 트리거합니다. 그러면 컨트롤러가 실패했음을 플러그 앤 플레이 관리자에게 보고합니다. SpbCx는 잠금 요청의 오류를 무시하고 오류를 처리하거나 완화하려고 하지 않습니다.

EvtSpbControllerLock 함수는 값을 반환하지 않습니다. 대신 SPB 컨트롤러 드라이버는 LockRequest 매개 변수로 식별되는 I/O 요청의 완료 상태 잠금 작업의 상태 나타냅니다. 완료 상태 STATUS_SUCCESS 설정합니다.

SpbCx는 EvtSpbControllerUnlock 이벤트 콜백 함수를 호출하여 이전에 EvtSpbControllerLock 콜백에 의해 잠긴 컨트롤러의 잠금을 해제합니다.

EvtSpbControllerLock 콜백 함수를 등록하려면 SpbDeviceInitialize 메서드를 호출합니다.

EvtSpbControllerLock 함수에 대한 자세한 내용은 Client-Implemented 시퀀스 처리를 참조하세요.

예제

EvtSpbControllerLock 콜백 함수를 정의하려면 먼저 정의 중인 콜백 함수의 형식을 식별하는 함수 선언을 제공해야 합니다. Windows는 드라이버에 대한 콜백 함수 형식 집합을 제공합니다. 콜백 함수 형식을 사용하여 함수를 선언하면 드라이버에 대한 코드 분석, SDV( 정적 드라이버 검증 도구 ) 및 기타 확인 도구에서 오류를 찾는 데 도움이 되며 Windows 운영 체제용 드라이버를 작성하기 위한 요구 사항입니다.

예를 들어 라는 MyEvtSpbControllerLockEvtSpbControllerLock 콜백 함수를 정의하려면 이 코드 예제와 같이 EVT_SPB_CONTROLLER_LOCK 함수 형식을 사용합니다.

EVT_SPB_CONTROLLER_LOCK  MyEvtSpbControllerLock;

그런 다음 다음과 같이 콜백 함수를 구현합니다.

_Use_decl_annotations_
VOID
  MyEvtSpbControllerLock(
    WDFDEVICE Controller,
    SPBTARGET Target,
    SPBREQUEST LockRequest
    )
{ ... }

EVT_SPB_CONTROLLER_LOCK 함수 형식은 Spbcx.h 헤더 파일에 정의되어 있습니다. 코드 분석 도구를 실행할 때 오류를 보다 정확하게 식별하려면 함수 정의에 Use_decl_annotations 주석을 추가해야 합니다. Use_decl_annotations 주석은 헤더 파일의 EVT_SPB_CONTROLLER_LOCK 함수 형식에 적용되는 주석이 사용되도록 합니다. 함수 선언에 대한 요구 사항에 대한 자세한 내용은 KMDF 드라이버에 함수 역할 형식을 사용하여 함수 선언을 참조하세요. Use_decl_annotations 대한 자세한 내용은 함수 동작에 주석을 추가를 참조하세요.

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows 8 부터 지원합니다.
대상 플랫폼 데스크톱
머리글 spbcx.h
IRQL IRQL <= DISPATCH_LEVEL 호출합니다.

추가 정보