Funzione FsRtlOplockFsctrlEx (ntifs.h)
La routine FsRtlOplockFsctrlEx esegue varie operazioni di blocco opportunistico (oplock) per conto di un file system o di un driver di filtro.
Sintassi
NTSTATUS FsRtlOplockFsctrlEx(
[in] POPLOCK Oplock,
[in] PIRP Irp,
[in] ULONG OpenCount,
[in] ULONG Flags
);
Parametri
[in] Oplock
Puntatore a oplock opaco per il file. Questo puntatore deve essere stato inizializzato da una chiamata precedente a FsRtlInitializeOplock.
[in] Irp
Puntatore all'IRP per l'operazione di I/O. Questo parametro è obbligatorio e non può essere NULL.
[in] OpenCount
Numero di handle utente per il file, se viene richiesto un oplock esclusivo. L'impostazione di un valore diverso da zero per una richiesta oplock di livello 2, R o RH indica che nel file sono presenti blocchi di intervallo di byte. Per informazioni sui tipi di oplock, vedere Panoramica di Oplock.
[in] Flags
Maschera di bit per le operazioni di oplock associate. Un file system o un driver di filtro imposta i bit per specificare il comportamento di FsRtlOplockFsctrlEx. Questo parametro include le opzioni seguenti:
Contrassegno | Significato |
---|---|
OPLOCK_FSCTRL_FLAG_ALL_KEYS_MATCH (0x00000001) | Il file system ha verificato che tutte le chiavi oplock in qualsiasi handle aperto corrispondano. Specificando questo flag, si consente al pacchetto oplock di concedere un oplock di livello RW o RWH quando sono presenti più handle aperti per il file. Per altre informazioni sui tipi di oplock, vedere Panoramica di Oplock. |
Valore restituito
FsRtlOplockFsctrlEx restituisce uno dei valori NTSTATUS seguenti:
Codice restituito | Descrizione |
---|---|
STATUS_SUCCESS | Per una richiesta di IRP_MJ_CREATE, STATUS_SUCCESS indica che è stato concesso l'oplock del filtro richiesto. Per un'operazione MDFTL, il significato di STATUS_SUCCESS dipende dal codice MDFTL. Per altre informazioni, vedere le pagine di riferimento per i codici MDFTL elencati nella sezione Osservazioni seguente. |
STATUS_CANCELLED | L'operazione di I/O è stata annullata. STATUS_CANCELLED è un codice di errore. |
STATUS_INVALID_PARAMETER | Il codice MDFTL per l'operazione di I/O non è uno dei valori validi elencati nella sezione Osservazioni seguente. STATUS_INVALID_PARAMETER è un codice di errore. |
STATUS_OPLOCK_NOT_GRANTED | Impossibile concedere l'oplock. STATUS_OPLOCK_NOT_GRANTED è un codice di errore. |
STATUS_PENDING | Utilizzato solo per le operazioni MDFTL. Il significato di STATUS_PENDING dipende dal codice MDFTL. Per altre informazioni, vedere le pagine di riferimento per i codici MDFTL elencati nella sezione Osservazioni seguente. STATUS_PENDING è un codice riuscito. |
STATUS_CANNOT_BREAK_OPLOCK | Non è stato possibile concedere un nuovo oplock. L'IRP è una richiesta IRP_MJ_CREATE e FILE_OPEN_REQUIRING_OPLOCK è stato specificato nel parametro di creazione delle opzioni per l'operazione. STATUS_CANNOT_BREAK_OPLOCK è un codice riuscito. |
Commenti
I file system e i driver di filtro legacy chiamano FsRtlOplockFsctrlEx per eseguire varie operazioni di oplock per un'operazione di I/O di controllo di creazione o file system. I minifiltri devono chiamare FltOplockFsctrlEx anziché FsRtlOplockFsctrlEx.
L'IRP a cui punta il parametro Irp deve essere un'operazione di IRP valida per un'operazione di IRP_MJ_FILE_SYSTEM_CONTROL o di IRP_MJ_CREATE .
Se L'IRP è una richiesta di IRP_MJ_FILE_SYSTEM_CONTROL, è possibile usare FsRtlOplockFsctrlEx con uno dei codici FRAMEWORKTL seguenti, che viene impostato in IrpSp-Parameters.FileSystemControl.FsControlCode>:
- FSCTL_OPBATCH_ACK_CLOSE_PENDING
- FSCTL_OPLOCK_BREAK_ACK_NO_2
- FSCTL_OPLOCK_BREAK_ACKNOWLEDGE
- FSCTL_OPLOCK_BREAK_NOTIFY
- FSCTL_REQUEST_BATCH_OPLOCK
- FSCTL_REQUEST_FILTER_OPLOCK
- FSCTL_REQUEST_OPLOCK_LEVEL_1
- FSCTL_REQUEST_OPLOCK_LEVEL_2
- FSCTL_REQUEST_OPLOCK
Per altre informazioni su questi TAGTLS e sui blocchi opportunistici in generale, vedere la documentazione di Microsoft Windows SDK.
Se L'IRP è una richiesta di IRP_MJ_CREATE, è possibile usare FsRtlOplockFsctrlEx per richiedere un oplock di filtro in sospeso se sono soddisfatte tutte le condizioni seguenti:
- Il valore del parametro OpenCount deve essere 1.
- Il valore del parametro DesiredAccess per la richiesta di IRP_MJ_CREATE deve essere FILE_READ_ATTRIBUTES.
- Il valore del parametro ShareAccess per la richiesta di IRP_MJ_CREATE deve essere FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE.
Se viene concessa la richiesta di un oplock di filtro in sospeso, FsRtlOplockFsctrlEx restituisce STATUS_SUCCESS. Per altre informazioni sulla creazione di parametri, vedere la voce di riferimento per IRP_MJ_CREATE.
I filtri e i file system che chiamano questa funzione devono sincronizzare le chiamate nel pacchetto oplock fornito dal sistema. Per altre informazioni, vedere Sincronizzazione oplock .
Requisiti
Requisito | Valore |
---|---|
Client minimo supportato | La routine FsRtlOplockFsctrlEx è disponibile a partire da Windows 7. |
Piattaforma di destinazione | Universale |
Intestazione | ntifs.h (include Ntifs.h) |
Libreria | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | <= APC_LEVEL |
Vedi anche
FSCTL_OPBATCH_ACK_CLOSE_PENDING