Share via


NdisScheduleWorkItem 함수(ndis.h)

참고 NDIS 5. x 는 더 이상 사용되지 않으며 NDIS 6으로 대체됩니다. x. 새로운 NDIS 드라이버 개발은 Windows Vista부터 시작하는 네트워크 드라이버를 참조하세요. NDIS 5 포팅에 대한 자세한 내용입니다. x 드라이버를 NDIS 6에 연결합니다. x, NDIS 5.x 드라이버를 NDIS 6.0으로 포팅을 참조하세요.

NdisScheduleWorkItem 은 시스템 작업자 스레드가 항목을 제거하고 드라이버가 이전에 NdisInitializeWorkItem에 제공한 콜백 함수를 제어하는 큐에 지정된 작업 항목을 삽입합니다.

구문

NDIS_STATUS NdisScheduleWorkItem(
  [in] __drv_aliasesMem PNDIS_WORK_ITEM WorkItem
);

매개 변수

[in] WorkItem

NdisInitializeWorkItem에 대한 이전 호출에 의해 설정된 작업 항목에 대한 포인터입니다.

반환 값

NdisScheduleWorkItem 은 항상 성공하므로 항상 NDIS_STATUS_SUCCESS 반환합니다.

설명

NdisScheduleWorkItem을 호출하면 NDIS 드라이버가 현재 작업자-스레드 콜백 함수로 실행 중인 발생된 IRQL보다 낮은 IRQL에서 수행할 수 있거나 수행해야 하는 드라이버 결정 작업을 연기할 수 있습니다.

드라이버의 콜백은 IRQL = PASSIVE_LEVEL 나중에 시스템 스레드 컨텍스트 내에서 실행됩니다. 이 호출자 제공 함수는 드라이버가 WorkItem에 할당한 스토리지를 회수합니다. 예를 들어 드라이버가 NdisInitializeWorkItem에 컨텍스트 영역을 제공하기 위해 NdisAllocateMemoryWithTag를 호출한 경우 콜백 함수는 컨트롤을 반환하기 전에 WorkItem을 사용하여 NdisFreeMemory에 대한 상호 호출을 수행해야 합니다.

드라이버가 이미 하나의 동기화 개체를 보유하고 있고 다른 동기화 개체를 획득하려고 시도할 수 있는 경우 콜백 루틴이 작업을 완료할 때까지 기다리지 않아야 합니다. 예를 들어 NDIS 드라이버는 NdisScheduleWorkItem을 호출하기 전에 현재 보유한 스핀 잠금 등을 해제해야 합니다. 또한 최고 수준의 NDIS 프로토콜 드라이버는 NdisScheduleWorkItem을 호출하기 전에 현재 보유한 세마포, 뮤텍스, 리소스 변수 등을 해제해야 합니다. 동기 작업자 스레드 작업을 큐에 대기하기 전에 모든 동기화 리소스를 해제하면 교착 상태가 방지됩니다.

직렬화된 미니포트 드라이버는 작업자 스레드 콜백 루틴을 큐에 대기하려고 시도해서는 안 됩니다. 이러한 드라이버가 NIC 컨텍스트 영역에 대한 액세스를 작업자 스레드 콜백과 동기화할 수 있는 방법이 없기 때문입니다. 따라서 이러한 직렬화된 NDIS 드라이버는 일시적인 시스템 충돌을 일으키지 않고 어댑터별 컨텍스트 영역에서 작업자 스레드 콜백 함수와 아무것도 공유할 수 없습니다.

  • 대상 플랫폼: 유니버설
  • 버전: Windows Vista의 NDIS 6.0 드라이버에는 지원되지 않습니다. 대신 NdisQueueIoWorkItem을 사용합니다. Windows Vista 및 Windows XP에서 NDIS 5.1 드라이버에 대해 지원됩니다.

요구 사항

요구 사항
헤더 ndis.h(Ndis.h 포함)
IRQL IRQL <= DISPATCH_LEVEL

추가 정보