Condividi tramite


Macro IoInitializeRemoveLock (wdm.h)

La routine IoInitializeRemoveLock inizializza un blocco di rimozione per un oggetto dispositivo.

Sintassi

void IoInitializeRemoveLock(
  [in]  Lock,
  [in]  Tag,
  [in]  Maxmin,
  [in]  HighWater
);

Parametri

[in] Lock

Puntatore a una struttura fornita dal chiamante IO_REMOVE_LOCK che questa routine inizializza con informazioni sul blocco, inclusi un contatore e un evento di sincronizzazione. Un writer di driver deve allocare questa struttura come parte dell'estensione del dispositivo dell'oggetto dispositivo.

[in] Tag

Specifica un tag per identificare l'autore del blocco. I writer di driver usano in genere una stringa di 4 caratteri, specificata in ordine inverso, come i tag usati per ExAllocatePoolWithTag.

Il sistema di I/O usa questo parametro se Driver Verifier è abilitato. Il chiamante deve sempre fornire un valore di tag diverso da zero per questo parametro.

[in] Maxmin

Specifica il numero massimo di minuti che deve essere mantenuto questo blocco. Un valore pari a zero indica che non esiste alcun limite. Questo valore viene in genere usato durante il debug per identificare una routine del driver che contiene il blocco più lungo del previsto.

Il sistema di I/O usa questo parametro se Driver Verifier è abilitato.

[in] HighWater

Specifica il numero massimo di acquisizioni in sospeso consentite nel blocco. Usare 0 per specificare nessun valore massimo. HighWatermark deve essere <= 0x7FFFFFFF.

Il sistema di I/O usa questo parametro se Driver Verifier è abilitato.

Valore restituito

nessuno

Osservazioni

Un driver può usare un blocco di rimozione per tenere traccia delle operazioni di I/O in sospeso in un dispositivo e determinare quando il driver può eliminare l'oggetto dispositivo in risposta a una richiesta di IRP_MN_REMOVE_DEVICE .

Prima di chiamare IoInitializeRemoveLock, un driver deve allocare una struttura IO_REMOVE_LOCK nella relativa estensione del dispositivo. Un driver chiama in genere IoInitializeRemoveLock nella routine AddDevice , quando il driver inizializza il resto dell'estensione del dispositivo per un oggetto dispositivo.

Dopo la restituzione della routine IoReleaseRemoveLockAndWait , il driver deve considerare il dispositivo in uno stato in cui è pronto per essere rimosso e non può eseguire operazioni di I/O. Pertanto, il driver non deve chiamare IoInitializeRemoveLock per inizializzare nuovamente il blocco di rimozione. La violazione di questa regola mentre il driver viene verificato da Driver Verifier genererà un controllo di bug.

Poiché il driver archivia la struttura IO_REMOVE_LOCK nell'estensione del dispositivo di un oggetto dispositivo, il blocco di rimozione viene eliminato quando il driver elimina l'estensione del dispositivo durante l'elaborazione di una richiesta di IRP_MN_REMOVE_DEVICE .

Per altre informazioni, vedere Using Remove Locks.For more information, see Using Remove Locks.

Requisiti

Requisito Valore
Client minimo supportato Disponibile a partire da Windows 2000.
Piattaforma di destinazione Desktop
Intestazione wdm.h (include Wdm.h, Ntddk.h, Ntifs.h)
Libreria NtosKrnl.lib
DLL NtosKrnl.exe
IRQL PASSIVE_LEVEL

Vedi anche

IoAcquireRemoveLock

IoInitializeRemoveLock

IoReleaseRemoveLock

IoReleaseRemoveLockAndWait