IRP_MJ_LOCK_CONTROL (fs e driver di filtro)

Data di invio

I/O Manager, altri componenti del sistema operativo e altri driver in modalità kernel inviano richieste di IRP_MJ_LOCK_CONTROL.

Operazione: driver del file system

Il driver del file system deve estrarre e decodificare l'oggetto file per determinare se l'oggetto dispositivo di destinazione è l'oggetto dispositivo di controllo del file system. In tal caso, il driver del file system deve completare l'IRP in base alle esigenze senza elaborare la richiesta di blocco.

In caso contrario, se la richiesta è stata eseguita su un handle che rappresenta un file utente aperto, il driver del file system deve eseguire l'operazione indicata dal codice della funzione secondaria e completare l'IRP. In caso contrario, il driver deve avere esito negativo sull'IRP.

Di seguito sono riportati i codici di funzione secondaria validi:

Codice Descrizione
IRP_MN_LOCK Indica una richiesta di blocco di intervallo di byte, possibilmente per conto di un'applicazione in modalità utente che ha chiamato la funzione LockFile Win32.
IRP_MN_UNLOCK_ALL Indica una richiesta di rilasciare tutti i blocchi di intervallo di byte per un file, in genere perché l'ultimo handle in sospeso per un oggetto file viene chiuso.
IRP_MN_UNLOCK_ALL_BY_KEY Indica una richiesta di rilasciare tutti i blocchi di intervallo di byte con un valore di chiave specificato.
IRP_MN_UNLOCK_SINGLE Indica una richiesta di rilascio di un singolo blocco di intervallo di byte, possibilmente per conto di un'applicazione in modalità utente che ha chiamato la funzione UnlockFile Win32.

Operazione: driver di filtro del file system legacy

I driver di filtro del file system devono passare l'IRP al driver inferiore successivo nello stack dopo aver eseguito qualsiasi elaborazione necessaria.

Parametri

Un file system o un driver di filtro chiama IoGetCurrentIrpStackLocation con l'IRP specificato per ottenere un puntatore alla propria posizione dello stack nell'IRP, illustrato nell'elenco seguente come IrpSp. L'IRP viene visualizzato come Irp. Il driver può usare le informazioni impostate nei membri seguenti dell'IRP e del percorso dello stack IRP nell'elaborazione di una richiesta di controllo di blocco:

  • DeviceObject è un puntatore all'oggetto dispositivo di destinazione.

  • Irp->IoStatus punta a una struttura IO_STATUS_BLOCK che riceve lo stato di completamento finale e le informazioni sull'operazione richiesta.

  • IrpSp->FileObject punta all'oggetto file associato a DeviceObject.

    Il parametro IrpSp-FileObject> contiene un puntatore al campo RelatedFileObject, che è anche una struttura FILE_OBJECT. Il campo RelatedFileObject della struttura FILE_OBJECT non è valido durante l'elaborazione di IRP_MJ_LOCK_CONTROL e non deve essere usato.

  • IrpSp->I flag possono essere uno o più dei valori seguenti:

Contrassegno Significato
SL_EXCLUSIVE_LOCK Se questo flag è impostato, viene richiesto un blocco di intervallo di byte esclusivo. In caso contrario, viene richiesto un blocco condiviso.
SL_FAIL_IMMEDIATELY Se questo flag è impostato, la richiesta di blocco deve avere esito negativo se non può essere concessa immediatamente.
  • IrpSp->MajorFunction è impostato su IRP_MJ_LOCK_CONTROL.

  • IrpSp->MinorFunction è impostato su uno dei valori seguenti:

    • IRP_MN_LOCK
    • IRP_MN_UNLOCK_ALL
    • IRP_MN_UNLOCK_ALL_BY_KEY
    • IRP_MN_UNLOCK_SINGLE
  • IrpSp->Parameters.LockControl.ByteOffset è l'offset di byte iniziale all'interno del file dell'intervallo di byte da bloccare o sbloccare.

  • IrpSp->Parameters.LockControl.Key è la chiave per il blocco dell'intervallo di byte.

  • IrpSp->Parameters.LockControl.Length è la lunghezza, espressa in byte, dell'intervallo di byte da bloccare o sbloccare.

Vedi anche

FltProcessFileLock

FsRtlProcessFileLock

IO_STACK_LOCATION

IO_STATUS_BLOCK

IoGetCurrentIrpStackLocation

IRP