Funzione NtOpenFile (winternl.h)
Apre un file, un dispositivo, una directory o un volume esistenti e restituisce un handle per l'oggetto file.
Questa funzione equivale alla funzione ZwOpenFile documentata in Windows Driver Kit (WDK).
__kernel_entry NTSTATUS NtOpenFile(
[out] PHANDLE FileHandle,
[in] ACCESS_MASK DesiredAccess,
[in] POBJECT_ATTRIBUTES ObjectAttributes,
[out] PIO_STATUS_BLOCK IoStatusBlock,
[in] ULONG ShareAccess,
[in] ULONG OpenOptions
);
[out] FileHandle
Puntatore a un handle per il file aperto. Il driver deve chiudere l'handle con ZwClose una volta che l'handle non è più in uso.
[in] DesiredAccess
Valore ACCESS_MASK che esprime i tipi di accesso ai file desiderati dal chiamante. Per informazioni sui tipi di accesso che possono essere specificati, vedere ZwCreateFile in WDK.
[in] ObjectAttributes
Puntatore a una struttura che un chiamante inizializza con InitializeObjectAttributes. Se il chiamante non è in esecuzione nel contesto del processo di sistema, deve impostare l'attributo OBJ_KERNEL_HANDLE per ObjectAttributes. Per altre informazioni sulla specifica degli attributi dell'oggetto, vedere il parametro CreateOptions di ZwCreateFile in WDK.
[out] IoStatusBlock
Puntatore a una struttura che contiene informazioni sull'operazione richiesta e sullo stato di completamento finale.
[in] ShareAccess
Tipo di accesso di condivisione per il file. Per altre informazioni, vedere ZwCreateFile in WDK.
[in] OpenOptions
Le opzioni da applicare quando si apre il file. Per altre informazioni, vedere ZwCreateFile in WDK.
NtOpenFile restituisce STATUS_SUCCESS o uno stato di errore appropriato. Se restituisce uno stato di errore, il chiamante può trovare informazioni aggiuntive sulla causa dell'errore controllando IoStatusBlock.
Le routine del driver eseguite in un contesto di processo diverso da quello del processo di sistema devono impostare l'attributo OBJ_KERNEL_HANDLE per il parametro ObjectAttributes di ZwOpenFile. Ciò limita l'uso dell'handle restituito da ZwOpenFile ai processi in esecuzione solo in modalità kernel. In caso contrario, l'handle può essere accessibile dal processo nel cui contesto è in esecuzione il driver. I driver possono chiamare InitializeObjectAttributes per impostare l'attributo OBJ_KERNEL_HANDLE come indicato di seguito.
InitializeObjectAttributes(&ObjectAddributes, NULL, OBJ_KERNEL_HANDLE, NULL, NULL);
I chiamanti di ZwCreateFile devono essere in esecuzione in IRQL = PASSIVE_LEVEL.
Si noti che il file di intestazione WDK Ntdef.h è necessario per molte definizioni costanti e la macro InitializeObjectAttributes . È anche possibile usare le funzioni LoadLibrary e GetProcAddress per collegare dinamicamente a Ntdll.dll.
Requisito | Valore |
---|---|
Piattaforma di destinazione | Windows |
Intestazione | winternl.h |
Libreria | ntdll.lib |
DLL | ntdll.dll |