Linux VDI 클라이언트 SDK 사양에서 SQL ServerSQL Server on Linux VDI client SDK Specification

이 항목 적용 대상: 예(Linux에만 해당) SQL Server없습니다Azure SQL 데이터베이스없습니다Azure SQL 데이터 웨어하우스없는병렬 데이터 웨어하우스THIS TOPIC APPLIES TO: yesSQL Server (Linux only)noAzure SQL DatabasenoAzure SQL Data WarehousenoParallel Data Warehouse

이 문서에서는 Linux 가상 장치 인터페이스 (VDI) 클라이언트 SDK에는 SQL Server에서 제공 하는 인터페이스에 설명 합니다.This document covers the interfaces provided by the SQL Server on Linux virtual device interface (VDI) client SDK. 독립 소프트웨어 공급 업체 (Isv) SQL Server의 제품에 통합 하는 가상 백업 장치 API 응용 프로그래밍 인터페이스 ()를 사용할 수 있습니다.Independent software vendors (ISVs) can use the Virtual Backup Device Application Programming Interface (API) to integrate SQL Server into their products. 일반적으로 Linux에서 VDI 유사 하 게 작동 VDI Windows에서 다음과 같이 변경 된:In general, VDI on Linux behaves similarly to VDI on Windows with the following changes:

  • Windows 공유 메모리 POSIX 공유 메모리 됩니다.Windows Shared Memory becomes POSIX shared memory.
  • Windows 세마포 POSIX 세마포 수 있습니다.Windows Semaphores become POSIX semaphores.
  • HRESULT 및 DWORD과 같은 Windows 종류는 정수 형식으로 변경 됩니다.Windows types like HRESULT and DWORD are changed to integer equivalents.
  • COM 인터페이스는 제거 되 고 c + + 클래스의 쌍으로 바뀝니다.The COM interfaces are removed and replaced with a pair of C++ Classes.
  • Linux에서 SQL Server 인스턴스 이름에 대 한 참조를 제거 명명 된 인스턴스를 지원 하지 않습니다.SQL Server on Linux does not support named instances so references to instance name have been removed.
  • 공유 라이브러리 libsqlvdi.so /opt/mssql/lib/libsqlvdi.so에 설치에서 구현 됩니다.The shared library is implemented in libsqlvdi.so installed at /opt/mssql/lib/libsqlvdi.so

이 문서는 파일의 부록 vbackup.chm Windows VDI 사양에 자세히 설명 하는 합니다.This document is an addendum to vbackup.chm that details the Windows VDI Specification. 다운로드는 Windows VDI 사양합니다.Download the Windows VDI Specification.

또한에 샘플 VDI 백업 솔루션을 검토는 SQL Server 샘플 GitHub 리포지토리합니다.Also review the sample VDI backup solution on the SQL Server Samples GitHub repository.

사용자 권한 설정User Permissions Setup

Linux에서 POSIX 기본 형식 및 해당 기본 그룹을 만드는 사용자가 소유 합니다.On Linux, POSIX primitives are owned by the user creating them and their default group. SQL Server에서 만든 개체에 대 한 이러한 기본적으로 소유할 mssql 사용자 및 mssql 그룹입니다.For objects created by SQL Server, these will by default be owned by the mssql user and the mssql group. SQL Server와 VDI 클라이언트 간 공유를 허용 하려면 다음 두 가지 방법 중 하나는 것이 좋습니다.To allow sharing between SQL Server and the VDI client, one of the following two methods are recommended:

  1. Mssql 사용자로 VDI 클라이언트를 실행 합니다.Run the VDI Client as the mssql user

    Mssql 사용자로 전환 하려면 다음 명령을 실행 합니다.Execute the following command to switch to mssql user:

    sudo su mssql
    
  2. Mssql 사용자 vdiuser의 그룹과 vdiuser mssql 그룹에 추가 합니다.Add the mssql user to the vdiuser’s group, and the vdiuser to the mssql group.

    다음 명령을 실행 합니다.Execute the following commands:

    sudo useradd vdiuser
    sudo usermod -a -G mssql vdiuser
    sudo usermod -a -G vdiuser mssql
    

    SQL Server 및 vdiuser에 대 한 새 그룹을 선택 하도록 서버를 다시 시작Restart the server to pick up new groups for SQL Server and vdiuser

클라이언트 기능Client Functions

이 장에서 설명의 각 클라이언트 함수를 포함합니다.This chapter contains descriptions of each of the client functions. 설명에는 다음 정보가 포함 됩니다.The descriptions include the following information:

  • 함수 용도Function purpose
  • 함수 구문Function syntax
  • 매개 변수 목록Parameter list
  • 반환 값Return values
  • 주의Remarks

ClientVirtualDeviceSet::CreateClientVirtualDeviceSet::Create

용도 이 함수는 가상 장치 집합을 만듭니다.Purpose This function creates the virtual device set.

구문Syntax

int ClientVirtualDeviceSet::Create (
char *   name,       // name for the set
VDConfig   * cfg     // configuration for the set
);
매개 변수Parameters 인수Argument 설명Explanation
namename 가상 장치 집합을 식별 합니다.This identifies the virtual device set. CreateFileMapping()에서 사용 되는 이름에 대 한 규칙을 따라야 합니다.The rules for names used by CreateFileMapping() must be followed. 백슬래시를 제외한 모든 문자 () 사용할 수 있습니다.Any character except backslash () may be used. 문자 문자열입니다.This is a character string. 사용자의 제품 또는 회사 이름 및 데이터베이스 이름을 사용 하 여 문자열을 접두사로 사용 하는 것이 좋습니다.Prefixing the string with the user’s product or company name and database name is recommended.
cfgcfg 이것이 가상 장치 집합에 대 한 구성입니다.This is the configuration for the virtual device set. 자세한 내용은이 문서의 뒷부분에 나오는 "구성"을 참조 합니다.For more information, see “Configuration” later in this document.
반환 값Return Values 인수Argument 설명Explanation
NOERRORNOERROR 함수가 성공했습니다.The function succeeded.
VD_E_NOTSUPPORTEDVD_E_NOTSUPPORTED 구성에서 필드의 하나 이상이 잘못 되었습니다. 또는 그렇지 않은 경우 지원 되지 않습니다.One or more of the fields in the configuration was invalid or otherwise unsupported.
VD_E_PROTOCOLVD_E_PROTOCOL 가상 장치 집합이 이미 있습니다.The virtual device set already exists.

주의 The Create 메서드는 백업 또는 복원 작업 당 한 번만 호출 해야 합니다.Remarks The Create method should be called only once per BACKUP or RESTORE operation. Close 메서드를 호출한 후 클라이언트를 다른 가상 장치 집합을 만들려면 인터페이스 다시 사용할 수 있습니다.After invoking the Close method, the client can reuse the interface to create another virtual device set.

ClientVirtualDeviceSet::GetConfigurationClientVirtualDeviceSet::GetConfiguration

용도 이 함수는 가상 장치 집합을 구성 하는 서버를 기다리는 데 사용 합니다.Purpose This function is used to wait for the server to configure the virtual device set. 구문Syntax

int ClientVirtualDeviceSet::GetConfiguration (
time_t       timeout,    // in milliseconds
VDConfig *       cfg // selected configuration
);
매개 변수Parameters 인수Argument 설명Explanation
제한 시간timeout 제한 시간 (밀리초)입니다.This is the time-out in milliseconds. 제한 시간을 방지 하기 위해 무한 또는 모든 음의 정수를 사용 합니다.Use INFINITE or any negative integer to prevent time-out.
cfgcfg 실행이 완료 되는 서버에서 선택한 구성에 포함 되어이 있습니다.Upon successful execution, this contains the configuration selected by the server. 자세한 내용은이 문서의 뒷부분에 나오는 "구성"을 참조 합니다.For more information, see “Configuration” later in this document.
반환 값Return Values 인수Argument 설명Explanation
NOERRORNOERROR 구성을 반환 되었습니다.The configuration was returned.
VD_E_ABORTVD_E_ABORT SignalAbort 호출 되었습니다.SignalAbort was invoked.
VD_E_TIMEOUTVD_E_TIMEOUT 함수 제한 시간이 초과 되었습니다.The function timed out.

주의 경고 상태에이 함수를 차단 합니다.Remarks This function blocks in an Alertable state. 성공적으로 호출 후 가상 장치 집합의 장치를 열 수 있습니다.After successful invocation, the devices in the virtual device set may be opened.

ClientVirtualDeviceSet::OpenDeviceClientVirtualDeviceSet::OpenDevice

용도 이 함수는 가상 장치 집합의 장치 중 하나를 엽니다.Purpose This function opens one of the devices in the virtual device set. 구문Syntax

int ClientVirtualDeviceSet::OpenDevice (
char *           name,       // name for the set
ClientVirtualDevice **       ppVirtualDevice // returns interface to device
);
매개 변수Parameters 인수Argument 설명Explanation
namename 가상 장치 집합을 식별 합니다.This identifies the virtual device set.
ppVirtualDeviceppVirtualDevice 함수가 성공 하면 가상 장치에 대 한 포인터를 반환 됩니다.When the function succeeds, a pointer to the virtual device is returned. 이 장치는 GetCommand 및 CompleteCommand에 사용 됩니다.This device is used for GetCommand and CompleteCommand.
반환 값Return Values 인수Argument 설명Explanation
NOERRORNOERROR 함수가 성공했습니다.The function succeeded.
VD_E_ABORTVD_E_ABORT 중단을 요청 합니다.Abort was requested.
VD_E_OPENVD_E_OPEN 모든 장치에 열려 있습니다.All devices are open.
VD_E_PROTOCOLVD_E_PROTOCOL 집합 초기화 상태에 없거나이 특정 장치 이미 열려 있습니다.The set is not in the initializing state or this particular device is already open.
VD_E_INVALIDVD_E_INVALID 장치 이름이 잘못 되었습니다.The device name is invalid. 이기는 집합을 구성 하는 특성 이름 중 하나입니다.It is not one of the names known to comprise the set.

주의 VD_E_OPEN 문제 없이 반환 될 수 있습니다.Remarks VD_E_OPEN may be returned without problem. 클라이언트는이 코드에 반환 될 때까지 OpenDevice 루프를 사용 하 여 호출할 수 있습니다.The client may call OpenDevice by means of a loop until this code is returned. 하나 이상의 장치가 구성 된 경우, 예를 들어 n 장치, 가상 장치 집합이 반환 됩니다 n 고유 장치 인터페이스입니다.If more than one device is configured, for example n devices, the virtual device set will return n unique device interfaces.

GetConfiguration 장치를 열 수까지 기다렸다가 함수를 사용할 수 있습니다.The GetConfiguration function can be used to wait until the devices can be opened. 이 함수 이어지지 않는 경우는 ppVirtualDevice 통해 null 값이 반환 됩니다.If this function does not succeed, then a null value is returned through the ppVirtualDevice.

ClientVirtualDevice::GetCommandClientVirtualDevice::GetCommand

용도 이 함수는 다음을 가져오는 데 명령은 장치에 큐에 대기 합니다.Purpose This function is used to obtain the next command queued to a device. 요청 하는 경우이 함수는 다음 명령에 대 한 대기 합니다.When requested, this function waits for the next command.

구문Syntax

int ClientVirtualDevice::GetCommand (
time_t       timeout,    // time-out in milliseconds
VDC_Command**    ppCmd   // returns the next command
);
매개 변수Parameters 인수Argument 설명Explanation
제한 시간timeout 밀리초에서 대기 하는 시간입니다.This is the time to wait, in milliseconds. INFINTE를 사용 하 여 무기한 대기를 나타냅니다.Use INFINTE to wait indefinitely. 명령에 대 한 폴링 0을 사용 합니다.Use 0 to poll for a command. 명령이 현재 사용 가능한 경우 VD_E_TIMEOUT 반환 됩니다.VD_E_TIMEOUT is returned if no command is currently available . 제한 시간이 발생 하는 경우 클라이언트는 다음 동작을 결정 합니다.If the time-out occurs, the client decides the next action.
TimeoutTimeout 밀리초에서 대기 하는 시간입니다.This is the time to wait, in milliseconds. INFINTE 또는 음수 값을 사용 하 여 무기한 대기를 나타냅니다.Use INFINTE or a negative value to wait indefinitely. 명령에 대 한 폴링 0을 사용 합니다.Use 0 to poll for a command. VD_E_TIMEOUT 제한 시간이 만료 되기 전에 명령이 없습니다. 사용할 수 있는 경우 반환 됩니다.VD_E_TIMEOUT is returned if no command is available before the timeout expires. 제한 시간이 발생 하는 경우 클라이언트는 다음 동작을 결정 합니다.If the timeout occurs, the client decides the next action.
ppCmdppCmd 명령을 성공적으로 반환 되 면 매개 변수는 명령이 실행의 주소를 반환 합니다.When a command is successfully returned, the parameter returns the address of a command to execute. 반환 되는 메모리는 읽기 전용입니다.The memory returned is read-only. 명령이 완료 되 면이 포인터가 CompleteCommand 루틴에 전달 됩니다.When the command is completed, this pointer is passed to the CompleteCommand routine. 각 명령에 대 한 내용은이 문서의 뒷부분에 나오는 "Commands"를 참조 하십시오.For details about each command, see “Commands” later in this document.
반환 값Return Values 인수Argument 설명Explanation
NOERRORNOERROR 명령을 인출 되었습니다.A command was fetched.
했습니다VD_E_CLOSE 장치가 서버에 의해 종료 되었습니다.The device has been closed by the server.
VD_E_TIMEOUTVD_E_TIMEOUT 명령이 없습니다. 제공 되었으며 제한 시간이 만료 되었습니다.No command was available and the time-out expired.
VD_E_ABORTVD_E_ABORT 클라이언트나 서버 어느 한쪽을 종료할는 SignalAbort 사용 했습니다.Either the client or the server has used the SignalAbort to force a shutdown.

주의 했습니다 때 반환 되 고, SQL Server 장치를 닫았습니다.Remarks When VD_E_CLOSE is returned, SQL Server has closed the device. 이 정상적인 종료의 일부입니다.This is part of the normal shutdown. 모든 장치를 닫은 후 클라이언트를 가상 장치 집합을 닫으려면 ClientVirtualDeviceSet::Close를 호출 합니다.After all devices have been closed, the client invokes ClientVirtualDeviceSet::Close to close the virtual device set. 이 루틴에 명령에 대해 기다려야 차단 해야 합니다. 스레드는 경고 조건에 남아 있습니다.When this routine must block to wait for a command, the thread is left in an Alertable condition.

ClientVirtualDevice::CompleteCommandClientVirtualDevice::CompleteCommand

용도 이 함수는 명령이 완료 된 SQL Server를 알리는 데 사용 됩니다.Purpose This function is used to notify SQL Server that a command has finished. 명령에 대 한 적절 한 완료 정보를 반환 합니다.Completion information appropriate for the command should be returned. 자세한 내용은이 문서의 뒷부분에 나오는 "Commands"를 참조 하십시오.For more information, see “Commands” later in this document.

구문Syntax

int ClientVirtualDevice::CompleteCommand (
VDC_Command pCmd,        // the command
int  completionCode,     // completion code
unsigned long    bytesTransferred,   // bytes transferred
int64_t  position        // current position
);
매개 변수Parameters 인수Argument 설명Explanation
pCmdpCmd ClientVirtualDevice::GetCommand에서 이전에 반환 되는 명령의 주소입니다.This is the address of a command previously returned from ClientVirtualDevice::GetCommand.
completionCodecompletionCode 완료 상태를 나타내는 상태 코드입니다.This is a status code that indicates the completion status. 이 매개 변수는 모든 명령에 대 한 반환 되어야 합니다.This parameter must be returned for all commands. 반환 되는 코드는 수행 중인 명령에 적합 해야 합니다.The code returned should be appropriate to the command being performed. ERROR_SUCCESS 모든 경우에에서 성공적으로 실행 된 명령을 나타내는 데 사용 됩니다.ERROR_SUCCESS is used in all cases to denote a successfully executed command. 참조 파일을 가능한 코드의 전체 목록은 vdierror.h 합니다.For the complete list of possible codes, see the file, vdierror.h. 각 명령에 대 한 일반적인 상태 코드 목록은이 문서의 뒷부분에 나오는 "명령"에 나타납니다.A list of typical status codes for each command appears in “Commands” later in this document.
bytesTransferredbytesTransferred 성공적으로 전송 된 바이트 수입니다.This is the number of successfully transferred bytes. 데이터 전송 명령을 읽기 및 쓰기에 대해서만 반환 됩니다.This is returned only for data transfer commands Read and Write.
위치position 이것이 GetPosition 명령에 대 한 응답입니다.This is a response to the GetPosition command only.
반환 값Return Values 인수Argument 설명Explanation
NOERRORNOERROR 완료 올바르게 표시 합니다.The completion was correctly noted.
VD_E_INVALIDVD_E_INVALID pCmd 활성 명령이 없습니다.pCmd was not an active command.
VD_E_ABORTVD_E_ABORT 중단 신호를 받은 합니다.Abort was signaled.
VD_E_PROTOCOLVD_E_PROTOCOL 장치가 열려 있지 않습니다.The device is not open.

주의 없음Remarks None

ClientVirtualDeviceSet::SignalAbortClientVirtualDeviceSet::SignalAbort

용도 경우 비정상적인 종료 하 고 수행 되도록 신호를 보내이 함수는 사용 합니다.Purpose This function is used to signal that an abnormal termination should occur.

구문Syntax

int ClientVirtualDeviceSet::SignalAbort ();
매개 변수Parameters 인수Argument 설명Explanation
없음None 해당 사항 없음Not applicable
반환 값Return Values 인수Argument 설명Explanation
NOERRORNOERROR 중단 알림이 성공적으로 게시 되었습니다.The Abort notification was successfully posted.

주의 언제 든 지, 클라이언트 백업 또는 복원 작업을 중단 하도록 선택할 수 있습니다.Remarks At any time, the client may choose to abort the BACKUP or RESTORE operation. 이 루틴 모든 작업이 중단 되도록 신호를 보냅니다.This routine signals that all operations should cease. 전체 가상 장치 집합의 상태는 비정상적으로 종료 된 상태로 설정 됩니다.The state of the overall virtual device set enters an Abnormally Terminated state. 모든 장치에 더 추가 명령이 반환 됩니다.No further commands are returned on any devices. 완료 되지 않은 모든 명령은 자동으로 완료 되 면 ERROR_OPERATION_ABORTED 완료 코드로 반환 합니다.All uncompleted commands are automatically completed, returning ERROR_OPERATION_ABORTED as a completion code. 클라이언트는 클라이언트에 제공 하는 버퍼의 처리 중인 사용 되는 모든 모음이 안전 하 게 끝난 다음 ClientVirtualDeviceSet::Close를 호출 해야 합니다.The client should call ClientVirtualDeviceSet::Close after it has safely terminated any outstanding use of buffers provided to the client. 자세한 내용은이 문서의 앞부분에서 "비정상적으로 종료"를 참조 하십시오.For more information, see “Abnormal Termination” earlier in this document.

ClientVirtualDeviceSet::CloseClientVirtualDeviceSet::Close

용도 이 함수 ClientVirtualDeviceSet::Create에서 만든 가상 장치 집합을 닫습니다.Purpose This function closes the virtual device set created by ClientVirtualDeviceSet::Create. 가상 장치 세트와 연결 된 모든 리소스의 릴리스에서 발생 합니다.It results in the release of all resources associated with the virtual device set.

구문Syntax

int ClientVirtualDeviceSet::Close ();
매개 변수Parameters 인수Argument 설명Explanation
없음None 해당 사항 없음Not applicable
반환 값Return Values 인수Argument 설명Explanation
NOERRORNOERROR 가상 장치 집합이 성공적으로 닫혔을 때 반환 됩니다.This is returned when the virtual device set was successfully closed.
VD_E_PROTOCOLVD_E_PROTOCOL 가상 장치 집합 열기 없기 때문에 아무 작업도 수행 합니다.No action was taken because the virtual device set was not open.
VD_E_OPENVD_E_OPEN 장치 된 아직 열려 있습니다.Devices were still open.

주의 Close의 호출에는 가상 장치 집합에서 사용 하는 모든 리소스를 해제 해야 클라이언트 선언입니다.Remarks The invocation of Close is a client declaration that all resources used by the virtual device set should be released. 클라이언트는 데이터 버퍼 및 가상 장치를 포함 하는 모든 작업은 Close를 호출 하기 전에 종료 되도록 확인 해야 합니다.The client must ensure that all activity involving data buffers and virtual devices is terminated before invoking Close. 닫기를 OpenDevice에서 반환 된 모든 가상 장치 인터페이스를 무효화 합니다.All virtual device interfaces returned by OpenDevice are invalidated by Close. 클라이언트 닫기 호출에서 반환 된 후 가상 장치 집합 인터페이스에 만들기 호출을 실행할 수 있습니다.The client is permitted to issue a Create call on the virtual device set interface after the Close call is returned. 이러한 호출을 후속 백업 또는 복원 작업에 대해 설정 하는 새 가상 장치를 만듭니다.Such a call would create a new virtual device set for a subsequent BACKUP or RESTORE operation. Close는 하나 이상의 가상 장치 계속 열려 있는 경우에 호출 되 면 VD_E_OPEN 반환 됩니다.If Close is called when one or more virtual devices are still open, VD_E_OPEN is returned. 이 경우 SignalAbort 내부적으로 트리거된 가능한 경우 올바르게 종료 하 합니다.In this case, SignalAbort is internally triggered, to ensure a proper shutdown if possible. VDI 리소스가 해제 됩니다.VDI resources are released. ClientVirtualDeviceSet::Close 호출 하기 전에 각 장치에서 했습니다 표시에 대 한 대기 해야 합니다.The client should wait for a VD_E_CLOSE indication on each device before invoking ClientVirtualDeviceSet::Close. 한다는 사실을 알고 있으면 클라이언트는 가상 장치 집합 이미 비정상적으로 종료 된 상태에 있는 경우, GetCommand에서 했습니다 표시 기대 하지 하 고 공유 버퍼에서 작업이 종료 되는 즉시 ClientVirtualDeviceSet::Close을 호출할 수도 있습니다.If the client knows that the virtual device set is already in an Abnormally Terminated state, then it should not expect a VD_E_CLOSE indication from GetCommand, and may invoke ClientVirtualDeviceSet::Close as soon as activity on the shared buffers is terminated. 자세한 내용은이 문서의 앞부분에서 "비정상적으로 종료"를 참조 하십시오.For more information, see “Abnormal Termination” earlier in this document.

ClientVirtualDeviceSet::OpenInSecondaryClientVirtualDeviceSet::OpenInSecondary

용도 이 기능은 보조 클라이언트에서에서 설정할 가상 장치를 엽니다.Purpose This function opens the virtual device set in a secondary client. 기본 클라이언트 해야 이미 사용 했습니다 만들기 및 GetConfiguration 가상 장치 집합을 설정 하려면.The primary client must have already used Create and GetConfiguration to set up the virtual device set.

구문Syntax

int ClientVirtualDeviceSet::OpenInSecondary (
char *   setName         // name of the set
);
매개 변수Parameters 인수Argument 설명Explanation
setNamesetName 집합을 식별 합니다.This identifies the set. 이 이름은 대 소문자를 구분 하며 ClientVirtualDeviceSet::Create 호출 때 기본 클라이언트에서 사용 하는 이름과 일치 해야 합니다.This name is case-sensitive and must match the name used by the primary client when it invoked ClientVirtualDeviceSet::Create.
반환 값Return Values 인수Argument 설명Explanation
NOERRORNOERROR 함수가 성공했습니다.The function succeeded.
VD_E_PROTOCOLVD_E_PROTOCOL 가상 장치 집합 생성 되지 않은,이 클라이언트 또는 가상 장치에서 이미 열려 집합이 보조 클라이언트로부터 열기 요청을 수락할 준비가 되었습니다.The virtual device set has not been created, has already been opened on this client, or the virtual device set is not ready to accept open requests from secondary clients.
VD_E_ABORTVD_E_ABORT 작업이 중단 되 고 됩니다.The operation is being aborted.

주의 다중 프로세스 모델을 사용할 때 기본 클라이언트는 보조 클라이언트의 정상 및 비정상 종료를 담당 합니다.Remarks When using a multiple process model, the primary client is responsible for detecting normal and abnormal termination of secondary clients.

ClientVirtualDeviceSet::GetBufferHandleClientVirtualDeviceSet::GetBufferHandle

용도 일부 응용 프로그램에는 둘 이상의 프로세스가 ClientVirtualDevice::GetCommand에서 반환 된 버퍼에서 작동 하도록 해야 할 수 있습니다.Purpose Some applications may require more than one process to operate on the buffers returned by ClientVirtualDevice::GetCommand. 이러한 경우 명령을 받는 프로세스는 버퍼를 식별 하는 프로세스 독립 핸들을 얻기 위해 GetBufferHandle에서 사용할 수 있습니다.In such cases, the process that receives the command can use GetBufferHandle to obtain a process independent handle that identifies the buffer. 이 핸들도 동일한 가상 장치 설정 열려 있는 모든 다른 프로세스에 게 알려 줄 수 수 있습니다.This handle can then be communicated to any other process that also has the same Virtual Device Set open. 그런 다음 해당 프로세스는 버퍼의 주소를 가져올 ClientVirtualDeviceSet::MapBufferHandle를 사용 합니다.That process would then use ClientVirtualDeviceSet::MapBufferHandle to obtain the address of the buffer. 주소는 각 프로세스에 버퍼 다른 주소에 매핑 수 때문에 해당 파트너에 보다 다른 주소를 수 있습니다.The address will likely be a different address than in its partner because each process may be mapping buffers at different addresses.

구문Syntax

int ClientVirtualDeviceSet::GetBufferHandle (
uint8_t*     pBuffer,        // in: buffer address
unsigned int*        pBufferHandle   // out: buffer handle
);
매개 변수Parameters 인수Argument 설명Explanation
pBufferpBuffer 읽기 또는 쓰기 명령에서 가져온 버퍼의 주소입니다.This is the address of a buffer obtained from a Read or Write command.
BufferHandleBufferHandle 버퍼에 대 한 고유 식별자가 반환 됩니다.A unique identifier for the buffer is returned.
반환 값Return Values 인수Argument 설명Explanation
NOERRORNOERROR 함수가 성공했습니다.The function succeeded.
VD_E_PROTOCOLVD_E_PROTOCOL 가상 장치 집합이 현재 열려 있지 않습니다.The virtual device set is not currently open.
VD_E_INVALIDVD_E_INVALID PBuffer의 유효한 주소가 아닙니다.The pBuffer is not a valid address.

주의 GetBufferHandle 함수를 호출 하는 프로세스를 ClientVirtualDevice::CompleteCommand 데이터 전송이 완료 될 때 호출 됩니다.Remarks The process that invokes the GetBufferHandle function is responsible for invoking ClientVirtualDevice::CompleteCommand when the data transfer is complete.

ClientVirtualDeviceSet::MapBufferHandleClientVirtualDeviceSet::MapBufferHandle

용도 이 함수는 다른 프로세스에서 얻은 버퍼 핸들에서 유효한 버퍼 주소를 사용 합니다.Purpose This function is used to obtain a valid buffer address from a buffer handle obtained from some other process.

구문Syntax

int ClientVirtualDeviceSet::MapBufferHandle (
i        nt  dwBuffer,   // in: buffer handle
uint8_t**    ppBuffer        // out: buffer address
);
매개 변수Parameters 인수Argument 설명Explanation
dwBufferdwBuffer ClientVirtualDeviceSet::GetBufferHandle에서 반환 된 핸들입니다.This is the handle returned by ClientVirtualDeviceSet::GetBufferHandle.
ppBufferppBuffer 현재 프로세스에 사용할 버퍼의 주소입니다.This is the address of the buffer that is valid in the current process.
반환 값Return Values 인수Argument 설명Explanation
NOERRORNOERROR 함수가 성공했습니다.The function succeeded.
VD_E_PROTOCOLVD_E_PROTOCOL 가상 장치 집합이 현재 열려 있지 않습니다.The virtual device set is not currently open.
VD_E_INVALIDVD_E_INVALID ppBuffer 잘못 된 핸들입니다.The ppBuffer is an invalid handle.

주의 핸들을 제대로 통신 하도록 주의 해야 합니다.Remarks Care must be taken to communicate the handles correctly. 핸들은 단일 가상 장치 집합에 로컬입니다.Handles are local to a single virtual device set. 핸들을 공유 하는 파트너 프로세스 핸들을 사용 하는 버퍼를 원래 얻어에서 설정할 가상 장치의 범위 내 에서만 해당 버퍼를 확인 해야 합니다.The partner processes sharing a handle must ensure that buffer handles are used only within the scope of the virtual device set from which the buffer was originally obtained.