Função IoGetDeviceDirectory (wdm.h)
Retorna um identificador para um diretório no disco, no qual os drivers podem armazenar arquivos. Os arquivos nesse diretório se aplicam a uma instância de dispositivo específica.
Sintaxe
NTSTATUS IoGetDeviceDirectory(
[_In_] PDEVICE_OBJECT PhysicalDeviceObject,
[_In_] DEVICE_DIRECTORY_TYPE DirectoryType,
[_In_] ULONG Flags,
[_In_] PVOID Reserved,
[_Out_] PHANDLE DeviceDirectoryHandle
);
Parâmetros
[_In_] PhysicalDeviceObject
Um ponteiro para o objeto de dispositivo físico que está sendo consultado na pilha de dispositivo de uma instância de dispositivo específica. Não pode ser NULL.
[_In_] DirectoryType
Um valor de tipo _DEVICE_DIRECTORY_TYPE que indica o tipo de diretório solicitado.
[_In_] Flags
Deve ser 0.
[_In_] Reserved
Reservado. Precisa ser NULL.
[_Out_] DeviceDirectoryHandle
Um ponteiro para uma variável que recebe um HANDLE para o diretório do dispositivo solicitado. O chamador não deve passar NULL.
Retornar valor
Retorna um valor NTSTATUS apropriado. Os valores possíveis incluem:
Código do erro | Descrição |
---|---|
STATUS_SUCCESS | A chamada abriu com êxito um identificador para o diretório do dispositivo solicitado. |
STATUS_INVALID_PARAMETER | Um valor de entrada para essa função é inválido. Por exemplo, PhysicalDeviceObject ou DeviceDirectoryHandle é NULL; Sinalizadores não são 0; Reservado não é NULL. |
Comentários
Se IoGetDeviceDirectory for chamado antes de os discos e volumes necessários terem sido iniciados, a função não abrirá um identificador e retornará um erro.
Os drivers normalmente usam ZwOpenFile e ZwCreateFile para acessar/criar arquivos. Um dos parâmetros para essas funções é uma estrutura OBJECT_ATTRIBUTES , que contém o nome do objeto e um diretório raiz. Se o diretório raiz for NULL, o nome do objeto deverá ser um caminho totalmente qualificado. No entanto, se você fornecer um identificador para o diretório raiz, o nome do objeto deverá ser relativo ao objeto (no caso de arquivos, o diretório), que o identificador representa.
Depois que a chamada IoGetDeviceDirectory for bem-sucedida, use o HANDLE recebido como um diretório raiz no OBJECT_ATTRIBUTES que você está passando para um ZwOpenFile e ZwCreateFile.
O driver deve chamar ZwClose para fechar o identificador recebido quando o acesso não for mais necessário.
Os chamadores de IoGetDeviceDirectory devem estar em execução em IRQL = PASSIVE_LEVEL no contexto de um thread do sistema.
Requisitos
Requisito | Valor |
---|---|
Cliente mínimo com suporte | Windows 10, versão 1803 |
Cabeçalho | wdm.h |
Biblioteca | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | PASSIVE_LEVEL |