Condividi tramite


Funzione IoSkipCurrentIrpStackLocation (wdm.h)

La macro IoSkipCurrentIrpStackLocation modifica il puntatore di matrice IO_STACK_LOCATION 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 del quale è archiviato nella struttura IO_STACK_LOCATION del driver). Se si chiama IoSkipCurrentIrpStackLocation prima di chiamare IoCallDriver, il driver inferiore 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 impostando una routine di completamento, questo driver potrebbe sovrascrivere una routine di completamento impostata dal driver sopra di esso.

Se il driver ha pennato un IRP, il driver non deve chiamare IoSkipCurrentIrpStackLocation prima di passare l'IRP al driver inferiore successivo. Se il driver chiama IoSkipCurrentIrpStackLocation su un IRP con penna prima di passarlo al driver inferiore successivo, il flag SL_PENDING_RETURNED viene ancora impostato nel Controllo membro 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 che il sistema operativo eselabori un controllo di bug o che l'elaborazione dell'IRP non venga mai completata.

Al contrario, un driver con penna 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 da influire involontariamente sul driver inferiore o sul comportamento del sistema rispetto a tale driver. Alcuni esempi includono la modifica dell'unione parametri della struttura di IO_STACK_LOCATION o la chiamata di IoMarkIrpPending.

Fabbisogno

Requisito Valore
client minimo supportato Windows 2000
intestazione wdm.h
IRQL Qualsiasi livello