다음을 통해 공유


DXGKDDI_MIRACAST_HANDLE_IO_CONTROL 콜백 함수(dispmprt.h)

MiracastIoControl 함수에 대한 사용자 모드 디스플레이 드라이버 호출에 대한 응답으로 디스플레이 미니포트 드라이버가 동기 I/O 컨트롤 요청을 처리하도록 요청하기 위해 운영 체제에서 호출됩니다.

구문

DXGKDDI_MIRACAST_HANDLE_IO_CONTROL DxgkddiMiracastHandleIoControl;

NTSTATUS DxgkddiMiracastHandleIoControl(
  [in]  PVOID DriverContext,
  [in]  PVOID MiracastContext,
  [in]  ULONG InputBufferSize,
  [in]  VOID *pInputBuffer,
  [in]  ULONG OutputBufferSize,
  [out] VOID *pOutputBuffer,
  [out] ULONG *BytesReturned
)
{...}

매개 변수

[in] DriverContext

디스플레이 어댑터와 연결된 컨텍스트 블록에 대한 핸들입니다. 디스플레이 미니포트 드라이버의 DxgkDdiAddDevice 함수는 이전에 DirectX 그래픽 커널 하위 시스템에 이 핸들을 제공했습니다.

[in] MiracastContext

운영 체제에서 제공하는 Miracast 디바이스 컨텍스트입니다. 이 컨텍스트는 DxgkDdiMiracastCreateContext 함수에 대한 호출에서 디스플레이 미니포트 드라이버에 의해 제공되었습니다.

[in] InputBufferSize

운영 체제에서 pInputBuffer가 가리키는 입력 버퍼의 크기(바이트)로 제공됩니다. 이 값은 사용자 모드 MiracastIoControl 함수의 InputBufferSize 매개 변수로 시작되었습니다.

[in] pInputBuffer

운영 체제에서 입력 버퍼에 대한 포인터로 제공합니다. 이 값은 사용자 모드 MiracastIoControl 함수의 InputBufferSize 매개 변수로 시작되었습니다.

InputBufferSize 는 버퍼의 크기를 지정합니다.

[in] OutputBufferSize

운영 체제에서 pOutputBuffer가 가리키는 출력 버퍼의 크기(바이트)로 제공됩니다.

이 값은 사용자 모드 MiracastIoControl 함수의 OutputBufferSize 매개 변수로 시작되었습니다.

[out] pOutputBuffer

운영 체제에서 출력 버퍼에 대한 포인터로 제공합니다. 이 값은 사용자 모드 MiracastIoControl 함수의 pOutputBuffer 매개 변수로 시작되었습니다.

OutBufferSize 는 버퍼의 크기를 지정합니다.

[out] BytesReturned

pOutputBuffer가 가리키는 버퍼에서 반환된 디스플레이 미니포트 드라이버의 바이트 수인 ULONG 형식 값을 보유하는 버퍼에 대한 포인터로 운영 체제에서 제공합니다.

반환 값

성공하면 STATUS_SUCCESS 반환합니다. 그렇지 않으면 Ntstatus.h에 정의된 오류 코드 중 하나를 반환합니다.

설명

운영 체제는 사용자 모드 MiracastIoControl 요청이 호출된 것과 동일한 프로세스 공간에서 DxgkDdiMiracastIoControl 호출이 발생하도록 보장합니다.

운영 체제는 MiracastIoControl의 각 매개 변수에서 입력 및 출력 버퍼 크기의 값을 복사하더라도 디스플레이 미니포트 드라이버는 버퍼를 사용하기 전에 버퍼 크기를 검사합니다. 또한 드라이버는 ProbeForRead 및/또는 ProbeForWrite 함수를 사용하여 호출 블록의 try/except 내에서 검색 작업을 수행하여 입력 버퍼가 가리키는 사용자 모드 메모리를 확인해야 합니다.

이 I/O 컨트롤 작업은 사용자 모드 MiracastIoControl 함수를 호출하여 동기적으로 처리됩니다.

동기화

운영 체제는 DxgkDdiMiracastCreateContext, DxgkDdiMiracastDestroyContextDxgkDdiMiracastIoControl 함수를 Miracast 클래스로 그룹화합니다.

이 함수의 스레딩 및 동기화 수준은 사용자 모드 드라이버가 MiracastIoControl 함수 호출에서 HardwareAccess 매개 변수를 설정하는 방법에 따라 설정됩니다.

  • HardwareAccessFALSE인 경우 운영 체제는 DxgkDdiMiracastIoControl스레딩 및 동기화 두 번째 수준에 정의된 대로 두 번째 수준 동기화 모드를 따르도록 보장합니다. DxgkDdiMiracastIoControl 은 수준 2 함수의 다른 수준 0, 1 또는 Miracast가 아닌 클래스가 다른 스레드 컨텍스트에서 호출될 때 호출할 수 있습니다. 그러나 수준 2 Miracast 클래스 함수 중 하나만 한 번에 호출할 수 있습니다.
  • HardwareAccessTRUE이면 DxgkDdiMiracastIoControl스레딩 및 동기화 세 번째 수준에 정의된 대로 세 번째 수준 동기화 모드를 따릅니다. GPU를 플러시하면 상당한 처리 오버헤드가 생성됩니다.

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows 8.1
지원되는 최소 서버 Windows Server 2012 R2
대상 플랫폼 데스크톱
머리글 dispmprt.h(Dispmprt.h 포함)
IRQL PASSIVE_LEVEL

추가 정보

DxgkDdiAddDevice

DxgkDdiMiracastCreateContext

MiracastIoControl

ProbeForRead

ProbeForWrite