작업 항목 사용

경고

UMDF 2는 UMDF의 최신 버전이며 UMDF 1을 대체합니다. 모든 새 UMDF 드라이버는 UMDF 2를 사용하여 작성해야 합니다. UMDF 1에 새 기능이 추가되지 않으며 최신 버전의 Windows 10 UMDF 1에 대한 지원이 제한됩니다. 유니버설 Windows 드라이버는 UMDF 2를 사용해야 합니다.

보관된 UMDF 1 샘플은 Windows 11 버전 22H2 - 2022년 5월 드라이버 샘플 업데이트에서 찾을 수 있습니다.

자세한 내용은 UMDF를 사용하여 시작 참조하세요.

작업 항목은 드라이버가 OnWorkItem 이벤트 콜백 함수에서 수행하는 작업입니다. 이러한 함수는 비동기적으로 실행됩니다.

UMDF 드라이버는 일반적으로 OnInterruptIsr 가 여러 디바이스에서 인터럽트 라인을 공유할 수 있으므로 ISR(인터럽트 서비스 요청) 실행을 지연하지 않고 추가 처리를 수행해야 하는 경우 작업 항목을 사용합니다.

일반적으로 드라이버의 OnInterruptIsr 콜백 함수는 작업 항목 개체를 만들고 시스템의 작업 항목 큐에 추가합니다. 그 후 스레드 풀 스레드는 개체를 큐에서 제거하고 작업 항목의 OnWorkItem 콜백 함수를 호출합니다.

작업 항목 설정

작업 항목을 설정하려면 드라이버가 다음을 수행해야 합니다.

  1. 작업 항목을 만듭니다.

    드라이버는 IWDFDevice3::CreateWorkItem 을 호출하여 작업 항목 개체를 만들고 작업 항목을 처리할 OnWorkItem 콜백 함수를 식별합니다.

  2. 작업 항목에 대한 정보를 저장합니다.

    일반적으로 드라이버는 작업 항목 개체의 컨텍스트 메모리를 사용하여 OnWorkItem 콜백 함수가 수행해야 하는 작업에 대한 정보를 저장합니다. OnWorkItem 콜백 함수가 호출되면 이 컨텍스트 메모리에 액세스하여 정보를 검색할 수 있습니다. 컨텍스트 메모리를 할당하고 액세스하는 방법에 대한 자세한 내용은IWDFObject::AssignContext를 참조하세요.

  3. 시스템의 작업 항목 큐에 작업 항목을 추가합니다.

    드라이버는 IWDFWorkItem::Enqueue를 호출하여 드라이버의 작업 항목을 작업 항목 큐에 추가합니다.

드라이버가 IWDFDevice3::CreateWorkItem을 호출하는 경우 선택적으로 부모 개체(예: 디바이스 개체 또는 큐 개체)를 제공할 수 있습니다. 시스템에서 해당 개체를 삭제하면 개체와 연결된 기존 작업 항목도 삭제됩니다.

WorkItem 콜백 함수 사용

작업 항목이 작업 항목 큐에 추가된 후에는 시스템 작업자 스레드를 사용할 수 있게 될 때까지 큐에 유지됩니다. 시스템 작업자 스레드는 큐에서 작업 항목을 제거한 다음 드라이버의 OnWorkItem 콜백 함수를 호출하여 작업 항목 개체를 입력으로 전달합니다.

일반적으로 OnWorkItem 콜백 함수는 다음 단계를 수행합니다.

  1. 작업 항목 개체의 컨텍스트 메모리에 액세스하여 작업 항목에 대한 드라이버 제공 정보를 가져옵니다.
  2. 지정한 작업을 수행합니다. 필요한 경우 콜백 함수는 IWDFWorkItem::GetParentObject 를 호출하여 작업 항목의 부모 개체를 확인할 수 있습니다.
  3. 드라이버가 작업 항목을 다시 큐에 추가하는 경우 작업 항목에 대한 핸들을 다시 사용할 수 있음을 나타냅니다.

일부 드라이버는 작업 항목 큐에서 작업 항목을 플러시하기 위해 IWDFWorkItem::Flush 를 호출해야 할 수 있습니다. 드라이버가 Flush 메서드를 호출하는 경우 작업자 스레드가 작업 항목 큐에서 지정된 작업 항목을 제거하고 드라이버의 OnWorkItem 콜백 함수를 호출하고 OnWorkItem 콜백 함수가 작업 항목을 처리한 후 반환될 때까지 메서드가 반환되지 않습니다.