WdfObjectAllocateContext 함수(wdfobject.h)

[KMDF 및 UMDF에 적용]

WdfObjectAllocateContext 메서드는 지정된 프레임워크 개체에 대한 컨텍스트 공간을 할당합니다.

구문

NTSTATUS WdfObjectAllocateContext(
  [in]  WDFOBJECT              Handle,
  [in]  PWDF_OBJECT_ATTRIBUTES ContextAttributes,
  [out] PVOID                  *Context
);

매개 변수

[in] Handle

프레임워크 개체에 대한 핸들입니다.

[in] ContextAttributes

컨텍스트 공간을 설명하는 호출자가 제공한 WDF_OBJECT_ATTRIBUTES 구조체에 대한 포인터입니다.

[out] Context

할당된 컨텍스트 공간에 대한 포인터를 수신하는 위치에 대한 포인터입니다.

반환 값

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

반환 코드 설명
STATUS_INVALID_PARAMETER
잘못된 매개 변수가 감지되었습니다.
STATUS_OBJECT_NAME_INVALID
ContextAttributes 매개 변수가 잘못된 WDF_OBJECT_ATTRIBUTES 구조체의 ContextTypeInfo 멤버입니다.
STATUS_INSUFFICIENT_RESOURCES
컨텍스트 공간을 할당할 수 없습니다.
STATUS_OBJECT_NAME_EXISTS
드라이버는 ContextAttributes가 지정하는 WDF_OBJECT_ATTRIBUTES 구조체의 ContextTypeInfo 멤버와 일치하는 컨텍스트 공간을 이미 할당했습니다. 이 경우 Context 매개 변수의 포인터는 기존 컨텍스트 공간에 대한 포인터를 수신하며 중복 컨텍스트 공간을 할당하지 않습니다.
STATUS_DELETE_PENDING
Handle 매개 변수가 지정하는 개체가 삭제되고 있습니다. 이 경우 프레임워크는 컨텍스트 공간을 할당하지 않습니다.
 

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

드라이버가 잘못된 개체 핸들을 제공하는 경우 버그 검사 발생합니다.

설명

일반적으로 드라이버는 WdfDeviceCreate와 같은 프레임워크 개체의 생성 메서드를 호출할 때 WDF_OBJECT_ATTRIBUTES 구조를 지정하여 개체 컨텍스트 공간을 만듭니다.

드라이버가 일부 개체에 둘 이상의 컨텍스트 공간을 할당하도록 하려면 드라이버가 개체의 생성 메서드를 호출한 후 WdfObjectAllocateContext 를 한 번 이상 호출할 수 있습니다. WdfObjectAllocateContext에 대한 각 호출은 다른 컨텍스트 형식을 지정해야 합니다. (WDF_OBJECT_ATTRIBUTES 구조체의 ContextTypeInfo 멤버는 컨텍스트 형식을 식별합니다.)

드라이버가 지정된 개체 에 대해 WdfObjectAllocateContext 를 두 번 이상 호출하는 경우 각 컨텍스트에 대해 별도의 EvtCleanupCallbackEvtDestroyCallback 콜백 함수를 제공할 수 있습니다.

WdfObjectAllocateContext를 호출할 때 WDF_OBJECT_ATTRIBUTES 구조체에서 ParentObject를 지정하지 마세요.

프레임워크가 개체에 대한 컨텍스트 공간을 할당하면 컨텍스트 공간도 0으로 초기화됩니다.

개체 컨텍스트 공간에 대한 자세한 내용은 Framework 개체 컨텍스트 공간을 참조하세요.

프레임워크 개체 계층 구조의 정리 규칙에 대한 자세한 내용은 Framework 개체 수명 주기를 참조하세요.

예제

다음 코드 예제에서는 요청 개체에 대한 컨텍스트 공간을 만듭니다. 컨텍스트 공간은 예제의 REQUEST_CONTEXT 구조를 기반으로 합니다.

typedef struct _REQUEST_CONTEXT {
  WDFMEMORY InputMemoryBuffer;
  WDFMEMORY OutputMemoryBuffer;
} REQUEST_CONTEXT, *PREQUEST_CONTEXT;

PREQUEST_CONTEXT  reqContext = NULL;
WDF_OBJECT_ATTRIBUTES  attributes;

WDF_OBJECT_ATTRIBUTES_INIT_CONTEXT_TYPE(
                                        &attributes,
                                        REQUEST_CONTEXT
                                        );
status = WdfObjectAllocateContext(
                                  Request,
                                  &attributes,
                                  &reqContext
                                  );

요구 사항

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

추가 정보

WDF_OBJECT_ATTRIBUTES

WDF_OBJECT_ATTRIBUTES_INIT_CONTEXT_TYPE

WdfDeviceCreate