Compartilhar via


Função ZwClose (wdm.h)

A rotina ZwClose fecha um identificador de objeto.

Sintaxe

NTSYSAPI NTSTATUS ZwClose(
  [in] HANDLE Handle
);

Parâmetros

[in] Handle

Identificador para um objeto de qualquer tipo.

Retornar valor

ZwClose retorna STATUS_SUCCESS em caso de êxito ou o código de erro NTSTATUS apropriado em caso de falha. Em particular, ele retornará 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.

Comentários

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

Fechar um identificador de objeto aberto faz com que esse 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. Na verdade, o sistema não exclui o objeto até que todos os identificadores do objeto sejam fechados e nenhum ponteiro referenciado permaneça.

Um driver deve fechar todas as alças que abrir assim que o identificador não for mais necessário. Identificadores de 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 é KernelMode. Esse requisito se aplica tanto a threads do sistema quanto a rotinas de expedição para IRPs que foram emitidos do modo kernel. (Para obter mais informações sobre o modo de processador anterior, consulte ExGetPreviousMode.) Por exemplo, um identificador que ZwCreateKey retorna a uma rotina DriverEntry não pode ser fechado posteriormente pelas rotinas de expedição do mesmo driver. Uma rotina DriverEntry é executada em um processo do 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ão kernel 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 do último ocorre quando o thread de chamada é aquele que criou o identificador.

Os chamadores de ZwClose não devem assumir que essa rotina espera automaticamente que todas as E/S sejam concluídas antes do retorno.

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 de 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 Using Nt and Zw Versions of the Native System Services Routines.

Requisitos

Requisito Valor
Plataforma de Destino Universal
Cabeçalho wdm.h (include Wdm.h, Ntddk.h, Ntifs.h)
Biblioteca NtosKrnl.lib
DLL NtosKrnl.exe
IRQL PASSIVE_LEVEL
Regras de conformidade da DDI HwStorPortProhibitedDIs(storport), IrqlZwPassive(wdm), PowerIrpDDis(wdm), ZwRegistryCreate(storport), ZwRegistryCreate(storport), ZwRegistryCreate(wdm), ZwRegistryOpen(storport), ZwRegistryOpen(storport), ZwRegistryOpen(wdm)

Confira também

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

ZwCreateDirectoryObject

ZwCreateFile

ZwCreateKey

ZwOpenKey

ZwOpenSection