DXGK_SPB_INTERFACE struttura (dispmprt.h)

La struttura DXGK_SPB_INTERFACE contiene puntatori alle funzioni nell'interfaccia SPB (Simple Peripheral Bus) che un modello wdDM (Windows Display Driver Model) 1.2 e versioni successive può chiamare per controllare e modificare le risorse SPB.

Sintassi

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;

Members

Size

Dimensione, in byte, della struttura.

Version

Numero di versione dell'interfaccia SPB. Le costanti del numero di versione sono definite in Dispmprt.h (ad esempio, DXGK_SPB_INTERFACE_VERSION_1).

Context

Puntatore a un contesto fornito dal driver miniport visualizzato.

InterfaceReference

Puntatore a una funzione di riferimento dell'interfaccia implementata dal driver miniport visualizzato.

InterfaceDereference

Puntatore a una funzione di dereferenza dell'interfaccia implementata dal driver miniport visualizzato.

OpenSpbResource

Apre una risorsa SPB (Simple Peripheral Bus). Tutti i parametri di input vengono forniti dal driver miniport visualizzato.

Parametro OpenSpbResource Descrizione
DeviceHandle Handle che rappresenta una scheda di visualizzazione. Il driver miniport visualizzato in precedenza ha ottenuto questo handle nel membro DeviceHandle della struttura DXGKRNL_INTERFACE passata alla funzione DxgkDdiStartDevice .
SpbReourceId ID risorsa dell'hub risorse SPB.
SpbResourceSubName Puntatore facoltativo al nome secondario della risorsa SPB Unicode.
DesiredAccess Valore ACCESS_MASK che determina l'accesso richiesto alla risorsa SPB. Per altre informazioni, vedere il parametro DesiredAccess della funzione ZwCreateFile .
ShareAccess Tipo di accesso di condivisione per il file. Per altre informazioni, vedere il parametro ShareAccess di ZwCreateFile.
OpenOptions Opzioni da applicare quando si apre la risorsa SPB. Per altre informazioni, vedere il parametro CreateOptions di ZwCreateFile.
SpbResource Puntatore a un buffer utilizzato per restituire l'handle alla risorsa SPB.

CloseSpbResource

Chiude una risorsa SPB. Tutti i parametri di input vengono forniti dal driver miniport visualizzato.

La chiusura di un handle di oggetti aperto causa la non validità dell'handle. Il sistema decrementa anche il numero di handle per l'oggetto e verifica se l'oggetto può essere eliminato. Il sistema non elimina effettivamente l'oggetto finché non vengono chiusi tutti gli handle dell'oggetto e non rimangono puntatori a riferimento.

Il driver deve chiamare CloseSpbResource per chiudere ogni handle aperto con OpenSpbResource non appena l'handle non è più necessario.

I chiamanti di CloseSpbResource non devono presupporre che questa funzione attenda automaticamente il completamento di tutte le operazioni di I/O prima della restituzione.

Parametro CloseSpbResource Descrizione
DeviceHandle Handle che rappresenta una scheda di visualizzazione. Il driver miniport visualizzato in precedenza ha ottenuto questo handle nel membro DeviceHandle della struttura DXGKRNL_INTERFACE passata alla funzione DxgkDdiStartDevice .
SpbResource Puntatore a una risorsa SPB aperta dal driver miniport visualizzato usando la funzione OpenSpbResource .

ReadSpbResource

Legge i dati da una risorsa SPB aperta. Tutti i parametri di input vengono forniti dal driver miniport visualizzato.

Se la chiamata a OpenSpbResource imposta uno dei flag OpenOptionsFILE_SYNCHRONOUS_IO_ALERT o FILE_SYNCHRONOUS_IO_NONALERT (definito in Wdm.h), gestione I/O mantiene la posizione del file corrente. In tal caso, il chiamante readSpbResource può specificare che l'offset di posizione del file corrente viene usato anziché un valore ByteOffset esplicito. Questa specifica può essere effettuata usando uno dei metodi seguenti:

  • Specificare un puntatore a un valore LARGE_INTEGER con il membro HighPart impostato su -1 e il membro LowPart impostato sul valore definito dal sistema FILE_USE_FILE_POINTER_POSITION (definito in Wdm.h).
  • Passare un puntatore NULL per ByteOffset.

ReadSpbResource aggiorna la posizione del file corrente aggiungendo il numero di byte letti al termine dell'operazione di lettura, se usa la posizione del file corrente gestita da Gestione I/O.

Anche quando gestione I/O mantiene la posizione del file corrente, il chiamante può reimpostare questa posizione passando un valore ByteOffset esplicito a ReadSpbResource. Questa operazione modifica automaticamente la posizione del file corrente in tale valore ByteOffset , esegue l'operazione di lettura e quindi aggiorna la posizione in base al numero di byte effettivamente letti. Questa tecnica fornisce al chiamante il servizio atomico di ricerca e lettura.

Parametro OpenSpbResource Descrizione
DeviceHandle Handle che rappresenta una scheda di visualizzazione. Il driver miniport visualizzato in precedenza ha ottenuto questo handle nel membro DeviceHandle della struttura DXGKRNL_INTERFACE passata alla funzione DxgkDdiStartDevice .
SpbResource Puntatore a una risorsa SPB aperta dal driver miniport visualizzato usando la funzione OpenSpbResource .
Lunghezza Dimensioni, in byte, del buffer a cui fa riferimento il parametro Buffer .
Buffer Puntatore a un buffer che riceve i dati letti dalla risorsa SPB specificata.
ByteOffset Puntatore facoltativo a una variabile che specifica l'offset di byte iniziale nella risorsa SPB in cui verrà avviata l'operazione di lettura. Se viene eseguito un tentativo di lettura oltre la fine del file, ReadSpbResource restituisce un errore.
EventHandle Handle facoltativo per un evento creato dal chiamante. Se questo parametro viene fornito, il chiamante verrà inserito in uno stato di attesa fino al completamento dell'operazione di lettura e l'evento specificato viene impostato sullo stato Signaled . Questo parametro può essere NULL.
IoStatusBlock Puntatore a una struttura IO_STATUS_BLOCK che riceve lo stato di completamento finale e informazioni sull'operazione di lettura richiesta. Il membro Information della struttura IO_STATUS_BLOCK riceve il numero di byte effettivamente letti dalla risorsa SPB.

WriteSpbResource

Scrive i dati in una risorsa SPB aperta.

Se la chiamata alla funzione OpenSpbResource imposta solo il flag DesiredAccessFILE_APPEND_DATA, il parametro ByteOffset viene ignorato. In questo caso, i dati nel buffer puntati dal parametro Buffer , per i byte di lunghezza , vengono scritti a partire dalla fine del file corrente.

Se la chiamata a OpenSpbResource imposta uno dei flag CreateOptions , FILE_SYNCHRONOUS_IO_ALERT o FILE_SYNCHRONOUS_IO_NONALERT, gestione I/O mantiene la posizione del file corrente. In tal caso, il chiamante writeSpbResource può specificare che l'offset di posizione del file corrente viene usato anziché un valore ByteOffset esplicito. Questa specifica può essere effettuata usando uno dei metodi seguenti:

  • Specificare un puntatore a un valore LARGE_INTEGER con il membro HighPart impostato su -1 e il membro LowPart impostato sul valore definito dal sistema FILE_USE_FILE_POINTER_POSITION (definito in Wdm.h).
  • Passare un puntatore NULL per ByteOffset.

WriteSpbResource aggiorna la posizione del file corrente aggiungendo il numero di byte scritti al termine dell'operazione di scrittura, se si usa la posizione corrente del file gestita da Gestione I/O.

Anche quando gestione I/O mantiene la posizione del file corrente, il chiamante può reimpostare questa posizione passando un valore ByteOffset esplicito a WriteSpbResource. Questa operazione modifica automaticamente la posizione del file corrente in tale valore ByteOffset , esegue l'operazione di scrittura e quindi aggiorna la posizione in base al numero di byte effettivamente scritti. Questa tecnica fornisce al chiamante il servizio di ricerca atomica e scrittura.

È anche possibile causare l'avvio di un'operazione di scrittura alla fine corrente del file specificando per ByteOffset un puntatore a un valore LARGE_INTEGER con HighPart impostato su -1 e LowPart impostato su FILE_WRITE_TO_END_OF_FILE. Ciò funziona indipendentemente dal fatto che Gestione I/O mantenga la posizione del file corrente.

Parametro WriteSpbResource Descrizione
DeviceHandle Handle che rappresenta una scheda di visualizzazione. Il driver miniport di visualizzazione ottenuto in precedenza questo handle nel membro DeviceHandle della struttura DXGKRNL_INTERFACE passata alla funzione DxgkDdiStartDevice .
SpbResource Puntatore a una risorsa SPB aperta dal driver miniport visualizzato usando la funzione OpenSpbResource .
Lunghezza Dimensione, in byte, del buffer a cui punta il parametro Buffer .
Buffer Puntatore a un buffer allocato dal chiamante che contiene i dati da scrivere nella risorsa SPB specificata.
ByteOffset Puntatore facoltativo a una variabile che specifica l'offset dei byte iniziale nella risorsa SPB in cui inizierà l'operazione di scrittura. Se i parametri Length e ByteOffset specificano un'operazione di scrittura oltre il contrassegno di fine file corrente, WriteSpbResource estende automaticamente il file e aggiorna il contrassegno di fine file; tutti i byte che non vengono scritti in modo esplicito tra tali contrassegni precedenti e nuovi contrassegni di fine file sono definiti come zero.
EventHandle Handle facoltativo per un evento creato dal chiamante. Se questo parametro viene specificato, il chiamante verrà inserito in uno stato di attesa fino al completamento dell'operazione di scrittura e l'evento specificato viene impostato sullo stato Segnalato . Questo parametro può essere NULL.
IoStatusBlock Puntatore a una struttura IO_STATUS_BLOCK che riceve lo stato di completamento finale e informazioni sull'operazione di scrittura richiesta. Il membro Information della struttura IO_STATUS_BLOCK riceve il numero di byte effettivamente scritti nella risorsa SPB.

SpbResourceIoControl

Esegue un'operazione di controllo di I/O su una risorsa SPB (Simple Peripheral Bus) aperta. Tutti i parametri di input vengono forniti dal driver miniport di visualizzazione.

Se il chiamante ha aperto il file per operazioni di I/O asincrone (con nessuna FILE_SYNCHRONOUS_XXX set di opzioni create/open), l'evento specificato, se presente, verrà impostato sullo stato Segnalato al termine dell'operazione di controllo del dispositivo. In caso contrario, l'oggetto file specificato dal parametro DeviceHandle verrà impostato sullo stato Signaled .

Parametro SpbResourceIoControl Descrizione
DeviceHandle Handle che rappresenta una scheda di visualizzazione. Il driver miniport di visualizzazione ottenuto in precedenza questo handle nel membro DeviceHandle della struttura DXGKRNL_INTERFACE passata alla funzione DxgkDdiStartDevice .
SpbResource Puntatore a una risorsa SPB aperta dal driver miniport visualizzato usando la funzione OpenSpbResource .
IoControlCode Codice di controllo di I/O del dispositivo (IOCTL_XXX) che indica l'operazione di controllo di I/O del dispositivo da eseguire, in genere dal driver di dispositivo sottostante. Il valore di questo parametro determina il formato e la lunghezza richiesta dei parametri InputBuffer e OutputBuffer , nonché quali delle coppie di parametri seguenti sono necessarie.
InBufferSize Dimensione, in byte, del buffer a cui punta il parametro InputBuffer . Questo valore viene ignorato se InputBuffer è NULL.
Inputbuffer Puntatore a un buffer di input allocato dal chiamante che contiene informazioni specifiche del dispositivo da assegnare al dispositivo di destinazione. Se il parametro IoControlCode specifica un'operazione che non richiede dati di input, questo puntatore può essere NULL.
OutBufferSize Dimensioni, in byte, del buffer a cui punta il parametro OutputBuffer . Questo valore viene ignorato se OutputBuffer è NULL.
OutputBuffer Puntatore a un buffer di output allocato dal chiamante in cui le informazioni vengono restituite dal dispositivo di destinazione. Se il parametro IoControlCode specifica un'operazione che non produce dati di output, questo puntatore può essere NULL.
EventHandle Handle facoltativo per un evento creato dal chiamante. Se questo parametro viene specificato, il chiamante verrà inserito in uno stato di attesa fino al completamento dell'operazione richiesta e l'evento specificato viene impostato sullo stato Segnalato . Questo parametro può essere NULL.
IoStatusBlock Puntatore a una variabile che riceve lo stato di completamento finale e informazioni sull'operazione di controllo di I/O richiesta. Per le chiamate riuscite che restituiscono dati, il numero di byte scritti nel buffer a cui punta il parametro OutputBuffer viene restituito nel membro Information della struttura IO_STATUS_BLOCK .

Commenti

Per usare le funzioni di questa struttura, specificare innanzitutto i membri Size e Version della struttura DXGK_SPB_INTERFACE . Chiamare quindi la funzione DxgkCbQueryServices con il parametro ServicesType impostato su un valore dxgkServicesFirmwareTable e impostare il parametro Interface sull'indirizzo (cast come PINTERFACE) della struttura DXGK_SPB_INTERFACE .

Per altre informazioni sull'architettura SPB, vedere Simple Peripheral Buses and SPB Peripheral Driver Design Guide**.

Requisiti

Requisito Valore
Client minimo supportato Windows 8
Server minimo supportato Windows Server 2012
Intestazione dispmprt.h (include Dispmprt.h)