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:
- IRP_MN_CANCEL_REMOVE_DEVICE
- IRP_MN_CANCEL_STOP_DEVICE
- IRP_MN_FILTER_RESOURCE_REQUIREMENTS
- IRP_MN_QUERY_CAPABILITIES
- IRP_MN_QUERY_DEVICE_RELATIONS
- IRP_MN_QUERY_ID
- IRP_MN_QUERY_PNP_DEVICE_STATE
- IRP_MN_QUERY_REMOVE_DEVICE
- IRP_MN_QUERY_RESOURCE_REQUIREMENTS
- IRP_MN_QUERY_STOP_DEVICE
- IRP_MN_REMOVE_DEVICE
- IRP_MN_START_DEVICE
- IRP_MN_STOP_DEVICE
- IRP_MN_SURPRISE_REMOVAL
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.