SQL Server nel client Linux VDI specifica SDKSQL Server on Linux VDI client SDK Specification

Questo documento descrive le interfacce fornite da SQL Server in Linux virtual interface (VDI) client dispositivo SDK.This document covers the interfaces provided by the SQL Server on Linux virtual device interface (VDI) client SDK. Fornitori di software indipendenti (ISV) è possono utilizzare il Virtual Backup Device interfaccia API (Application Programming) per integrare i prodotti di SQL Server.Independent software vendors (ISVs) can use the Virtual Backup Device Application Programming Interface (API) to integrate SQL Server into their products. In generale, un'infrastruttura VDI in Linux è simile alla VDI in Windows con le modifiche seguenti:In general, VDI on Linux behaves similarly to VDI on Windows with the following changes:

  • Memoria condivisa di Windows diventa memoria condivisa POSIX.Windows Shared Memory becomes POSIX shared memory.
  • I semafori Windows diventano i semafori POSIX.Windows Semaphores become POSIX semaphores.
  • Tipi di Windows come HRESULT e DWORD vengono modificati agli equivalenti di integer.Windows types like HRESULT and DWORD are changed to integer equivalents.
  • Le interfacce COM vengono rimosse e sostituite con una coppia di classi C++.The COM interfaces are removed and replaced with a pair of C++ Classes.
  • SQL Server in Linux non supporta le istanze denominate in modo sono stati rimossi i riferimenti al nome di istanza.SQL Server on Linux does not support named instances so references to instance name have been removed.
  • La libreria condivisa viene implementata in libsqlvdi.so installato in /opt/mssql/lib/libsqlvdi.soThe shared library is implemented in libsqlvdi.so installed at /opt/mssql/lib/libsqlvdi.so

Questo documento è un supplemento a vbackup.chm che illustra la specifica di un'infrastruttura VDI di Windows.This document is an addendum to vbackup.chm that details the Windows VDI Specification. Scaricare il specifica VDI Windows.Download the Windows VDI Specification.

Esaminare inoltre la soluzione di backup VDI di esempio nella repository GitHub degli esempi di SQL Server.Also review the sample VDI backup solution on the SQL Server Samples GitHub repository.

Impostazione delle autorizzazioni utenteUser Permissions Setup

In Linux, primitive POSIX sono proprietà dell'utente la creazione di loro e il gruppo predefinito.On Linux, POSIX primitives are owned by the user creating them and their default group. Per gli oggetti creati da SQL Server, questi saranno per impostazione predefinita di proprietà dall'utente mssql e il gruppo mssql.For objects created by SQL Server, these will by default be owned by the mssql user and the mssql group. Per consentire la condivisione tra SQL Server e il client VDI, uno dei due metodi seguenti sono consigliate:To allow sharing between SQL Server and the VDI client, one of the following two methods are recommended:

  1. Eseguire il Client VDI come utente mssqlRun the VDI Client as the mssql user

    Eseguire il comando seguente per passare all'utente mssql:Execute the following command to switch to mssql user:

    sudo su mssql
    
  2. Aggiungere l'utente mssql al gruppo del vdiuser e il vdiuser al gruppo mssql.Add the mssql user to the vdiuser’s group, and the vdiuser to the mssql group.

    Eseguire i comandi seguenti:Execute the following commands:

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

    Riavviare il server di rilevare i nuovi gruppi per SQL Server e vdiuserRestart the server to pick up new groups for SQL Server and vdiuser

Funzioni clientClient Functions

In questo capitolo contiene le descrizioni di tutte le funzioni di client.This chapter contains descriptions of each of the client functions. Le descrizioni sono le seguenti informazioni:The descriptions include the following information:

  • Scopo della funzioneFunction purpose
  • Sintassi della funzioneFunction syntax
  • Elenco di parametriParameter list
  • Valori restituitiReturn values
  • OsservazioniRemarks

ClientVirtualDeviceSet::CreateClientVirtualDeviceSet::Create

Scopo questa funzione crea il set di dispositivo virtuale.Purpose This function creates the virtual device set.

SintassiSyntax

int ClientVirtualDeviceSet::Create (
char *   name,       // name for the set
VDConfig   * cfg     // configuration for the set
);
ParametriParameters ArgomentoArgument SpiegazioneExplanation
namename Identifica il set di dispositivo virtuale.This identifies the virtual device set. Le regole per i nomi utilizzati dai CreateFileMapping() devono essere seguite.The rules for names used by CreateFileMapping() must be followed. Qualsiasi carattere tranne una barra rovesciata () possono essere utilizzate.Any character except backslash () may be used. Si tratta di una stringa di caratteri.This is a character string. È consigliabile apponendo il prefisso della stringa con nome di prodotto o la società e del database dell'utente.Prefixing the string with the user’s product or company name and database name is recommended.
Guard flusso di controllocfg Questa è la configurazione per il set di dispositivo virtuale.This is the configuration for the virtual device set. Per ulteriori informazioni, vedere "Configurazione" più avanti in questo documento.For more information, see “Configuration” later in this document.
Valori restituitiReturn Values ArgomentoArgument SpiegazioneExplanation
NOERRORNOERROR Funzione completata.The function succeeded.
VD_E_NOTSUPPORTEDVD_E_NOTSUPPORTED Uno o più dei campi nella configurazione non è valido o non è supportato in caso contrario.One or more of the fields in the configuration was invalid or otherwise unsupported.
VD_E_PROTOCOLVD_E_PROTOCOL Il dispositivo virtuale impostato già esiste.The virtual device set already exists.

La sezione Osservazioni crea il metodo deve essere chiamato una sola volta per ogni operazione di BACKUP o ripristino.Remarks The Create method should be called only once per BACKUP or RESTORE operation. Dopo la chiamata di metodo di chiusura, il client può riutilizzare l'interfaccia per creare un altro set di dispositivo virtuale.After invoking the Close method, the client can reuse the interface to create another virtual device set.

ClientVirtualDeviceSet::GetConfigurationClientVirtualDeviceSet::GetConfiguration

Scopo questa funzione viene utilizzata per attendere che il server configurare il set di dispositivo virtuale.Purpose This function is used to wait for the server to configure the virtual device set. SintassiSyntax

int ClientVirtualDeviceSet::GetConfiguration (
time_t       timeout,    // in milliseconds
VDConfig *       cfg // selected configuration
);
ParametriParameters ArgomentoArgument SpiegazioneExplanation
timeouttimeout Questo è il timeout in millisecondi.This is the time-out in milliseconds. Utilizzare INFINITE o qualsiasi numero intero negativo per impedire i timeout.Use INFINITE or any negative integer to prevent time-out.
Guard flusso di controllocfg Al termine dell'esecuzione ha esito positivo, contiene la configurazione selezionata dal server.Upon successful execution, this contains the configuration selected by the server. Per ulteriori informazioni, vedere "Configurazione" più avanti in questo documento.For more information, see “Configuration” later in this document.
Valori restituitiReturn Values ArgomentoArgument SpiegazioneExplanation
NOERRORNOERROR La configurazione è stata restituita.The configuration was returned.
VD_E_ABORTVD_E_ABORT SignalAbort è stato richiamato.SignalAbort was invoked.
VD_E_TIMEOUTVD_E_TIMEOUT La funzione di timeout.The function timed out.

La sezione Osservazioni questa funzione blocca in uno stato di avviso.Remarks This function blocks in an Alertable state. Dopo la chiamata ha esito positivo, i dispositivi nel set di dispositivo virtuale possono essere aperta.After successful invocation, the devices in the virtual device set may be opened.

ClientVirtualDeviceSet::OpenDeviceClientVirtualDeviceSet::OpenDevice

Scopo questa funzione consente di aprire uno dei dispositivi nel set di dispositivo virtuale.Purpose This function opens one of the devices in the virtual device set. SintassiSyntax

int ClientVirtualDeviceSet::OpenDevice (
char *           name,       // name for the set
ClientVirtualDevice **       ppVirtualDevice // returns interface to device
);
ParametriParameters ArgomentoArgument SpiegazioneExplanation
namename Identifica il set di dispositivo virtuale.This identifies the virtual device set.
ppVirtualDeviceppVirtualDevice Quando la funzione ha esito positivo, viene restituito un puntatore al dispositivo virtuale.When the function succeeds, a pointer to the virtual device is returned. Il dispositivo viene utilizzato per GetCommand e CompleteCommand.This device is used for GetCommand and CompleteCommand.
Valori restituitiReturn Values ArgomentoArgument SpiegazioneExplanation
NOERRORNOERROR Funzione completata.The function succeeded.
VD_E_ABORTVD_E_ABORT È stato richiesto Abort.Abort was requested.
VD_E_OPENVD_E_OPEN Tutti i dispositivi sono aperti.All devices are open.
VD_E_PROTOCOLVD_E_PROTOCOL Il set non è in stato di inizializzazione o il dispositivo è già aperto.The set is not in the initializing state or this particular device is already open.
VD_E_INVALIDVD_E_INVALID Il nome del dispositivo non è valido.The device name is invalid. Non è uno dei nomi noti che costituiscono il set.It is not one of the names known to comprise the set.

La sezione Osservazioni VD_E_OPEN può essere restituito senza problemi.Remarks VD_E_OPEN may be returned without problem. Il client può chiamare OpenDevice mezzo di un ciclo finché non viene restituito il codice.The client may call OpenDevice by means of a loop until this code is returned. Se è configurato più di un dispositivo, ad esempio n dispositivi, verrà restituito il set di periferica virtuale n interfacce univoco del dispositivo.If more than one device is configured, for example n devices, the virtual device set will return n unique device interfaces.

Il GetConfiguration funzione può essere usata per attendere fino a quando i dispositivi possono essere aperti.The GetConfiguration function can be used to wait until the devices can be opened. Se questa funzione non riesce, viene restituito un valore null tramite il ppVirtualDevice.If this function does not succeed, then a null value is returned through the ppVirtualDevice.

ClientVirtualDevice::GetCommandClientVirtualDevice::GetCommand

Scopo questa funzione viene utilizzata per ottenere il successivo comando in coda in un dispositivo.Purpose This function is used to obtain the next command queued to a device. Quando richiesto, questa funzione è in attesa per il comando successivo.When requested, this function waits for the next command.

SintassiSyntax

int ClientVirtualDevice::GetCommand (
time_t       timeout,    // time-out in milliseconds
VDC_Command**    ppCmd   // returns the next command
);
ParametriParameters ArgomentoArgument SpiegazioneExplanation
timeouttimeout Questo è il tempo di attesa, espresso in millisecondi.This is the time to wait, in milliseconds. Utilizzare INFINTE per un'attesa indefinita.Use INFINTE to wait indefinitely. Usare 0 per eseguire il polling per un comando.Use 0 to poll for a command. VD_E_TIMEOUT viene restituito se il comando non è attualmente disponibile.VD_E_TIMEOUT is returned if no command is currently available . Se si verifica il timeout, il client stabilisce l'azione successiva.If the time-out occurs, the client decides the next action.
TimeoutTimeout Questo è il tempo di attesa, espresso in millisecondi.This is the time to wait, in milliseconds. Utilizzare INFINTE o un valore negativo per un'attesa indefinita.Use INFINTE or a negative value to wait indefinitely. Usare 0 per eseguire il polling per un comando.Use 0 to poll for a command. VD_E_TIMEOUT viene restituito se non è disponibile prima della scadenza del timeout.VD_E_TIMEOUT is returned if no command is available before the timeout expires. Se si verifica il timeout, il client stabilisce l'azione successiva.If the timeout occurs, the client decides the next action.
ppCmdppCmd Quando un comando è stato restituito correttamente, il parametro restituisce l'indirizzo di un comando da eseguire.When a command is successfully returned, the parameter returns the address of a command to execute. La memoria restituita è di sola lettura.The memory returned is read-only. Quando il comando viene completato, l'indicatore di misura viene passato alla routine CompleteCommand.When the command is completed, this pointer is passed to the CompleteCommand routine. Per informazioni dettagliate su ogni comando, vedere "Comandi" più avanti in questo documento.For details about each command, see “Commands” later in this document.
Valori restituitiReturn Values ArgomentoArgument SpiegazioneExplanation
NOERRORNOERROR È stato recuperato un comando.A command was fetched.
VD_E_CLOSEVD_E_CLOSE Il dispositivo è stato chiuso dal server.The device has been closed by the server.
VD_E_TIMEOUTVD_E_TIMEOUT Comando non è disponibile e il timeout è scaduto.No command was available and the time-out expired.
VD_E_ABORTVD_E_ABORT Il client o il server ha usato il SignalAbort per forzare l'arresto.Either the client or the server has used the SignalAbort to force a shutdown.

La sezione Osservazioni VD_E_CLOSE quando viene restituito, SQL Server ha chiuso il dispositivo.Remarks When VD_E_CLOSE is returned, SQL Server has closed the device. Questo fa parte dell'arresto normale.This is part of the normal shutdown. Dopo la chiusura di tutti i dispositivi, il client richiama ClientVirtualDeviceSet::Close per chiudere il set di dispositivo virtuale.After all devices have been closed, the client invokes ClientVirtualDeviceSet::Close to close the virtual device set. Quando questa routine deve bloccarsi in attesa per un comando, il thread è disponibile in una condizione di avviso.When this routine must block to wait for a command, the thread is left in an Alertable condition.

ClientVirtualDevice::CompleteCommandClientVirtualDevice::CompleteCommand

Scopo questa funzione viene utilizzata per notificare a SQL Server che ha completato un comando.Purpose This function is used to notify SQL Server that a command has finished. Informazioni sul completamento appropriati per il comando deve essere restituiti.Completion information appropriate for the command should be returned. Per ulteriori informazioni, vedere "Comandi" più avanti in questo documento.For more information, see “Commands” later in this document.

SintassiSyntax

int ClientVirtualDevice::CompleteCommand (
VDC_Command pCmd,        // the command
int  completionCode,     // completion code
unsigned long    bytesTransferred,   // bytes transferred
int64_t  position        // current position
);
ParametriParameters ArgomentoArgument SpiegazioneExplanation
pCmdpCmd Questo è l'indirizzo di un comando precedentemente restituito da ClientVirtualDevice::GetCommand.This is the address of a command previously returned from ClientVirtualDevice::GetCommand.
completionCodecompletionCode Si tratta di un codice di stato che indica lo stato di completamento.This is a status code that indicates the completion status. Questo parametro deve essere restituito per tutti i comandi.This parameter must be returned for all commands. Il codice restituito deve essere appropriato per il comando viene eseguito.The code returned should be appropriate to the command being performed. ERROR_SUCCESS è usato in tutti i casi per indicare un comando eseguito correttamente.ERROR_SUCCESS is used in all cases to denote a successfully executed command. Per l'elenco completo dei possibili codici, vedere il file, vdierror.h.For the complete list of possible codes, see the file, vdierror.h. Un elenco di codici di stato per ogni comando viene visualizzata in "Comandi" più avanti in questo documento.A list of typical status codes for each command appears in “Commands” later in this document.
bytesTransferredbytesTransferred Questo è il numero di byte trasferiti.This is the number of successfully transferred bytes. Viene restituito solo per il trasferimento di dati, i comandi di lettura e scrittura.This is returned only for data transfer commands Read and Write.
positionposition Si tratta di una risposta al comando GetPosition solo.This is a response to the GetPosition command only.
Valori restituitiReturn Values ArgomentoArgument SpiegazioneExplanation
NOERRORNOERROR Il completamento corretto è stato indicato.The completion was correctly noted.
VD_E_INVALIDVD_E_INVALID pCmd non è un comando attivo.pCmd was not an active command.
VD_E_ABORTVD_E_ABORT È stata segnalata l'interruzione.Abort was signaled.
VD_E_PROTOCOLVD_E_PROTOCOL Il dispositivo non è aperto.The device is not open.

La sezione Osservazioni nessunoRemarks None

ClientVirtualDeviceSet::SignalAbortClientVirtualDeviceSet::SignalAbort

Scopo questa funzione viene utilizzata per segnalare che non deve verificarsi una terminazione anomala.Purpose This function is used to signal that an abnormal termination should occur.

SintassiSyntax

int ClientVirtualDeviceSet::SignalAbort ();
ParametriParameters ArgomentoArgument SpiegazioneExplanation
NessunoNone Non applicabileNot applicable
Valori restituitiReturn Values ArgomentoArgument SpiegazioneExplanation
NOERRORNOERROR La notifica di interruzione è stata registrata correttamente.The Abort notification was successfully posted.

La sezione Osservazioni in qualsiasi momento, il client può scegliere di interrompere l'operazione di BACKUP o ripristino.Remarks At any time, the client may choose to abort the BACKUP or RESTORE operation. Questa routine segnala che devono smettere tutte le operazioni.This routine signals that all operations should cease. Lo stato del set di dispositivo virtuale complessiva entra in uno stato anomalo.The state of the overall virtual device set enters an Abnormally Terminated state. Viene restituito alcun comando di ulteriore su qualsiasi dispositivo.No further commands are returned on any devices. Tutti i comandi incompiuti vengono completati automaticamente, restituendo 995L come un codice di completamento.All uncompleted commands are automatically completed, returning ERROR_OPERATION_ABORTED as a completion code. Il client deve chiamare ClientVirtualDeviceSet::Close dopo qualsiasi uso di buffer fornito al client in attesa è terminato in modo sicuro.The client should call ClientVirtualDeviceSet::Close after it has safely terminated any outstanding use of buffers provided to the client. Per ulteriori informazioni, vedere "Anomala" più indietro in questo documento.For more information, see “Abnormal Termination” earlier in this document.

ClientVirtualDeviceSet::CloseClientVirtualDeviceSet::Close

Scopo questa funzione chiude il set di dispositivi virtuali creato da ClientVirtualDeviceSet::Create.Purpose This function closes the virtual device set created by ClientVirtualDeviceSet::Create. Comporta il rilascio di tutte le risorse associate al set di dispositivo virtuale.It results in the release of all resources associated with the virtual device set.

SintassiSyntax

int ClientVirtualDeviceSet::Close ();
ParametriParameters ArgomentoArgument SpiegazioneExplanation
NessunoNone Non applicabileNot applicable
Valori restituitiReturn Values ArgomentoArgument SpiegazioneExplanation
NOERRORNOERROR Viene restituito quando il set di dispositivo virtuale è stato chiuso.This is returned when the virtual device set was successfully closed.
VD_E_PROTOCOLVD_E_PROTOCOL È stata eseguita alcuna azione perché il set di dispositivo virtuale non è stato aperto.No action was taken because the virtual device set was not open.
VD_E_OPENVD_E_OPEN I dispositivi sono stati ancora aperti.Devices were still open.

La sezione Osservazioni la chiamata di Close è una dichiarazione di client che devono essere rilasciate tutte le risorse usate dal set di dispositivo virtuale.Remarks The invocation of Close is a client declaration that all resources used by the virtual device set should be released. Il client deve verificare che tutte le attività che coinvolgono i buffer di dati e i dispositivi virtuali vengano terminata prima di richiamare una chiusura.The client must ensure that all activity involving data buffers and virtual devices is terminated before invoking Close. Tutte le interfacce di dispositivo virtuale restituite da OpenDevice Invalidate da chiudere.All virtual device interfaces returned by OpenDevice are invalidated by Close. Il client è autorizzato a eseguire una chiamata di creazione dell'interfaccia di set di dispositivo virtuale dopo la chiamata di chiusura viene restituito.The client is permitted to issue a Create call on the virtual device set interface after the Close call is returned. Una chiamata di questo tipo è necessario creare un nuovo dispositivo virtuale impostato per un'operazione di BACKUP o RESTORE successiva.Such a call would create a new virtual device set for a subsequent BACKUP or RESTORE operation. Se Chiudi viene chiamato quando uno o più dispositivi virtuali sono ancora aperti, viene restituito VD_E_OPEN.If Close is called when one or more virtual devices are still open, VD_E_OPEN is returned. In questo caso, SignalAbort viene attivata internamente, per garantire una corretta chiusura se possibile.In this case, SignalAbort is internally triggered, to ensure a proper shutdown if possible. VDI risorse vengono rilasciate.VDI resources are released. Per un'indicazione VD_E_CLOSE su ogni dispositivo prima di richiamare ClientVirtualDeviceSet::Close di attesa del client.The client should wait for a VD_E_CLOSE indication on each device before invoking ClientVirtualDeviceSet::Close. Se il client sa che la periferica virtuale è già in uno stato anomalo e non prevede un'indicazione VD_E_CLOSE da GetCommand e può richiamare ClientVirtualDeviceSet::Close non appena è terminata l'attività su buffer condiviso.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. Per ulteriori informazioni, vedere "Anomala" più indietro in questo documento.For more information, see “Abnormal Termination” earlier in this document.

ClientVirtualDeviceSet::OpenInSecondaryClientVirtualDeviceSet::OpenInSecondary

Scopo questa funzione consente di aprire il dispositivo virtuale impostato in un client secondario.Purpose This function opens the virtual device set in a secondary client. Il client primario deve essere già utilizzato Create e GetConfiguration per impostare il set di dispositivo virtuale.The primary client must have already used Create and GetConfiguration to set up the virtual device set.

SintassiSyntax

int ClientVirtualDeviceSet::OpenInSecondary (
char *   setName         // name of the set
);
ParametriParameters ArgomentoArgument SpiegazioneExplanation
setNamesetName Identifica il set.This identifies the set. Questo nome è tra maiuscole e minuscole e deve corrispondere al nome utilizzato dal client primario, quando richiamata ClientVirtualDeviceSet::Create.This name is case-sensitive and must match the name used by the primary client when it invoked ClientVirtualDeviceSet::Create.
Valori restituitiReturn Values ArgomentoArgument SpiegazioneExplanation
NOERRORNOERROR Funzione completata.The function succeeded.
VD_E_PROTOCOLVD_E_PROTOCOL Il set di dispositivo virtuale non è stato creato, è già stata aperta nel client o il dispositivo virtuale set non è pronto per accettare richieste aperte dai client secondario.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 L'operazione viene interrotta.The operation is being aborted.

La sezione Osservazioni quando si utilizza un modello di processo più, il client primario è responsabile del rilevamento normale e anomala terminazione dei client secondario.Remarks When using a multiple process model, the primary client is responsible for detecting normal and abnormal termination of secondary clients.

ClientVirtualDeviceSet::GetBufferHandleClientVirtualDeviceSet::GetBufferHandle

Scopo alcune applicazioni possono richiedere più di un processo su cui operare il buffer restituito da ClientVirtualDevice::GetCommand.Purpose Some applications may require more than one process to operate on the buffers returned by ClientVirtualDevice::GetCommand. In questi casi, il processo che riceve il comando è possibile utilizzare GetBufferHandle per ottenere un handle di processo indipendenti che identifica il buffer.In such cases, the process that receives the command can use GetBufferHandle to obtain a process independent handle that identifies the buffer. Questo handle può essere comunicato quindi a qualsiasi altro processo che dispone anche di aprire la periferica virtuale impostata stesso.This handle can then be communicated to any other process that also has the same Virtual Device Set open. Tale processo utilizzerebbe quindi ClientVirtualDeviceSet::MapBufferHandle per ottenere l'indirizzo del buffer.That process would then use ClientVirtualDeviceSet::MapBufferHandle to obtain the address of the buffer. Poiché ogni processo può essere mapping buffer indirizzi diversi, l'indirizzo saranno probabilmente un indirizzo diverso da quello nel proprio partner.The address will likely be a different address than in its partner because each process may be mapping buffers at different addresses.

SintassiSyntax

int ClientVirtualDeviceSet::GetBufferHandle (
uint8_t*     pBuffer,        // in: buffer address
unsigned int*        pBufferHandle   // out: buffer handle
);
ParametriParameters ArgomentoArgument SpiegazioneExplanation
pBufferpBuffer Questo è l'indirizzo di un buffer ottenuto da un comando di lettura o scrittura.This is the address of a buffer obtained from a Read or Write command.
BufferHandleBufferHandle Un identificatore univoco per il buffer viene restituito.A unique identifier for the buffer is returned.
Valori restituitiReturn Values ArgomentoArgument SpiegazioneExplanation
NOERRORNOERROR Funzione completata.The function succeeded.
VD_E_PROTOCOLVD_E_PROTOCOL Il set di dispositivo virtuale non è attualmente aperto.The virtual device set is not currently open.
VD_E_INVALIDVD_E_INVALID Il pBuffer non è un indirizzo valido.The pBuffer is not a valid address.

La sezione Osservazioni il processo che richiama la funzione GetBufferHandle è responsabile del richiamo ClientVirtualDevice::CompleteCommand una volta completato il trasferimento dei dati.Remarks The process that invokes the GetBufferHandle function is responsible for invoking ClientVirtualDevice::CompleteCommand when the data transfer is complete.

ClientVirtualDeviceSet::MapBufferHandleClientVirtualDeviceSet::MapBufferHandle

Scopo questa funzione viene utilizzata per ottenere un indirizzo valido del buffer da un handle del buffer ottenuto da un altro processo.Purpose This function is used to obtain a valid buffer address from a buffer handle obtained from some other process.

SintassiSyntax

int ClientVirtualDeviceSet::MapBufferHandle (
i        nt  dwBuffer,   // in: buffer handle
uint8_t**    ppBuffer        // out: buffer address
);
ParametriParameters ArgomentoArgument SpiegazioneExplanation
dwBufferdwBuffer Questo è l'handle restituito da ClientVirtualDeviceSet::GetBufferHandle.This is the handle returned by ClientVirtualDeviceSet::GetBufferHandle.
ppBufferppBuffer Questo è l'indirizzo del buffer che è valido nel processo corrente.This is the address of the buffer that is valid in the current process.
Valori restituitiReturn Values ArgomentoArgument SpiegazioneExplanation
NOERRORNOERROR Funzione completata.The function succeeded.
VD_E_PROTOCOLVD_E_PROTOCOL Il set di dispositivo virtuale non è attualmente aperto.The virtual device set is not currently open.
VD_E_INVALIDVD_E_INVALID Il ppBuffer è un handle non valido.The ppBuffer is an invalid handle.

La sezione Osservazioni necessario prestare attenzione per comunicare correttamente i punti di controllo.Remarks Care must be taken to communicate the handles correctly. Gli handle sono locali a un set unico dispositivo virtuale.Handles are local to a single virtual device set. I processi di partner, la condivisione di un handle devono verificare buffer handle vengono utilizzati solo nell'ambito del dispositivo virtuale impostata da cui è stato originariamente ottenuto il buffer.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.