Função NtClose (ntifs.h)

A rotina NtClose fecha um identificador de objeto.

Sintaxe

__kernel_entry NTSYSCALLAPI NTSTATUS NtClose(
  [in] HANDLE Handle
);

Parâmetros

[in] Handle

Manipule para um objeto de qualquer tipo.

Valor retornado

O NtClose retorna STATUS_SUCCESS com êxito ou o código de erro NTSTATUS apropriado sobre falha. Em particular, ele retorna STATUS_INVALID_HANDLE se Handle não for um identificador válido ou STATUS_HANDLE_NOT_CLOSABLE se o thread de chamada não tiver permissão para fechar o identificador, ou seja, o identificador de objeto dito está protegido contra o fechamento de qualquer tentativa de instância do NtClose.

Um exemplo em que o último código NTSTATUS ocorre é quando uma chamada de ZwDuplicateObject foi invocada com OBJ_PROTECT_CLOSE passado para o argumento de parâmetro de atributos de identificador. O kernel garante que o identificador não possa ser fechado nesse caso.

Comentários

NtClose é uma rotina genérica que opera em qualquer tipo de objeto.

Fechar um identificador de objeto aberto faz com que o identificador se torne inválido. O sistema também diminui a contagem de identificadores do objeto e verifica se o objeto pode ser excluído. O sistema não exclui o objeto até que todas as alças do objeto sejam fechadas e nenhum ponteiro referenciado permaneça.

Um driver deve fechar cada identificador aberto assim que o identificador não for mais necessário. Os identificadores kernel, que são aqueles abertos por um thread do sistema ou especificando o sinalizador OBJ_KERNEL_HANDLE, só podem ser fechados quando o modo de processador anterior for KernelMode. Esse requisito se aplica tanto a threads do sistema quanto a rotinas de expedição para IRPs que foram emitidas no modo kernel. (Para obter mais informações sobre o modo de processador anterior, consulte ExGetPreviousMode.) Por exemplo, um identificador que NtCreateKey retorna a uma rotina DriverEntry não pode ser fechado posteriormente pelas mesmas rotinas de expedição do driver. Uma rotina driverEntry é executada em um processo de sistema, enquanto as rotinas de expedição geralmente são executadas no contexto do thread que emite a solicitação de E/S atual ou, para drivers de nível inferior, em um contexto de thread arbitrário.

Um identificador nãokernel só poderá ser fechado se uma das duas condições for atendida: o modo de processador anterior é KernelMode ou o thread de chamada tem permissão suficiente para fechar o identificador. Um exemplo deste último ocorre quando o thread de chamada é aquele que criou o identificador.

Os chamadores do NtClose não devem supor que essa rotina aguarde automaticamente a conclusão de toda a E/S antes do retorno.

Nota Se a chamada para essa função ocorrer no modo de usuário, você deverá usar o nome "NtClose" em vez de "ZwClose".
 
Para chamadas de drivers do modo kernel, as versões NtXxx e ZwXxx de uma rotina do Windows Native System Services podem se comportar de forma diferente na maneira como lidam e interpretam parâmetros de entrada. Para obter mais informações sobre a relação entre as versões NtXxx e ZwXxx de uma rotina, consulte Usando versões Nt e Zw das rotinas de serviços nativos do sistema.

Requisitos

   
Cliente mínimo com suporte Disponível a partir do Windows 2000.
Plataforma de Destino Universal
Cabeçalho ntifs.h (incluem Wdm.h, Ntddk.h, Ntifs.h)
Biblioteca NtosKrnl.lib
DLL NtosKrnl.exe
IRQL PASSIVE_LEVEL
Regras de conformidade DDI HwStorPortProhibitedDIs, IrqlZwPassive, PowerIrpDDis, ZwRegistryCreate, ZwRegistryCreate(storport), ZwRegistryOpen, ZwRegistryOpen(storport)

Confira também

Usando versões Nt e Zw das rotinas de serviços nativos do sistema

ZwCreateDirectoryObject

ZwCreateFile

ZwCreateKey

ZwOpenKey

ZwOpenSection