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