Controllo dello stato oplock di un'operazione di IRP_MJ_CREATE
Di seguito viene applicato solo quando viene aperto un flusso esistente di un file, ovvero i flussi appena creati non possono avere oplock preesistenti su di essi.
Nota Quando si elabora IRP_MJ_CREATE per qualsiasi oplock, se l'accesso desiderato non contiene nulla di diverso da FILE_READ_ATTRIBUTES, FILE_WRITE_ATTRIBUTES o SYNC, il blocco non interrompe a meno che non venga specificato FILE_RESERVE_OPFILTER. Se la creazione ha esito positivo, specificare FILE_RESERVE_OPFILTER comporta sempre un'interruzione di oplock. Per brevità e semplicità, la tabella seguente omette la precedente, poiché si applica a tutti gli oplock.
Tipo di richiesta | Condizioni |
---|---|
Livello 1 |
Interrotto su IRP_MJ_CREATE quando:
|
Se il blocco è interrotto:
|
|
Livello 2 |
Interrotto su IRP_MJ_CREATE quando:
|
Se il blocco è interrotto:
|
|
Batch |
Interrotto su IRP_MJ_CREATE quando:
|
Se il blocco è interrotto:
|
|
Filtra |
Interrotto su IRP_MJ_CREATE quando:
|
Se il blocco è interrotto:
|
|
Lettura |
Interrotto su IRP_MJ_CREATE quando:
|
Se il blocco è interrotto:
|
|
Read-Handle |
Interrotto su IRP_MJ_CREATE quando:
|
Se il blocco è interrotto:
|
|
Read-Write |
Interrotto su IRP_MJ_CREATE quando:
|
Se il blocco è interrotto:
|
|
Handle di lettura-scrittura |
Interrotto su IRP_MJ_CREATE quando:
|
Se il blocco è interrotto:
|
Il file system esegue controlli aggiuntivi per gli oplock Batch e Filter (anziché per il pacchetto oplock stesso) durante l'elaborazione di un'operazione di IRP_MJ_CREATE, che influisce sul fatto che il file system chiede al pacchetto oplock di eseguire l'elaborazione di interruzioni di oplock. Si tratta di un caso in cui le operazioni su un flusso di dati possono influire sugli oplock su altri flussi di dati dello stesso file, ovvero gli ultimi due elementi dell'elenco dei criteri seguenti. Se vengono soddisfatti uno o più dei seguenti criteri, il file system invia una richiesta al pacchetto oplock per eseguire l'elaborazione dell'interruzione di oplock:
Richiedere un'interruzione se si tratta di una query di rete aperta e è presente una transazione KTM . In caso contrario, non richiedere un'interruzione nella query di rete aperta.
Se un'operazione SUPERSEDE, OVERWRITE o OVERWRITE_IF viene eseguita in un flusso di dati alternativo e FILE_SHARE_DELETE non è specificata e nel flusso di dati primario è presente un'operazione batch o filtro, richiedere un'interruzione dell'oplock Batch o Filter nel flusso di dati primario.
Se viene eseguita un'operazione SUPERSEDE, OVERWRITE o OVERWRITE_IF nel flusso di dati primario e l'accesso DELETE è stato richiesto e sono presenti oplock batch o filtro in qualsiasi flusso di dati alternativo, richiedere un'interruzione degli oplock Batch o Filter su tutti i flussi di dati alternativi che li hanno.
Quando il file system decide di chiedere al pacchetto oplock di eseguire l'elaborazione di interruzioni di oplock, si applicano le regole disposte nella tabella precedente.
Il controllo per interrompere gli oplock Batch e Filter si verifica prima che vengano effettuati i controlli di accesso alla condivisione. Ciò significa che l'oplock batch o filtro viene interrotto anche se la richiesta aperta ha esito negativo a causa di una violazione della condivisione.