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, DxgkDdiMiracastDestroyContext 및 DxgkDdiMiracastIoControl 함수를 Miracast 클래스로 그룹화합니다.이 함수의 스레딩 및 동기화 수준은 사용자 모드 드라이버가 MiracastIoControl 함수 호출에서 HardwareAccess 매개 변수를 설정하는 방법에 따라 설정됩니다.
- HardwareAccess가 FALSE인 경우 운영 체제는 DxgkDdiMiracastIoControl이 스레딩 및 동기화 두 번째 수준에 정의된 대로 두 번째 수준 동기화 모드를 따르도록 보장합니다. DxgkDdiMiracastIoControl 은 수준 2 함수의 다른 수준 0, 1 또는 Miracast가 아닌 클래스가 다른 스레드 컨텍스트에서 호출될 때 호출할 수 있습니다. 그러나 수준 2 Miracast 클래스 함수 중 하나만 한 번에 호출할 수 있습니다.
- HardwareAccess가 TRUE이면 DxgkDdiMiracastIoControl은 스레딩 및 동기화 세 번째 수준에 정의된 대로 세 번째 수준 동기화 모드를 따릅니다. GPU를 플러시하면 상당한 처리 오버헤드가 생성됩니다.
요구 사항
요구 사항 | 값 |
---|---|
지원되는 최소 클라이언트 | Windows 8.1 |
지원되는 최소 서버 | Windows Server 2012 R2 |
대상 플랫폼 | 데스크톱 |
머리글 | dispmprt.h(Dispmprt.h 포함) |
IRQL | PASSIVE_LEVEL |