Funzione FsRtlOplockFsctrl (ntifs.h)
FsRtlOplockFsctrl esegue varie operazioni di blocco opportunistico (oplock) per conto di un file system o di un driver di filtro.
Sintassi
NTSTATUS FsRtlOplockFsctrl(
[in] POPLOCK Oplock,
[in] PIRP Irp,
[in] ULONG OpenCount
);
Parametri
[in] Oplock
Puntatore 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 di 2, R o RH oplock indica che nel file sono presenti blocchi di intervallo di byte. Per informazioni sui tipi di oplock, vedere Panoramica di Oplock.
Valore restituito
FsRtlOplockFsctrl 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 FSCTL, il significato di STATUS_SUCCESS dipende dal codice FSCTL. Per altre informazioni, vedere le pagine di riferimento per i codici FSCTL elencati nella sezione Osservazioni seguenti. |
STATUS_CANCELLED | L'operazione di I/O è stata annullata. STATUS_CANCELLED è un codice di errore. |
STATUS_INVALID_PARAMETER | Il codice FSCTL per l'operazione di I/O non è uno dei valori validi elencati nella sezione Osservazioni seguenti. STATUS_INVALID_PARAMETER è un codice di errore. |
STATUS_OPLOCK_NOT_GRANTED | Impossibile concedere il blocco. STATUS_OPLOCK_NOT_GRANTED è un codice di errore. |
STATUS_PENDING | Usato solo per le operazioni FSCTL. Il significato di STATUS_PENDING dipende dal codice FSCTL. Per altre informazioni, vedere le pagine di riferimento per i codici FSCTL elencati nella sezione Osservazioni seguenti. STATUS_PENDING è un codice riuscito. |
STATUS_CANNOT_BREAK_OPLOCK | Impossibile concedere un nuovo oplock. L'IRP è una richiesta di IRP_MJ_CREATE e FILE_OPEN_REQUIRING_OPLOCK è stata specificata nel parametro delle opzioni di creazione per l'operazione. STATUS_CANNOT_BREAK_OPLOCK è un codice riuscito. |
Commenti
I file system e i driver di filtro legacy chiamano FsRtlOplockFsctrl per eseguire varie operazioni di oplock per un'operazione di I/O di creazione o file system. I minifilter devono chiamare FltOplockFsctrl anziché FsRtlOplockFsctrl.
L'IRP indicato dal 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 FsRtlOplockFsctrl con uno dei codici FSCTL seguenti, 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
Per informazioni dettagliate su questi LOCKTLS e sui blocchi opportunistici in generale, vedere la documentazione Microsoft Windows SDK.
Se l'IRP è una richiesta di IRP_MJ_CREATE , è possibile usare FsRtlOplockFsctrl per richiedere un oplock di filtro in sospeso se tutte le condizioni seguenti sono vere:
- 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, FsRtlOplockFsctrl restituisce STATUS_SUCCESS. Per altre informazioni sui parametri di creazione, 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 di Oplock .
Requisiti
Requisito | Valore |
---|---|
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