WdfRequestCreate 함수(wdfrequest.h)

[KMDF 및 UMDF에 적용]

WdfRequestCreate 메서드는 빈 프레임워크 요청 개체를 만듭니다.

구문

NTSTATUS WdfRequestCreate(
  [in, optional] PWDF_OBJECT_ATTRIBUTES RequestAttributes,
  [in, optional] WDFIOTARGET            IoTarget,
  [out]          WDFREQUEST             *Request
);

매개 변수

[in, optional] RequestAttributes

요청 개체의 개체 특성을 지정하는 호출자가 할당한 WDF_OBJECT_ATTRIBUTES 구조체에 대한 포인터입니다. 이 매개 변수는 선택 사항이며 WDF_NO_OBJECT_ATTRIBUTES 수 있습니다.

[in, optional] IoTarget

프레임워크 I/O 대상 개체에 대한 핸들입니다. 이 매개 변수는 선택 사항이며 NULL일 수 있습니다. NULL이 아닌 경우 WdfRequestCreate는 드라이버가 결국 지정된 I/O 대상에 요청을 보낼 수 있는지 확인합니다.

[out] Request

프레임워크 요청 개체에 대한 핸들을 수신하는 위치에 대한 포인터입니다.

반환 값

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

반환 코드 설명
STATUS_INVALID_PARAMETER
입력 매개 변수가 잘못되었습니다.
STATUS_INSUFFICIENT_RESOURCES
작업을 완료할 시스템 리소스가 부족합니다.
STATUS_REQUEST_NOT_ACCEPTED
요청의 I/O 스택 위치 배열이 드라이버가 지정된 I/O 대상에 요청을 보낼 수 있을 만큼 크지 않습니다.
 

추가 반환 값 목록은 프레임워크 개체 만들기 오류를 참조하세요.

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

설명

프레임워크 기반 드라이버는 WdfRequestCreate 를 호출하여 드라이버가 이후 초기화를 위해 다른 프레임워크 함수에 전달하는 새 요청을 만들 수 있습니다. 예를 들어 USB 디바이스의 드라이버는 WdfUsbTargetPipeFormatRequestForRead 를 호출하여 새 읽기 요청의 형식을 지정할 수 있습니다.

WDM 드라이버와 통신하는 프레임워크 기반 드라이버는 WdfRequestCreateFromIrp을 호출하여 요청 내용을 지정할 수 있습니다.

드라이버가 WdfRequestCreate 를 호출하여 요청 개체를 만드는 경우 요청 개체에 대해 WdfRequestComplete 를 호출해서는 안 됩니다. 대신 드라이버가 요청 개체 사용을 마쳤을 때 WdfObjectDelete 를 호출해야 합니다. 자세한 내용은 I/O 요청 완료를 참조하세요.

기본적으로 새 요청 개체의 부모는 WdfDriverCreate 메서드가 만든 프레임워크 드라이버 개체입니다. WDF_OBJECT_ATTRIBUTES 구조체의 ParentObject 멤버를 사용하여 다른 부모를 지정할 수 있습니다. 프레임워크는 부모 개체를 삭제할 때 요청 개체를 삭제합니다. 드라이버가 기본 부모를 변경하지 않으면 드라이버가 개체 사용을 마쳤을 때 요청 개체를 삭제해야 합니다. 그렇지 않으면 요청 개체는 I/O 관리자가 드라이버를 언로드할 때까지 유지됩니다.

WdfRequestCreate를 호출하는 방법에 대한 자세한 내용은 프레임워크 요청 개체 만들기를 참조하세요.

예제

다음 코드 예제에서는 I/O 대상 개체를 만들고 , WDF_OBJECT_ATTRIBUTES 구조를 초기화하고, WdfRequestCreate를 호출합니다. 새 요청 개체의 부모는 I/O 대상 개체입니다.

WDF_OBJECT_ATTRIBUTES  attributes;
WDFREQUEST newRequest;
WDFIOTARGET ioTarget;
...
status = WdfIoTargetCreate(
                           Device,
                           WDF_NO_OBJECT_ATTRIBUTES,
                           &ioTarget
                           );
  ...
WDF_OBJECT_ATTRIBUTES_INIT(&attributes);
attributes.ParentObject = ioTarget;

status = WdfRequestCreate(
                          &attributes,
                          ioTarget,
                          &newRequest
                          );

if (!NT_SUCCESS(status)) {
    return status;
}

요구 사항

요구 사항
대상 플랫폼 유니버설
최소 KMDF 버전 1.0
최소 UMDF 버전 2.0
머리글 wdfrequest.h(Wdf.h 포함)
라이브러리 Wdf01000.sys(KMDF); WUDFx02000.dll(UMDF)
IRQL <=DISPATCH_LEVEL
DDI 규정 준수 규칙 DriverCreate(kmdf), InvalidReqAccessLocal(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf), ReqDelete(kmdf), RequestForUrbXrb(kmdf), RequestSendAndForgetNoFormatting2(kmdf)

추가 정보

WDF_OBJECT_ATTRIBUTES

WDF_OBJECT_ATTRIBUTES_INIT

WdfDeviceInitSetRequestAttributes

WdfDriver만들기

WdfRequestCreateFromIrp

WdfRequestReuse