Codici di funzione principali di IRP seriali

In questo argomento vengono documentato i codici di funzione principali di IRP seriali.

Intestazione: Wdm.h (include Wdm.h o Ntddk.h)

IRP_MJ_CREATE

La richiesta di IRP_MJ_CREATE apre un dispositivo seriale.

Quando inviato

Un client deve aprire un dispositivo seriale prima di poter accedere alla porta o a un dispositivo connesso alla porta.

Parametri di input

Nessuno.

Parametri di output

Nessuno.

Blocco di stato di I/O

Il campo Informazioni è impostato su zero.

Il campo Stato è impostato su uno dei valori seguenti:

Valore di stato Descrizione
STATUS_SUCCESS Il dispositivo seriale è stato aperto correttamente.
STATUS_ACCESS_DENIED Il dispositivo è già aperto.
STATUS_DELETE_PENDING Seriale è in corso nel processo di rimozione del dispositivo.
STATUS_INSUFFICIENT_RESOURCES Il dispositivo non è in uno stato avviato Plug and Play oppure il driver non può allocare una struttura dati interna.
STATUS_NOT_A_DIRECTORY Impossibile aprire un dispositivo seriale come directory.
STATUS_PENDING Seriale ha accodato la richiesta per l'elaborazione successiva.
STATUS_SHARED_IRQ_BUSY L'interruzione assegnata al dispositivo è in uso da un altro dispositivo aperto.

Operazione

Un dispositivo seriale deve essere aperto prima che possa essere usato. Un dispositivo seriale è un dispositivo esclusivo; è possibile aprire un solo file su una porta in qualsiasi momento.

IRP_MJ_DEVICE_CONTROL

La richiesta di IRP_MJ_DEVICE_CONTROL opera una porta seriale.

Quando inviato

Un client usa le richieste di controllo del dispositivo per:

  • Ottenere informazioni sulla porta
  • Ottenere e impostare i registri
  • Ottenere e impostare le modalità operative

Per una descrizione delle richieste di controllo del dispositivo supportate da Serial, vedere l'intestazione ntddser.h .

Parametri di input

Richiesta specifica

Parametri di output

Richiesta specifica

Blocco di stato di I/O

Richiesta specifica

Operazione

Richiesta specifica

IRP_MJ_FLUSH_BUFFERS

La richiesta di IRP_MJ_FLUSH_BUFFER scarica il buffer di scrittura interno di un dispositivo seriale.

Quando inviato

Un client usa una richiesta di scaricamento per determinare quando Serial ha completato tutte le richieste di scrittura inviate dal client prima della richiesta di scaricamento.

Parametri di input

Nessuno.

Parametri di output

Nessuno.

Blocco di stato di I/O

Il membro Information è impostato su zero.

Il membro Status è impostato su uno dei valori di stato seguenti:

Valore di stato Descrizione
STATUS_SUCCESS La richiesta è stata completata correttamente.
STATUS_CANCELLED Un client ha annullato la richiesta. Serial annulla anche una richiesta se si verifica un errore del dispositivo e Serial è configurato per annullare una richiesta se si verifica un errore del dispositivo.
STATUS_DELETE_PENDING Il driver è in fase di rimozione del dispositivo.
STATUS_PENDING Seriale ha accodato la richiesta per l'elaborazione successiva.

Operazione

Le code seriali e avviano l'elaborazione delle richieste di scrittura e scaricamento nell'ordine in cui vengono ricevute le richieste. Serial completa una richiesta di scaricamento dopo che chiama IoCompleteRequest per tutte le richieste di scrittura ricevute prima di una richiesta di scaricamento. Tuttavia, il completamento della richiesta di scaricamento non indica che tutte le richieste di scrittura avviate in precedenza vengono completate da altri driver nello stack di dispositivi. Ad esempio, un driver di filtro potrebbe comunque elaborare una richiesta di scrittura. Un client deve verificare che una richiesta di scrittura venga completata da tutti i driver nello stack di dispositivi prima che il client tenti di liberare o riutilizzare una richiesta di scrittura.

IRP_MJ_INTERNAL_DEVICE_CONTROL

La richiesta di IRP_MJ_INTERNAL_DEVICE_CONTROL imposta le modalità operative interne in un dispositivo seriale.

Quando inviato

Un client usa richieste di controllo del dispositivo interne a:

  • Ottenere e reimpostare le impostazioni di base
  • Controllo dell'operazione di attesa/riattivazione

Per una descrizione delle richieste di controllo del dispositivo interno, vedere l'intestazione ntddser.h .

Parametri di input

Richiesta specifica

Parametri di output

Richiesta specifica

Blocco di stato di I/O

Richiesta specifica

Operazione

Richiesta specifica

IRP_MJ_PNP

La richiesta di IRP_MJ_PNP supporta Plug and Play.

Quando inviato

PnP Manager invia IRP_MJ_PNP richieste ai dispositivi di query e all'avvio, all'arresto e alla rimozione dei dispositivi.

Parametri di input

Richiesta specifica

Parametri di output

Richiesta specifica

Blocco di stato di I/O

Richiesta specifica

Operazione

Serial supporta le richieste di Plug and Play seguenti:

Seriale invia tutte le altre richieste di Plug and Play nello stack di dispositivi senza ulteriore elaborazione.

Seriale esegue l'elaborazione specifica della serie seguente per le richieste di Plug and Play:

IRP_MN_QUERY_ID (tipo BusQueryHardwardIDs)

Se un dispositivo seriale si trova in una scheda ISA multiport, seriale aggiunge la stringa di caratteri wide "*PNP0502" alla stringa di ID hardware.

IRP_MN_FILTER_RESOURCE_REQUIREMENTS

I dispositivi seriali in una scheda ISA multiport condividono lo stesso registro di stato di interruzione e lo stesso interruzione.

Per una descrizione dell'operazione generica delle richieste di Plug and Play, vedere Plug and Play IRP secondari.

IRP_MJ_POWER

La IRP_MJ_POWER richiesta controlla la gestione della potenza.

Quando inviato

Power Manager usa le richieste di alimentazione per eseguire query e impostare gli stati di alimentazione.

Parametri di input

Richiesta specifica

Parametri di output

Richiesta specifica

Blocco di stato di I/O

Richiesta specifica

Operazione

Serial supporta le richieste di alimentazione seguenti:

Serial invia tutte le altre richieste di alimentazione verso il basso dello stack di dispositivi da completare da un driver di livello inferiore.

Serial è il proprietario predefinito dei criteri di alimentazione per uno stack di dispositivi seriali che usa Serial come driver di funzione o un driver di filtro di livello inferiore.

Per altre informazioni sull'operazione generica di queste richieste, vedere Regole per la gestione dei set di sicurezza di alimentazione.

IRP_MJ_QUERY_INFORMATION

La richiesta di IRP_MJ_QUERY_INFORMATION esegue una query sulle informazioni end-of-file per un dispositivo seriale.

Quando inviato

Un client usa una richiesta di informazioni sulle query per ottenere informazioni standard e informazioni sulla posizione su un file aperto in un dispositivo seriale.

Parametri di input

Parameters.QueryFile.FileInformationClass è impostato su FileStandardInformation o FilePositionInformation.

Parametri di output

Parametro Descrizione
FileStandardInformation Il membro AssociatedIrp.SystemBuffer punta a una struttura FILE_STANDARD_INFORMATION allocata dal client usata da Serial per restituire informazioni standard.
FilePositionInformation Il membro AssociatedIrp.SystemBuffer punta a una struttura FILE_POSITION_INFORMATION allocata dal client usata da Serial per restituire le informazioni sulla posizione.

Blocco di stato di I/O

Se la richiesta ha esito positivo, il membro Information è impostato su zero.

Il membro Status è impostato su uno dei valori di stato seguenti:

Valore di stato Descrizione
STATUS_SUCCESS La richiesta è stata completata correttamente.
STATUS_CANCELLED Un client ha annullato la richiesta. Serial annulla anche una richiesta se si verifica un errore del dispositivo e Serial è configurato per annullare una richiesta se si verifica un errore del dispositivo.
STATUS_DELETE_PENDING Seriale è in corso nel processo di rimozione del dispositivo.
STATUS_INVALID_PARAMETER Le informazioni richieste non sono supportate.
STATUS_PENDING Seriale ha accodato la richiesta per l'elaborazione successiva.

Operazione

Serial supporta le richieste di tipo FileStandardInformation e FilePositionInformation.

Le informazioni sui file standard sono sempre impostate su zero o FALSE, in base alle esigenze. Le informazioni sulla posizione sono sempre impostate su zero.

IRP_MJ_READ

Una richiesta IRP_MJ_READ trasferisce dati da un dispositivo seriale a un client.

Quando inviato

Un client usa una richiesta di lettura ogni volta che legge i dati in un dispositivo seriale.

Parametri di input

Il membro Parameters.Read.Length è impostato sul numero di byte da trasferire nel buffer di lettura del client.

Parametri di output

Il membro AssociatedIrp.SystemBuffer punta a un buffer di lettura allocato dal client in cui i dati seriali vengono copiati nel dispositivo seriale.

Blocco di stato di I/O

Il membro Information è impostato sul numero di byte trasferiti nel buffer di lettura del client.

Il membro Status è impostato su uno dei valori seguenti:

Valore di stato Descrizione
STATUS_SUCCESS La richiesta è stata completata correttamente.
STATUS_CANCELLED Un client ha annullato la richiesta. Serial annulla anche una richiesta se si verifica un errore del dispositivo e Serial è configurato per annullare una richiesta se si verifica un errore del dispositivo.
STATUS_DELETE_PENDING Seriale è in corso nel processo di rimozione del dispositivo.
STATUS_PENDING Seriale ha accodato la richiesta per l'elaborazione successiva.
STATUS_TIMEOUT Il tempo per completare la richiesta ha superato il valore totale di timeout o il valore di timeout dell'intervallo.

Operazione

Un client può usare eventi di timeout per terminare una richiesta di lettura. Si noti, tuttavia, che quando un dispositivo seriale viene aperto, le impostazioni di timeout per il dispositivo non sono definito. Un client in modalità kernel può usare un IOCTL_SERIAL_INTERNAL_BASIC_SETTINGS per impostare i parametri di timeout su zero (non vengono usati eventi di timeout). I client in modalità utente e in modalità kernel possono usare una richiesta di IOCTL_SERIAL_SET_TIMEOUTS per impostare i parametri di timeout.

Per altre informazioni sui timeout di lettura e scrittura, vedere Impostazione di timeout di lettura e scrittura per un dispositivo seriale.

IRP_MJ_SET_INFORMATION

La richiesta IRP_MJ_SET_INFORMATION imposta le informazioni end-of-file su un dispositivo seriale.

Quando inviato

Un client usa una richiesta di informazioni impostata per modificare la posizione finale corrente di un file aperto in un dispositivo seriale.

Parametri di input

Il membro Parameters.SetFile.FileInformationClass è impostato su FileEndOfFileInformation o FileAllocationInformation.

Parametri di output

Nessuno.

Blocco di stato di I/O

Se la richiesta ha esito positivo, il membro Information è impostato su zero.

Il membro Status è impostato su uno dei valori di stato seguenti:

Valore di stato Descrizione
STATUS_SUCCESS La richiesta è stata completata correttamente.
STATUS_CANCELLED Un client ha annullato la richiesta. Serial annulla anche una richiesta se si verifica un errore del dispositivo e Serial è configurato per annullare una richiesta se si verifica un errore del dispositivo.
STATUS_DELETE_PENDING Seriale è in corso nel processo di rimozione del dispositivo.
STATUS_INVALID_PARAMETER Le informazioni end-of-file specificate non sono supportate.
STATUS_PENDING Seriale ha accodato la richiesta per l'elaborazione successiva.

Operazione

Serial supporta le richieste di tipo FileEndOfFileInformation e FileAllocationInformation. Tuttavia, seriale non imposta effettivamente le informazioni sui file. La posizione end-of-file è sempre impostata su zero.

IRP_MJ_SYSTEM_CONTROL

La richiesta di IRP_MJ_SYSTEM_CONTROL supporta le richieste WMI.

Quando inviato

Un componente in modalità kernel WMI può inviare una richiesta di IRP_MJ_SYSTEM_CONTROL qualsiasi volta dopo la registrazione seriale come provider WMI per un dispositivo seriale. I provider di integrazione WMI vengono in genere inviati quando un consumer di dati in modalità utente ha richiesto dati WMI.

Parametri di input

Richiesta specifica

Parametri di output

Richiesta specifica

Blocco di stato di I/O

Per le richieste WMI, Serial imposta il campo Stato su uno dei valori seguenti:

Valore di stato Descrizione
STATUS_SUCCESS La richiesta è stata completata correttamente.
STATUS_BUFFER_TOO_SMALL Le dimensioni, in byte, del buffer di output sono inferiori alle dimensioni necessarie delle informazioni richieste.
STATUS_INSUFFICIENT_RESOURCES Esistono risorse di sistema insufficienti per salvare il nome della porta seriale.
STATUS_INVALID_DEVICE_REQUEST La richiesta non è valida.
STATUS_WMI_GUID_NOT_FOUND Il GUID WMI non è supportato.

Operazione

Seriale usa WmiSystemControl per gestire le richieste di controllo del sistema WMI. La serie registra i tipi seguenti di routine di callback della libreria WMI, che WmiSystemControl chiama per gestire le richieste WMI inviate a un dispositivo:

Seriale non supporta altre richieste di controllo di sistema. Per le richieste non WMI, seriale ignora il percorso dello stack corrente e invia la richiesta nello stack di dispositivi.

La serie registra il GUIDS WMI descritto nella tabella seguente.

Struttura dei dati associata a WMI seriale

SERIAL_PORT_WMI_NAME_GUID USHORT seguito da un WCSTR
SERIAL_PORT_WMI_COMM_GUID SERIAL_WMI_COMM_DATA
SERIAL_PORT_WMI_HW_GUID SERIAL_WMI_HW_DATA
SERIAL_PORT_WMI_PERF_GUID SERIAL_WMI_PERF_DATA
SERIAL_PORT_WMI_PROPERTIES_GUID WMI_SERIAL_PORT_PROPERTIES

Il nome WMI di un dispositivo seriale è il valore del valore di voce PortName nella chiave del Registro di sistema Plug and Play per il dispositivo.

IRP_MJ_WRITE

Una richiesta di IRP_MJ_WRITE trasferisce dati da un client a un dispositivo seriale.

Quando inviato

Un client usa una richiesta di scrittura ogni volta che scrive i dati in un dispositivo seriale.

Parametri di input

Il membro Parameters.Write.Length è impostato sul numero di byte da copiare da un buffer di scrittura allocato dal client a un dispositivo seriale.

Il membro AssociatedIrp.SystemBuffer punta a un buffer di scrittura allocato dal client da cui i dati seriali vengono copiati nel dispositivo seriale.

Parametri di output

Nessuno.

Blocco di stato di I/O

Il membro Information è impostato sul numero di byte effettivamente copiati dal buffer di scrittura del client nel dispositivo seriale.

Il membro Status è impostato su uno dei valori seguenti:

Valore di stato Descrizione
STATUS_SUCCESS La richiesta è stata completata correttamente.
STATUS_CANCELLED Un client ha annullato la richiesta. Serial annulla anche una richiesta se si verifica un errore del dispositivo e seriale è configurato per annullare una richiesta se si verifica un errore del dispositivo.
STATUS_DELETE_PENDING La serialità è in fase di rimozione del dispositivo.
STATUS_PENDING Seriale accodò la richiesta per un'elaborazione successiva.
STATUS_TIMEOUT È stato superato il tempo totale consentito per la richiesta di scrittura.

Operazione

Un client può usare eventi di timeout per terminare una richiesta di scrittura. Si noti, tuttavia, che quando un dispositivo seriale viene aperto, gli eventi di timeout impostati in un dispositivo non sono definiti. Un client in modalità kernel può usare un IOCTL_SERIAL_INTERNAL_BASIC_SETTINGS per impostare i parametri di timeout su zero (non vengono usati eventi di timeout) e una richiesta di IOCTL_SERIAL_SET_TIMEOUTS per impostare i parametri di timeout. Per altre informazioni sui timeout di lettura e scrittura, vedere Impostazione di timeout di lettura e scrittura per un dispositivo seriale.

Plug and Play IRP secondari

Regole per la gestione di power IRP

Guida alla progettazione del driver del controller seriale