Condividi tramite


AVC_FUNCTION_GET_REQUEST

Il codice della funzione AVC_FUNCTION_GET_REQUEST viene usato per registrare per ricevere richieste di unità AV/C e subunit.

Blocco dello stato I/O

Questa funzione imposta sempre Irp-IoStatus.Status> su STATUS_PENDING.

Commenti

Questa funzione usa la struttura AVC_COMMAND_IRB, come illustrato di seguito.

typedef struct _AVC_COMMAND_IRB {
  AVC_IRB  Common;
  UCHAR  SubunitAddrFlag : 1;
  UCHAR  AlternateOpcodesFlag : 1;
  UCHAR  TimeoutFlag : 1;
  UCHAR  RetryFlag : 1;
  union {
    UCHAR  CommandType;
    UCHAR  ResponseCode;
  };
  PUCHAR  SubunitAddr;
  PUCHAR  AlternateOpcodes;
  LARGE_INTEGER  Timeout;
  UCHAR  Retries;
  UCHAR  Opcode;
  ULONG  OperandLength;
  UCHAR  Operands[MAX_AVC_OPERAND_BYTES];
  NODE_ADDRESS  NodeAddress;
  ULONG  Generation;
} AVC_COMMAND_IRB, *PAVC_COMMAND_IRB;

Requisiti

Intestazioni: Dichiarato in avc.h. Includere avc.h.

AVC_COMMAND_IRB Input

Common
Il sottomember della funzione di questo membro deve essere impostato su AVC_FUNCTION_GET_REQUEST dall'enumerazione AVC_FUNCTION .

SubunitAddrFlag
Usato solo quando si registra per ricevere i comandi dell'unità. Impostare questa opzione su 1 e specificare un indirizzo unità nel parametro SubunitAddr . Si noti che per le richieste subunit, il completamento viene impostato su 1 e il parametro SubunitAddr punta alla memoria contenente l'indirizzo subunit per questa istanza di subunit virtuale. Il chiamante può accedere a questa memoria non in pagina, ma non deve tentare di liberarlo.

AlternateOpcodesFlag
Usato solo quando si registra per ricevere i comandi dell'unità. Impostare questa opzione su 1 e specificare un elenco di opcode supportati dal chiamante nel parametro AlternateOpcodes .

TimeoutFlag
Ignorato.

RiprovareFlag
Ignorato.

CommandType
Ignorato nell'input. Nell'output, il membro CommandType è impostato su uno dei valori dell'enumerazione AvcCommandType .

ResponseCode
Ignorato per le richieste.

SubunitAddr
Usato solo quando si registra per ricevere i comandi dell'unità. Impostare questa opzione sull'indirizzo di memoria non impaginata contenente la codifica Unit Address in base alla sezione 5.3.3 della 1394 Trade Association AV/C Digital Interface Command Set General Specification, Rev 3.0 (0xff). Si noti che per le richieste subunit, al completamento questo punto di memoria contenente l'indirizzo subunit per questa istanza di subunit virtuale. Il chiamante può accedere a questa memoria non in pagina, ma non deve tentare di liberarlo.

AlternateOpcodes
Usato solo quando si registra per ricevere i comandi dell'unità. Impostare questa opzione sull'indirizzo della memoria non a pagina contenente l'elenco di opcode unità supportate dal chiamante. Il primo byte dell'elenco opcode è il numero di opcode da seguire (equivalente al numero di byte). La lunghezza totale della memoria contenente l'elenco opcode alternativo è AlternateOpcodes[0]+1.

Timeout
Ignorato.

Tentativi
Ignorato.

Opcode
Ignorato durante l'input. Nell'output, questo contiene un codice opcode dell'unità AV/C. Si tratta di uno dei codici opcode specificati tramite AlternateOpcodes.

OperandLength
Ignorato durante l'input. In output, questo valore è impostato sul numero di byte nell'elenco operando usato dalla richiesta.

Operandi
Ignorato durante l'input. In output, questo parametro contiene l'elenco operando della richiesta.

NodeAddress
Ignorato durante l'input. In output, questo valore è impostato sull'indirizzo del nodo dell'origine della richiesta. Questo parametro viene usato durante l'invio della risposta (per altre informazioni, vedere AVC_FUNCTION_SEND_RESPONSE).

Generazione
Ignorato durante l'input. Nell'output, questo valore viene impostato sul conteggio della generazione in vigore quando l'indirizzo del nodo è stato considerato valido. Questo parametro viene usato durante l'invio della risposta (per altre informazioni, vedere AVC_FUNCTION_SEND_RESPONSE).

Nel contesto dell'interfaccia del dispositivo GUID_AVC_CLASS, il codice della funzione AVC_FUNCTION_GET_REQUEST viene usato per registrare per ricevere richieste di unità AV/C solo (non richieste subunit). Questa funzione viene in genere usata da un driver di filtro superiore ( dell'avc.sys FDO) per supportare la funzionalità del dispositivo peer( ovvero per gestire le richieste unità dal dispositivo di destinazione dallo stack nonvirtuale). Anche se nulla impedisce la registrazione dei driver subunit per gestire le richieste di unità, le istanze del driver subunit che registrano per supportare gli stessi opcode unità devono collaborare tra loro per condividere le informazioni sullo stato. Avc.sys non supporta direttamente più registrazioni per gli stessi opcode unità.

Questa funzione usa la struttura AVC_COMMAND_IRB. Questa struttura definisce i componenti comuni di una richiesta di comando AV/C. Gli unici parametri di input validi sono SubunitAddrFlag, AlternateOpcodesFlag, AlternateOpcodes e SubunitAddr e tutti sono necessari. AlternateOpcodes deve puntare a un buffer contenente l'elenco di opcode unità supportate dal chiamante. SubunitAddr deve puntare a un buffer contenente un indirizzo di unità (0xff).

Nel caso di istanze virtuali di avc.sys , ovvero istanze che registrano l'interfaccia del dispositivo AVC_FUNCTION_GET_REQUEST GUID_VIRTUAL_AVC_CLASS, viene usata per registrare per ricevere richieste di unità AV/C e subunit. I driver di filtro superiore (del fdO diavc.sys virtuale) in genere registrano per gestire le richieste di unità, mentre i driver subunit registrano per gestire le richieste per il loro particolare tipo di subunit. Anche se nulla impedisce la registrazione dei driver subunit per gestire le richieste di unità, le istanze del driver subunit che registrano per supportare gli stessi opcode unità devono collaborare tra loro per condividere le informazioni sullo stato. Avc.sys non supporta direttamente più registrazioni per gli stessi opcode unità.

I driver subunit non impostano parametri di input durante la registrazione per ricevere richieste specifiche della subunit.

Questa funzione restituisce sempre STATUS_PENDING, quindi qualsiasi elaborazione deve essere eseguita in una routine di completamento. Al termine, la struttura AVC_COMMAND_IRB contiene il codice opcode e gli operandi di una richiesta. Il protocollo AV/C richiede che una risposta venga inviata entro 100ms. Questa operazione può essere eseguita dalla routine di completamento usando la funzione AVC_FUNCTION_SEND_RESPONSE .

Se la prima risposta usa il codice di risposta AVC_RESPONSE_INTERIM (dall'enumerazione AvcResponseType ), è previsto il completamento dell'elaborazione. I membri NodeAddress e Generation , ottenuti dal completamento della funzione originale AVC_FUNCTION_GET_REQUEST , devono essere usati nelle risposte successive. In qualsiasi caso, la funzione di AVC_FUNCTION_GET_REQUEST successiva deve essere inviata prima di restituire dalla routine di completamento iniziale AVC_FUNCTION_SEND_RESPONSE , in modo che la richiesta di unità successiva possa essere ricevuta.

L'uso consigliato di questa struttura consiste nello zero della struttura (usare RtlZeroMemory) prima di compilare i parametri.

Questo codice di funzione può essere chiamato in IRQL <= DISPATCH_LEVEL.

Vedi anche

AVC_FUNCTION_SEND_RESPONSE

AvcResponseCode

AVC_FUNCTION

RtlZeroMemory