Condividi tramite


IO_CSQ_INSERT_IRP_EX funzione di callback (wdm.h)

La routine CsqInsertIrpEx viene usata dal sistema per inserire un'IRP in una coda IRP implementata dal driver e annullata.

Sintassi

IO_CSQ_INSERT_IRP_EX IoCsqInsertIrpEx;

NTSTATUS IoCsqInsertIrpEx(
  [in] _IO_CSQ *Csq,
  [in] PIRP Irp,
  [in] PVOID InsertContext
)
{...}

Parametri

[in] Csq

Puntatore alla struttura di IO_CSQ per la coda IRP annullata.

[in] Irp

Puntatore all'IRP da inserire nella coda IRP.

[in] InsertContext

Puntatore al contesto definito dal driver per l'operazione di inserimento.

Valore restituito

CsqInsertIrpEx restituisce STATUS_SUCCESS se l'IRP è stato inserito correttamente o il codice di errore appropriato in caso di errore.

Commenti

Il driver specifica la routine CsqInsertIrpEx per una coda IRP annullata quando inizializza la struttura di IO_CSQ della coda. Il driver specifica la routine come parametro CsqInsertIrp di IoCsqInitializeEx quando inizializzaIO_CSQ. Per altre informazioni, vedere Code IRP cancel-safe.

La routine IoCsqInsertIrpEx chiama CsqInsertIrpEx per inserire l'IRP nella coda. Il parametro InsertContext di IoCsqInsertIrpEx viene passato come parametro InsertContext di CsqInsertIrpEx.

Esempio

Per definire una routine di callback CsqInsertIrpEx , è prima necessario fornire una dichiarazione di funzione che identifica il tipo di routine di callback che si sta definendo. Windows fornisce un set di tipi di funzione di callback per i driver. La dichiarazione di una funzione usando i tipi di funzione callback consente l'analisi del codice per i driver, il verifica driver statico (SDV) e altri strumenti di verifica trovano errori ed è un requisito per la scrittura di driver per il sistema operativo Windows.

Ad esempio, per definire una routine di callback CsqInsertIrpEx denominata MyCsqInsertIrpEx, usare il tipo di IO_CSQ_INSERT_IRP_EX come illustrato nell'esempio di codice seguente:

IO_CSQ_INSERT_IRP_EX MyCsqInsertIrpEx;

Implementare quindi la routine di callback come indicato di seguito:

_Use_decl_annotations_
NTSTATUS
 MyCsqInsertIrpEx(
    struct _IO_CSQ  *Csq,
    PIRP  Irp,
    PVOID  InsertContext
    )
  {
      // Function body
  }

Il tipo di funzione IO_CSQ_INSERT_IRP_EX è definito nel file di intestazione Wdm.h. Per identificare in modo più accurato gli errori quando si eseguono gli strumenti di analisi del codice, assicurarsi di aggiungere l'annotazione _Use_decl_annotations_ alla definizione della funzione. L'annotazione _Use_decl_annotations_ garantisce che vengano usate le annotazioni applicate al tipo di funzione IO_CSQ_INSERT_IRP_EX nel file di intestazione. Per altre informazioni sui requisiti per le dichiarazioni di funzione, vedere Dichiarazione di funzioni tramite tipi di ruolo per i driver WDM. Per informazioni su _Use_decl_annotations_, vedere Annotazione del comportamento della funzione.

Requisiti

Requisito Valore
Piattaforma di destinazione Desktop
Intestazione wdm.h (include Wdm.h, Ntddk.h, Ntifs.h)

Vedi anche

CsqAcquireLock

CsqCompleteCanceledIrp

CsqInsertIrp

CsqPeekNextIrp

CsqReleaseLock

CsqRemoveIrp

IO_CSQ

IoCsqInitialize

IoCsqInitializeEx

IoCsqInsertIrp

IoCsqInsertIrpEx

IoCsqRemoveIrp

IoCsqRemoveNextIrp