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