Funzione IoSkipCurrentIrpStackLocation (wdm.h)

La macro IoSkipCurrentIrpStackLocation modifica il puntatore IO_STACK_LOCATION matrice del sistema, in modo che quando il driver corrente chiama il driver inferiore successivo, tale driver riceve la stessa struttura IO_STACK_LOCATION ricevuta dal driver corrente.

Sintassi

void IoSkipCurrentIrpStackLocation(
  [in, out] PIRP Irp
);

Parametri

[in, out] Irp

Puntatore all'IRP.

Valore restituito

nessuno

Osservazioni

Quando il driver invia un IRP al driver inferiore successivo, il driver può chiamare IoSkipCurrentIrpStackLocation se non si intende fornire una routine IoCompletion (l'indirizzo di cui è archiviato nella struttura di IO_STACK_LOCATION del driver). Se chiami IoSkipCurrentIrpStackLocation prima di chiamare IoCallDriver, il driver successivo riceve lo stesso IO_STACK_LOCATION ricevuto dal driver.

Se si intende fornire una routine IoCompletion per l'IRP, il driver deve chiamare IoCopyCurrentIrpStackLocationToNext anziché IoSkipCurrentIrpStackLocation. Se un driver scritto male commette l'errore di chiamare IoSkipCurrentIrpStackLocation e quindi impostare una routine di completamento, questo driver potrebbe sovrascrivere una routine di completamento impostata dal driver sopra di esso.

Se il driver ha eseguito la penna di un IRP, il driver non deve chiamare IoSkipCurrentIrpStackLocation prima di passare l'IRP al driver inferiore successivo.If the driver has pended an IRP, the driver should not be calling IoSkipCurrentIrpStackLocation before it pass the IRP to the next lower driver. Se il driver chiama IoSkipCurrentIrpStackLocation su un IRP con penna prima di passarlo al driver inferiore successivo, il flag SL_PENDING_RETURNED è ancora impostato nel membro Control della posizione dello stack di I/O per il driver successivo. Poiché il driver successivo è proprietario della posizione dello stack e potrebbe modificarlo, potrebbe potenzialmente cancellare il flag in sospeso. Questa situazione potrebbe causare il completamento di un controllo di bug da parte del sistema operativo o dell'elaborazione di IRP.

Al contrario, un driver che ha eseguito la penna di un IRP deve chiamare IoCopyCurrentIrpStackLocationToNext per configurare una nuova posizione dello stack per il driver inferiore successivo prima di chiamare IoCallDriver.

Se il driver chiama IoSkipCurrentIrpStackLocation, prestare attenzione a non modificare la struttura IO_STACK_LOCATION in modo che possa influire involontariamente sul driver inferiore o sul comportamento del sistema rispetto a tale driver. Alcuni esempi includono la modifica dell'unione dei parametri della struttura IO_STACK_LOCATION o la chiamata di IoMarkIrpPending.

Requisiti

Requisito Valore
Client minimo supportato Windows 2000
Intestazione wdm.h
IRQL Qualsiasi livello