DXGK_SPB_INTERFACE 구조체(dispmprt.h)

DXGK_SPB_INTERFACE 구조에는 WDDM(Windows Display Driver Model) 1.2 이상 디스플레이 미니포트 드라이버가 SPB 리소스를 검사하고 변경하기 위해 호출할 수 있는 SPB(Simple Peripheral Bus) 인터페이스의 함수에 대한 포인터가 포함되어 있습니다.

구문

typedef struct _DXGK_SPB_INTERFACE {
  USHORT                 Size;
  USHORT                 Version;
  PVOID                  Context;
  PINTERFACE_REFERENCE   InterfaceReference;
  PINTERFACE_DEREFERENCE InterfaceDereference;
  NTSTATUS(HANDLE DeviceHandle,LARGE_INTEGER SpbReourceId,UNICODE_STRING *SpbResourceSubName,ACCESS_MASK DesiredAccess,ULONG ShareAccess,ULONG OpenOptions,VOID **SpbResource)              * )(OpenSpbResource;
  NTSTATUS()(HANDLE DeviceHandle,VOID *SpbResource)              * CloseSpbResource;
  NTSTATUS(ANDLE DeviceHandle,VOID *SpbResource,ULONG Length,VOID *Buffer,LARGE_INTEGER *ByteOffset,HANDLE EventHandle,IO_STATUS_BLOCK *IoStatusBlock)              * )(HReadSpbResource;
  NTSTATUS(ANDLE DeviceHandle,VOID *SpbResource,ULONG Length,VOID *Buffer,LARGE_INTEGER *ByteOffset,HANDLE EventHandle,IO_STATUS_BLOCK *IoStatusBlock)              * )(HWriteSpbResource;
  NTSTATUS(ANDLE DeviceHandle,VOID *SpbResource,ULONG IoControlCode,ULONG InBufferSize,VOID *InputBuffer,ULONG OutBufferSize,VOID *OutputBuffer,HANDLE EventHandle,IO_STATUS_BLOCK *IoStatusBlock)              * )(HSpbResourceIoControl;
} DXGK_SPB_INTERFACE, *PDXGK_SPB_INTERFACE;

멤버

Size

이 구조체의 크기(바이트)입니다.

Version

SPB 인터페이스의 버전 번호입니다. 버전 번호 상수는 Dispmprt.h (예: DXGK_SPB_INTERFACE_VERSION_1)에 정의됩니다.

Context

디스플레이 미니포트 드라이버에서 제공하는 컨텍스트에 대한 포인터입니다.

InterfaceReference

디스플레이 미니포트 드라이버에 의해 구현되는 인터페이스 참조 함수에 대한 포인터입니다.

InterfaceDereference

디스플레이 미니포트 드라이버에 의해 구현되는 인터페이스 역참조 함수에 대한 포인터입니다.

OpenSpbResource

SPB(Simple Peripheral Bus) 리소스를 엽니다. 모든 입력 매개 변수는 디스플레이 미니포트 드라이버에서 제공합니다.

OpenSpbResource 매개 변수 Description
DeviceHandle 디스플레이 어댑터를 나타내는 핸들입니다. 디스플레이 미니포트 드라이버는 이전에 DxgkDdiStartDevice 함수에 전달된 DXGKRNL_INTERFACE 구조체의 DeviceHandle 멤버에서 이 핸들을 얻었습니다.
SpbReourceId SPB 리소스 허브의 리소스 ID입니다.
SpbResourceSubName 유니코드 SPB 리소스 하위 이름에 대한 선택적 포인터입니다.
DesiredAccess SPB 리소스에 대한 요청된 액세스를 결정하는 ACCESS_MASK 값입니다. 자세한 내용은 ZwCreateFile 함수의 DesiredAccess 매개 변수를 참조하세요.
ShareAccess 파일에 대한 공유 액세스 유형입니다. 자세한 내용은 ZwCreateFileShareAccess 매개 변수를 참조하세요.
OpenOptions SPB 리소스를 열 때 적용할 옵션입니다. 자세한 내용은 ZwCreateFileCreateOptions 매개 변수를 참조하세요.
SpbResource SPB 리소스에 핸들을 반환하는 데 사용되는 버퍼에 대한 포인터입니다.

CloseSpbResource

SPB 리소스를 닫습니다. 모든 입력 매개 변수는 디스플레이 미니포트 드라이버에서 제공합니다.

열린 개체 핸들을 닫으면 해당 핸들이 유효하지 않습니다. 또한 시스템은 개체의 핸들 수를 감소시키고 개체를 삭제할 수 있는지 여부를 확인합니다. 시스템은 개체의 모든 핸들이 닫혀 있고 참조된 포인터가 남아 있지 않을 때까지 개체를 실제로 삭제하지 않습니다.

드라이버는 CloseSpbResource 를 호출하여 핸들이 더 이상 필요하지 않은 즉시 OpenSpbResource 로 연 모든 핸들을 닫아야 합니다.

CloseSpbResource의 호출자는 이 함수가 반환되기 전에 모든 I/O가 완료되기를 자동으로 대기한다고 가정해서는 안 됩니다.

CloseSpbResource 매개 변수 Description
DeviceHandle 디스플레이 어댑터를 나타내는 핸들입니다. 디스플레이 미니포트 드라이버는 이전에 DxgkDdiStartDevice 함수에 전달된 DXGKRNL_INTERFACE 구조체의 DeviceHandle 멤버에서 이 핸들을 얻었습니다.
SpbResource OpenSpbResource 함수를 사용하여 디스플레이 미니포트 드라이버가 연 SPB 리소스에 대한 포인터입니다.

ReadSpbResource

열려 있는 SPB 리소스에서 데이터를 읽습니다. 모든 입력 매개 변수는 디스플레이 미니포트 드라이버에서 제공합니다.

OpenSpbResource에 대한 호출이 OpenOptions 플래그 FILE_SYNCHRONOUS_IO_ALERT 또는 FILE_SYNCHRONOUS_IO_NONALERT(Wdm.h에 정의됨)를 설정하는 경우 I/O 관리자는 현재 파일 위치를 유지합니다. 이 경우 ReadSpbResource 의 호출자는 명시적 ByteOffset 값 대신 현재 파일 위치 오프셋을 사용할 수 있도록 지정할 수 있습니다. 이 사양은 다음 방법 중 하나를 사용하여 만들 수 있습니다.

  • HighPart 멤버가 -1로 설정되고 LowPart 멤버가 시스템 정의 값 FILE_USE_FILE_POINTER_POSITION(Wdm.h에 정의됨)로 설정된 LARGE_INTEGER 값에 대한 포인터를 지정합니다.
  • ByteOffset에 대한 NULL 포인터를 전달합니다.

ReadSpbResource 는 I/O 관리자가 유지 관리하는 현재 파일 위치를 사용하는 경우 읽기 작업을 완료할 때 읽은 바이트 수를 추가하여 현재 파일 위치를 업데이트합니다.

I/O 관리자가 현재 파일 위치를 유지 관리하는 경우에도 호출자는 명시적 ByteOffset 값을 ReadSpbResource에 전달하여 이 위치를 다시 설정할 수 있습니다. 이렇게 하면 현재 파일 위치가 해당 ByteOffset 값으로 자동으로 변경되고 읽기 작업이 수행된 다음 실제로 읽은 바이트 수에 따라 위치가 업데이트됩니다. 이 기술은 호출자에게 원자성 검색 및 읽기 서비스를 제공합니다.

OpenSpbResource 매개 변수 Description
DeviceHandle 디스플레이 어댑터를 나타내는 핸들입니다. 디스플레이 미니포트 드라이버는 이전에 DxgkDdiStartDevice 함수에 전달된 DXGKRNL_INTERFACE 구조체의 DeviceHandle 멤버에서 이 핸들을 얻었습니다.
SpbResource OpenSpbResource 함수를 사용하여 디스플레이 미니포트 드라이버가 연 SPB 리소스에 대한 포인터입니다.
길이 Buffer 매개 변수가 가리키는 버퍼의 크기(바이트)입니다.
Buffer 지정된 SPB 리소스에서 읽은 데이터를 수신하는 버퍼에 대한 포인터입니다.
ByteOffset 읽기 작업이 시작될 SPB 리소스의 시작 바이트 오프셋을 지정하는 변수에 대한 선택적 포인터입니다. 파일의 끝부분에서 읽기를 시도하면 ReadSpbResource 에서 오류가 반환됩니다.
EventHandle 호출자가 만든 이벤트에 대한 선택적 핸들입니다. 이 매개 변수가 제공되면 호출자는 읽기 작업이 완료되고 지정된 이벤트가 Signaled 상태로 설정될 때까지 대기 상태로 전환됩니다. 이 매개 변수는 NULL일 수 있습니다.
IoStatusBlock 최종 완료 상태 수신하는 IO_STATUS_BLOCK 구조체에 대한 포인터 및 요청된 읽기 작업에 대한 정보입니다. IO_STATUS_BLOCK 구조의 정보 멤버는 SPB 리소스에서 실제로 읽은 바이트 수를 받습니다.

WriteSpbResource

열려 있는 SPB 리소스에 데이터를 씁니다.

OpenSpbResource 함수에 대한 호출이 DesiredAccess 플래그만 FILE_APPEND_DATA 설정하면 ByteOffset 매개 변수는 무시됩니다. 이 경우 퍼 매개 변수가 가리키는 버퍼의 데이터( Length 바이트)는 파일의 현재 끝에서 시작하여 작성됩니다.

OpenSpbResource 호출이 FILE_SYNCHRONOUS_IO_ALERT 또는 FILE_SYNCHRONOUS_IO_NONALERTCreateOptions 플래그 중 하나를 설정하는 경우 I/O 관리자는 현재 파일 위치를 유지 관리합니다. 이 경우 WriteSpbResource 호출자는 명시적 ByteOffset 값 대신 현재 파일 위치 오프셋을 사용할 수 있도록 지정할 수 있습니다. 이 사양은 다음 방법 중 하나를 사용하여 만들 수 있습니다.

  • HighPart 멤버가 -1로 설정되고 LowPart 멤버가 시스템 정의 값 FILE_USE_FILE_POINTER_POSITION(Wdm.h에 정의됨)로 설정된 LARGE_INTEGER 값에 대한 포인터를 지정합니다.
  • ByteOffset에 대한 NULL 포인터를 전달합니다.

WriteSpbResource 는 I/O 관리자가 유지 관리하는 현재 파일 위치를 사용하는 경우 쓰기 작업을 완료할 때 작성된 바이트 수를 추가하여 현재 파일 위치를 업데이트합니다.

I/O 관리자가 현재 파일 위치를 유지 관리하는 경우에도 호출자는 명시적 ByteOffset 값을 WriteSpbResource에 전달하여 이 위치를 다시 설정할 수 있습니다. 이렇게 하면 현재 파일 위치가 해당 ByteOffset 값으로 자동으로 변경되고 쓰기 작업이 수행된 다음 실제로 작성된 바이트 수에 따라 위치가 업데이트됩니다. 이 기술은 호출자에게 원자성 검색 및 쓰기 서비스를 제공합니다.

또한 HighPart가 -1로 설정되고 LowPartFILE_WRITE_TO_END_OF_FILE 설정된 LARGE_INTEGER 값에 대한 포인터를 ByteOffset에 지정하여 파일의 현재 끝에서 쓰기 작업을 시작할 수도 있습니다. 이는 I/O 관리자가 현재 파일 위치를 유지 관리하는지 여부에 관계없이 작동합니다.

WriteSpbResource 매개 변수 Description
DeviceHandle 디스플레이 어댑터를 나타내는 핸들입니다. 디스플레이 미니포트 드라이버는 이전에 DxgkDdiStartDevice 함수에 전달된 DXGKRNL_INTERFACE 구조체의 DeviceHandle 멤버에서 이 핸들을 얻었습니다.
SpbResource OpenSpbResource 함수를 사용하여 디스플레이 미니포트 드라이버가 연 SPB 리소스에 대한 포인터입니다.
길이 Buffer 매개 변수가 가리키는 버퍼의 크기(바이트)입니다.
Buffer 지정된 SPB 리소스에 쓸 데이터를 포함하는 호출자가 할당한 버퍼에 대한 포인터입니다.
ByteOffset 쓰기 작업이 시작될 SPB 리소스의 시작 바이트 오프셋을 지정하는 변수에 대한 선택적 포인터입니다. LengthByteOffset 매개 변수가 현재 파일 끝 표시를 지나 쓰기 작업을 지정하는 경우 WriteSpbResource는 자동으로 파일을 확장하고 파일 끝 표시를 업데이트합니다. 이러한 이전 및 새 파일 끝 표시 사이에 명시적으로 기록되지 않은 바이트는 0으로 정의됩니다.
EventHandle 호출자가 만든 이벤트에 대한 선택적 핸들입니다. 이 매개 변수가 제공되면 쓰기 작업이 완료되고 지정된 이벤트가 Signaled 상태로 설정될 때까지 호출자가 대기 상태로 전환됩니다. 이 매개 변수는 NULL일 수 있습니다.
IoStatusBlock 최종 완료 상태 수신하는 IO_STATUS_BLOCK 구조체 및 요청된 쓰기 작업에 대한 정보를 가리키는 포인터입니다. IO_STATUS_BLOCK 구조체의 정보 멤버는 SPB 리소스에 실제로 기록된 바이트 수를 받습니다.

SpbResourceIoControl

열려 있는 SPB(Simple Peripheral Bus) 리소스에서 I/O 제어 작업을 수행합니다. 모든 입력 매개 변수는 디스플레이 미니포트 드라이버에서 제공합니다.

호출자가 비동기 I/O( FILE_SYNCHRONOUS_XXX 만들기/열기 옵션 집합 없음)에 대한 파일을 연 경우 디바이스 제어 작업이 완료될 때 지정된 이벤트가 Signaled 상태로 설정됩니다. 그렇지 않으면 DeviceHandle 매개 변수로 지정된 파일 개체가 Signaled 상태로 설정됩니다.

SpbResourceIoControl 매개 변수 Description
DeviceHandle 디스플레이 어댑터를 나타내는 핸들입니다. 디스플레이 미니포트 드라이버는 이전에 DxgkDdiStartDevice 함수에 전달된 DXGKRNL_INTERFACE 구조체의 DeviceHandle 멤버에서 이 핸들을 얻었습니다.
SpbResource OpenSpbResource 함수를 사용하여 디스플레이 미니포트 드라이버가 연 SPB 리소스에 대한 포인터입니다.
IoControlCode 일반적으로 기본 디바이스 드라이버에서 수행할 디바이스 I/O 제어 작업을 나타내는 디바이스 I/O 제어 코드(IOCTL_XXX)입니다. 이 매개 변수의 값은 InputBufferOutputBuffer 매개 변수의 형식 및 필수 길이와 다음 매개 변수 쌍을 결정합니다.
InBufferSize InputBuffer 매개 변수가 가리키는 버퍼의 크기(바이트)입니다. InputBufferNULL인 경우 이 값은 무시됩니다.
InputBuffer 대상 디바이스에 제공될 디바이스별 정보를 포함하는 호출자가 할당한 입력 버퍼에 대한 포인터입니다. IoControlCode 매개 변수가 입력 데이터가 필요하지 않은 작업을 지정하는 경우 이 포인터는 NULL일 수 있습니다.
OutBufferSize OutputBuffer 매개 변수가 가리키는 버퍼의 크기(바이트)입니다. OutputBufferNULL인 경우 이 값은 무시됩니다.
OutputBuffer 대상 디바이스에서 정보가 반환되는 호출자가 할당한 출력 버퍼에 대한 포인터입니다. IoControlCode 매개 변수가 출력 데이터를 생성하지 않는 작업을 지정하는 경우 이 포인터는 NULL일 수 있습니다.
EventHandle 호출자가 만든 이벤트에 대한 선택적 핸들입니다. 이 매개 변수가 제공되면 요청된 작업이 완료되고 지정된 이벤트가 Signaled 상태로 설정될 때까지 호출자가 대기 상태로 전환됩니다. 이 매개 변수는 NULL일 수 있습니다.
IoStatusBlock 최종 완료 상태 수신하는 변수에 대한 포인터 및 요청된 I/O 제어 작업에 대한 정보입니다. 데이터를 반환하는 성공적인 호출의 경우 OutputBuffer 매개 변수가 가리키는 버퍼에 기록된 바이트 수가 IO_STATUS_BLOCK 구조의 정보 멤버에 반환됩니다.

설명

이 구조체의 함수를 사용하려면 먼저 DXGK_SPB_INTERFACE 구조체의 크기버전 멤버를 제공합니다. 그런 다음 ServicesType 매개 변수가 DxgkServicesFirmwareTable 값으로 설정된 DxgkCbQueryServices 함수를 호출하고 Interface 매개 변수를 DXGK_SPB_INTERFACE 구조체의 주소(PINTERFACE로 캐스팅)로 설정합니다.

SPB 아키텍처에 대한 자세한 내용은 간단한 주변 장치 버스SPB 주변 장치 드라이버 디자인 가이드**를 참조하세요.

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows 8
지원되는 최소 서버 Windows Server 2012
머리글 dispmprt.h(Dispmprt.h 포함)