SQL Server nel client Linux VDI SDK specificaSQL Server on Linux VDI client SDK Specification

QUESTO ARGOMENTO SI APPLICA A: SìSQL Server (solo Linux)nonDatabase SQL di AzurenonAzure SQL Data Warehousenon Parallel Data Warehouse THIS TOPIC APPLIES TO: yesSQL Server (Linux only)noAzure SQL DatabasenoAzure SQL Data WarehousenoParallel Data Warehouse

Questo documento descrive le interfacce fornite da SQL Server per il SDK del client Linux virtual device interface (VDI).This document covers the interfaces provided by the SQL Server on Linux virtual device interface (VDI) client SDK. Fornitori di software indipendenti (ISV) possono usare la Virtual Backup Device interfaccia API (Application Programming) per integrare SQL Server nei loro prodotti.Independent software vendors (ISVs) can use the Virtual Backup Device Application Programming Interface (API) to integrate SQL Server into their products. In generale, VDI in Linux si comporta in modo analogo a un'infrastruttura 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 POSIX condiviso.Windows Shared Memory becomes POSIX shared memory.
  • I semafori Windows diventano i semafori POSIX.Windows Semaphores become POSIX semaphores.
  • Tipi di Windows, ad esempio 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 che i riferimenti al nome dell'istanza sono stati rimossi.SQL Server on Linux does not support named instances so references to instance name have been removed.
  • Libreria condivisa viene implementata in libsqlvdi.so installato presso /opt/mssql/lib/libsqlvdi.soThe shared library is implemented in libsqlvdi.so installed at /opt/mssql/lib/libsqlvdi.so

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

Esaminare anche la soluzione 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, le primitive POSIX sono proprietà dell'utente la creazione di essi e al 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à di 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 client VDI, uno dei due metodi seguenti sono consigliati:To allow sharing between SQL Server and the VDI client, one of the following two methods are recommended:

  1. Eseguire il Client VDI come l'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 client.This chapter contains descriptions of each of the client functions. Le descrizioni di includono le informazioni seguenti:The descriptions include the following information:

  • Scopo della funzioneFunction purpose
  • Sintassi della funzioneFunction syntax
  • elenco di parametriParameter list
  • Valori restituitiReturn values
  • NoteRemarks

ClientVirtualDeviceSet::CreateClientVirtualDeviceSet::Create

Scopo questa funzione crea il set di dispositivi virtuali.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 dispositivi virtuali.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 eccetto barra rovesciata () può essere utilizzato.Any character except backslash () may be used. Si tratta di una stringa di caratteri.This is a character string. È consigliabile facendolo precedere la stringa con nome di prodotto o della società dell'utente e nome del database.Prefixing the string with the user’s product or company name and database name is recommended.
cfgcfg Questa è la configurazione per il set di dispositivo virtuale.This is the configuration for the virtual device set. Per altre 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 in caso contrario, non è supportato.One or more of the fields in the configuration was invalid or otherwise unsupported.
VD_E_PROTOCOLVD_E_PROTOCOL Il dispositivo virtuale impostato già esistente.The virtual device set already exists.

La sezione Osservazioni creare il metodo deve essere chiamato solo una volta per ogni operazione di BACKUP o ripristino.Remarks The Create method should be called only once per BACKUP or RESTORE operation. Dopo aver richiamato il metodo Close, 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 dispositivi virtuali.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 Si tratta del timeout in millisecondi.This is the time-out in milliseconds. Consente di impedire i timeout infinito o qualsiasi numero intero negativo.Use INFINITE or any negative integer to prevent time-out.
cfgcfg Al termine dell'esecuzione, contiene la configurazione selezionata dal server.Upon successful execution, this contains the configuration selected by the server. Per altre 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 È stato richiamato SignalAbort.SignalAbort was invoked.
VD_E_TIMEOUTVD_E_TIMEOUT La funzione verifica il 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 una 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 dispositivi virtuali.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. Questo dispositivo viene usato per l'operazione 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 è nello 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 dovranno includere 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 fino a quando 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 i dispositivi, verrà restituito il set di dispositivi virtuali 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. Usare finito per un'attesa indefinita.Use INFINTE to wait indefinitely. Usare 0 per eseguire il polling di un comando.Use 0 to poll for a command. Se non è attualmente disponibile alcun comando, viene restituito VD_E_TIMEOUT.VD_E_TIMEOUT is returned if no command is currently available . Se si verifica il timeout, il client decide 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. Usare finito o un valore negativo per un'attesa indefinita.Use INFINTE or a negative value to wait indefinitely. Usare 0 per eseguire il polling di un comando.Use 0 to poll for a command. Se non è disponibile alcun comando prima che il timeout scade, viene restituito VD_E_TIMEOUT.VD_E_TIMEOUT is returned if no command is available before the timeout expires. Se si verifica il timeout, il client decide l'azione successiva.If the timeout occurs, the client decides the next action.
ppCmdppCmd Quando un comando viene 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, questo puntatore 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 la sezione "Commands" 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 Nessun comando è disponibile e il timeout è scaduto.No command was available and the time-out expired.
VD_E_ABORTVD_E_ABORT Client o il server ha usato la 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 che tutti i dispositivi sono stati chiusi, il client richiama ClientVirtualDeviceSet::Close per chiudere il set di dispositivi virtuali.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 altre informazioni, vedere la sezione "Commands" 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 restituito precedentemente dal 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 in esecuzione.The code returned should be appropriate to the command being performed. ERROR_SUCCESS viene 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. Viene visualizzato un elenco dei codici di stato tipici per ogni comando in "Commands" 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.
posizioneposition 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 osservato.The completion was correctly noted.
VD_E_INVALIDVD_E_INVALID pCmd non era un comando attivo.pCmd was not an active command.
VD_E_ABORTVD_E_ABORT Abort è stata segnalata.Abort was signaled.
VD_E_PROTOCOLVD_E_PROTOCOL Il dispositivo non è aperto.The device is not open.

La sezione Osservazioni NoneRemarks None

ClientVirtualDeviceSet::SignalAbortClientVirtualDeviceSet::SignalAbort

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

SintassiSyntax

int ClientVirtualDeviceSet::SignalAbort ();
ParametriParameters ArgomentoArgument SpiegazioneExplanation
NoneNone 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 interrompere tutte le operazioni.This routine signals that all operations should cease. Lo stato del set di dispositivo virtuale complessiva entra in uno stato terminato in modo anomalo.The state of the overall virtual device set enters an Abnormally Terminated state. Viene restituito alcun comando ulteriormente in 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 che è terminato in modo sicuro qualsiasi utilizzo dei buffer fornito al client in sospeso.The client should call ClientVirtualDeviceSet::Close after it has safely terminated any outstanding use of buffers provided to the client. Per altre informazioni, vedere "Terminazione anomala" più indietro in questo documento.For more information, see “Abnormal Termination” earlier in this document.

ClientVirtualDeviceSet::CloseClientVirtualDeviceSet::Close

Scopo questa funzione consente di chiudere il set di dispositivi virtuali creato da ClientVirtualDeviceSet::Create.Purpose This function closes the virtual device set created by ClientVirtualDeviceSet::Create. Restituisce la versione 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
NoneNone Non applicabileNot applicable
Valori restituitiReturn Values ArgomentoArgument SpiegazioneExplanation
NOERRORNOERROR Viene restituito quando il set di dispositivo virtuale è stata chiusa correttamente.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 era 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 dei dati e i dispositivi virtuali sono 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 dalla OpenDevice vengono invalidate da chiudere.All virtual device interfaces returned by OpenDevice are invalidated by Close. Il client è consentito dopo la chiamata di chiusura viene restituito a una chiamata di creazione dell'interfaccia di set di dispositivo virtuale.The client is permitted to issue a Create call on the virtual device set interface after the Close call is returned. Tale chiamata crea 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 vengono 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. Vengono rilasciate le risorse di infrastruttura VDI.VDI resources are released. Il client deve attendere per un'indicazione VD_E_CLOSE su ogni dispositivo prima di richiamare ClientVirtualDeviceSet::Close.The client should wait for a VD_E_CLOSE indication on each device before invoking ClientVirtualDeviceSet::Close. Se il client sa che il set di dispositivo virtuale è già in uno stato terminato in modo anomalo, quindi non possono prevedere un'indicazione VD_E_CLOSE dall'operazione GetCommand e può richiamare ClientVirtualDeviceSet::Close appena attività su buffer condiviso viene terminato.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 altre informazioni, vedere "Terminazione 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 avere già usato GetConfiguration e crea per configurare il set di dispositivi virtuali.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 è distinzione maiuscole/minuscole e deve corrispondere al nome usato 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 dispositivi virtuali non è stato creato, è già stata aperta in questo client o il dispositivo virtuale set non è pronto ad 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 è in corso interrotta.The operation is being aborted.

La sezione Osservazioni quando si usa 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 i buffer restituiti 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 usare 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ò quindi essere comunicato a qualsiasi altro processo che ha anche l'apertura di Set di dispositivi virtuali stesso.This handle can then be communicated to any other process that also has the same Virtual Device Set open. Tale processo sarebbe quindi usare ClientVirtualDeviceSet::MapBufferHandle per ottenere l'indirizzo del buffer.That process would then use ClientVirtualDeviceSet::MapBufferHandle to obtain the address of the buffer. L'indirizzo sarà probabilmente un indirizzo diverso da quello nel relativo partner poiché ogni processo può eseguire il mapping di buffer in indirizzi diversi.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 Viene restituito un identificatore univoco per il buffer.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 durante il trasferimento dei dati è stato completato.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 di buffer valida 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 dei buffer 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 rispetto 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 garantire tale buffer gli handle vengono usati solo all'interno dell'ambito del dispositivo virtuale impostato 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.