WdfUsbTargetDeviceCreateIsochUrb 함수(wdfusb.h)

[KMDF에만 적용]

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

구문

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를 설명하는 프레임워크 메모리 개체에 대한 핸들을 반환합니다.

드라이버는 WdfUsbTargetDeviceRequestForUrb 를 호출하기 전에 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