다음을 통해 공유


DXGKCB_MIRACAST_SEND_MESSAGE 콜백 함수(dispmprt.h)

사용자 모드 표시 드라이버에 비동기 메시지를 보냅니다.

통사론

DXGKCB_MIRACAST_SEND_MESSAGE DxgkcbMiracastSendMessage;

NTSTATUS DxgkcbMiracastSendMessage(
  [in]           HANDLE MiracastHandle,
  [in]           ULONG InputBufferSize,
  [in]           VOID *pInputBuffer,
  [in]           ULONG OutputBufferSize,
  [out]          VOID *pOutputBuffer,
  [in, optional] DXGKCB_MIRACAST_SEND_MESSAGE_CALLBACK pCallback,
  [in, optional] PVOID pCallbackContext
)
{...}

매개 변수

[in] MiracastHandle

Miracast 디스플레이 디바이스에 대한 드라이버 제공 핸들입니다. 이 핸들은 원래 DxgkDdiMiracastCreateContext 함수에 대한 호출에서 DXGK_MIRACAST_DISPLAY_CALLBACKS 구조체의 MiracastHandle 멤버에 전달되었습니다.

[in] InputBufferSize

pInputBuffer 가리키는 입력 버퍼의 크기(바이트)입니다.

[in] pInputBuffer

입력 버퍼에 대한 포인터입니다. InputBufferSize 버퍼의 크기를 지정합니다.

입력 버퍼에 대한 자세한 내용은 비고를 참조하세요.

[in] OutputBufferSize

pOutputBuffer 가리키는 출력 버퍼의 크기(바이트)입니다.

[out] pOutputBuffer

출력 버퍼에 대한 포인터입니다. OutBufferSize 버퍼의 크기를 지정합니다.

출력 버퍼에 대한 자세한 내용은 비고를 참조하세요.

[in, optional] pCallback

디스플레이 미니포트 드라이버가 DxgkCbMiracastSendMessageCallback 콜백 함수에 제공하는 선택적 포인터입니다.

디스플레이 미니포트 드라이버가 DxgkCbMiracastSendMessageCallback대한 포인터를 제공하는 경우 사용자 모드 드라이버가 메시지를 처리한 후 운영 체제는 DxgkCbMiracastSendMessageCallback호출하여 비동기적으로 사용자 모드 드라이버에 메시지를 보냅니다.

DxgkCbMiracastSendMessageCallback대한 호출에 대한 자세한 내용은 반환 값 및 설명 섹션을 참조하세요.

[in, optional] pCallbackContext

드라이버 제공 콜백 컨텍스트에 대한 선택적 드라이버 제공 포인터입니다. 운영 체제는 작업이 완료된 후 드라이버 제공 콜백 루틴에 이 컨텍스트를 전달합니다.

반환 값

메시지를 성공적으로 전달하면 STATUS_PENDING 반환합니다. 그렇지 않으면 Ntstatus.h에 정의된 오류 코드 중 하나를 반환합니다.

디스플레이 미니포트 드라이버가 사용자 모드에서 메시지 처리 상태를 알아야 하는 경우 pCallback 매개 변수에 DxgkCbMiracastSendMessageCallback 함수를 제공하고 해당 함수의 pIoStatusBlock 매개 변수에서 반환 상태를 확인해야 합니다.

발언

디스플레이 미니포트 드라이버가 pInputBufferpOutputBuffer 버퍼를 제공하는 경우 DxgkCbMiracastSendMessageCallback 함수가 호출될 때까지 이 두 버퍼를 보유해야 합니다. 그렇지 않으면 임의 메모리 손상 문제를 만들 수 있습니다.

드라이버가 pCallback 매개 변수에 DxgkCbMiracastSendMessageCallback 제공하는 경우 DxgkCbMiracastSendMessageCallbackDxgkCbMiracastSendMessage 반환되기 전에 반환될 수 있습니다.

호출 시퀀스 예제

이 함수를 사용하는 방법을 보여 주는 예제 코드는 다음과 같습니다.
typedef struct _CALLBACK_CONTEXT
{
    UCHAR InputBuffer[INPUT_BUFFER_SIZE];
    UCHAR OutputBuffer[OUTPUT_BUFFER_SIZE];
} CALLBACK_CONTEXT, *PCALLBACK_CONTEXT;

...

_IRQL_requires_(PASSIVE_LEVEL)
VOID
DriverCallbackFunction(
    _In_ PVOID Context,
    _In_ PIO_STATUS_BLOCK pIoStatusBlock
    )
{
    PCALLBACK_CONTEXT CallbackContex = (PCALLBACK_CONTEXT)Context;

    ExFreePool(CallbackContex);
}

...

    CallbackContex = (PCALLBACK_CONTEXT)ExAllocatePoolWithTag(
                            PagedPool,
                            sizeof(CALLBACK_CONTEXT),
                            DRIVER_TAG);

    if (CallbackContex == NULL)
    {
        return STATUS_NO_MEMORY;
    }

    RtlZeroMemory(CallbackContex, sizeof(CALLBACK_CONTEXT));

    CallbackContex->InputBuffer[0] = 0xaa;
    CallbackContex->InputBuffer[1] = 0x55;

    Status = 
      pDeviceContext->MiracastCallbacks.DxgkCbMiracastSendMessage(
          pDeviceContext->MiracastCallbacks.MiracastHandle,
          sizeof(CallbackContex->InputBuffer),
          CallbackContex->InputBuffer,
          sizeof(CallbackContex->OutputBuffer),
          CallbackContext->OutputBuffer,
          &DriverCallbackFunction,
          CallbackContex);

요구 사항

요구
지원되는 최소 클라이언트 Windows 8.1
지원되는 최소 서버 Windows Server 2012 R2
대상 플랫폼 바탕 화면
헤더 dispmprt.h(Dispmprt.h 포함)
IRQL PASSIVE_LEVEL

참고 항목

DXGK_MIRACAST_DISPLAY_CALLBACKS

DxgkCbMiracastSendMessageCallback

DxgkDdiMiracastCreateContext