다음을 통해 공유


WdfUsbTargetDeviceCreateIsochUrb 함수(wdfusb.h)

[KMDF에만 적용]

WdfUsbTargetDeviceCreateIsochUrb 메서드는 동시 USB 요청 블록(URB)을 할당합니다.

통사론

NTSTATUS WdfUsbTargetDeviceCreateIsochUrb(
  [in]            WDFUSBDEVICE           UsbDevice,
  [in, optional]  PWDF_OBJECT_ATTRIBUTES Attributes,
  [in]            ULONG                  NumberOfIsochPackets,
  [out]           WDFMEMORY              *UrbMemory,
  [out, optional] PURB                   *Urb
);

매개 변수

[in] UsbDevice

WdfUsbTargetDeviceCreateWithParameters대한 이전 호출에서 가져온 USB 디바이스 개체에 대한 핸들입니다.

[in, optional] Attributes

새 메모리 개체에 대한 특성을 포함하는 호출자 제공 WDF_OBJECT_ATTRIBUTES 구조체에 대한 포인터입니다. 드라이버가 이 매개 변수를 제공하는 경우 구조체의 ParentObject 멤버는 프레임워크에서 만든 USB 디바이스 개체(WDFUSBDEVICE) 또는 요청 개체(WDFREQUEST) 또는 부모 체인이 이러한 형식 중 하나로 이어지는 개체여야 합니다. 이 매개 변수는 선택 사항이며 WDF_NO_OBJECT_ATTRIBUTES 수 있습니다.

[in] NumberOfIsochPackets

시스템이 URB에서 메모리를 할당하는 등시 패킷 수를 지정합니다.

[out] UrbMemory

프레임워크 메모리 개체에 대한 핸들을 수신하는 WDFMEMORY 형식 위치에 대한 포인터입니다.

[out, optional] Urb

새 등시 URB의 주소를 받는 URB 구조체에 대한 포인터입니다. 프레임워크는 URB 구조체의 콘텐츠를 0으로 초기화합니다. 이 매개 변수는 선택 사항이며 NULL일 수 있습니다.

반환 값

WdfUsbTargetDeviceCreateIsochUrb 작업이 성공하면 STATUS_SUCCESS 반환합니다. 그렇지 않으면 이 메서드는 다음 값 중 하나를 반환할 수 있습니다.

반환 코드 묘사
STATUS_INVALID_PARAMETER
잘못된 매개 변수가 검색되었습니다.
STATUS_INVALID_DEVICE_STATE
드라이버가 WDF_USB_DEVICE_CREATE_CONFIG_INIT호출할 때 클라이언트 계약 버전을 지정하지 않았습니다.
STATUS_INSUFFICIENT_RESOURCES
메모리가 부족했습니다.
 

이 메서드는 다른NTSTATUS 값을 반환할 수도 있습니다.

발언

WdfUsbTargetDeviceCreateIsochUrb호출하기 전에 드라이버는 WdfUsbTargetDeviceCreateWithParameters호출해야 합니다. 성공하면 WdfUsbTargetDeviceCreateIsochUrb 새로 할당된 동시 URB를 설명하는 프레임워크 메모리 개체에 대한 핸들을 반환합니다.

드라이버는 WdfUsbTargetDeviceFormatRequestForUrb호출하기 전에 WdfUsbTargetDeviceCreateIsochUrb 호출하여 URB 구조를 할당할 수 있습니다.

일반적으로 드라이버는 요청 처리기내에서 WdfUsbTargetDeviceCreateIsochUrb 호출합니다.

부모 개체가 삭제되면 메모리 개체와 해당 버퍼가 삭제됩니다. 또한 드라이버는 WdfObjectDelete호출하여 메모리 개체와 해당 버퍼를 삭제할 수 있습니다.

관련 정보는 WdfUsbTargetDeviceCreateUrb 설명 섹션을 참조하세요.

예제

다음 코드 예제는 Isorwr 샘플 드라이버의 PerformIsochTransfer 루틴을 기반으로 합니다. 이 예제에서는 WdfUsbTargetDeviceCreateIsochUrb 호출하여 동시 USB 요청 블록을 할당합니다. 이 예제에서는 등시 전송 요청을 보유하는 데 필요한 바이트 수를 확인한 다음 URB에서 URB 헤더 및 등시 패킷을 수동으로 구성합니다. 이 시점에서 드라이버는 WdfUsbTargetDeviceCreateUrb예제와 같이 WdfUsbTargetPipeFormatRequestForUrb호출할 수 있습니다.


USBD_PIPE_HANDLE usbdPipeHandle;
ULONG numPackets = UserBufferLength/TransferSizePerFrame;
ULONG urbSize;
PURB urb;  
WDFMEMORY memory;

WDF_OBJECT_ATTRIBUTES_INIT(&objectAttribs);  
objectAttribs.ParentObject = UsbDevice;

status = WdfUsbTargetDeviceCreateIsochUrb(
                                     pDevContext->WdfUsbTargetDevice,  
                                     &objectAttribs,  
                                     0, 
                                     numPackets, 
                                     &memory,  
                                     NULL  
                                     ); 
 
urb = WdfMemoryGetBuffer(urbMemory, &urbSize); 
urbSize = GET_ISO_URB_SIZE(numPackets);  

usbdPipeHandle = WdfUsbTargetPipeWdmGetPipeHandle(pipe);
urb->UrbIsochronousTransfer.Hdr.Length = GET_ISO_URB_SIZE(numPackets);  
urb->UrbIsochronousTransfer.Hdr.Function = URB_FUNCTION_ISOCH_TRANSFER;  
urb->UrbIsochronousTransfer.PipeHandle = usbdPipeHandle; 

for (packetId = 0; packetId < numberOfPackets; packetId++) {

     Urb-> UrbIsochronousTransfer.IsoPacket[packetId].Offset = xxx;
     Urb-> UrbIsochronousTransfer.IsoPacket[packetId].YYY = yyy;
}


요구 사항

요구
지원되는 최소 클라이언트 Windows Vista
대상 플랫폼 보편적
최소 KMDF 버전 1.11
헤더 wdfusb.h(Wdfusb.h 포함)
라이브러리 Wdf01000.sys(프레임워크 라이브러리 버전 관리 참조)
IRQL <=DISPATCH_LEVEL
DDI 규정 준수 규칙 DriverCreate(kmdf)

참고 항목

WdfUsbTargetDeviceCreateUrb

WdfUsbTargetDeviceCreateWithParameters