Função IoCreateDevice (wdm.h)
A rotina IoCreateDevice cria um objeto de dispositivo para uso por um driver.
Sintaxe
NTSTATUS IoCreateDevice(
[in] PDRIVER_OBJECT DriverObject,
[in] ULONG DeviceExtensionSize,
[in, optional] PUNICODE_STRING DeviceName,
[in] DEVICE_TYPE DeviceType,
[in] ULONG DeviceCharacteristics,
[in] BOOLEAN Exclusive,
[out] PDEVICE_OBJECT *DeviceObject
);
Parâmetros
[in] DriverObject
Ponteiro para o objeto driver do chamador. Cada driver recebe um ponteiro para seu objeto de driver em um parâmetro para sua rotina de
[in] DeviceExtensionSize
Especifica o número determinado pelo driver de bytes a serem alocados para o
[in, optional] DeviceName
Opcionalmente, aponta para um buffer que contém uma cadeia de caracteres Unicode terminada em nulo que nomeia o objeto do dispositivo. A cadeia de caracteres deve ser um nome de caminho completo. Os drivers de função e filtro WDM não nomeia seus objetos de dispositivo. Para obter mais informações, consulte objetos de dispositivo nomeados.
Se um nome de dispositivo não for fornecido (ou seja, DeviceName estiver NULL), o objeto de dispositivo criado por IoCreateDevice não terá (e não pode) uma DACL (lista de controle de acesso discricionária) associada a ela. Para obter informações adicionais, consulte Descritores de Segurança.
[in] DeviceType
Especifica uma das constantes FILE_DEVICE_XXX definidas pelo sistema que indicam o tipo de dispositivo (como FILE_DEVICE_DISK ou FILE_DEVICE_KEYBOARD) ou um valor definido pelo fornecedor para um novo tipo de dispositivo. Para obter mais informações, consulte Especificando tipos de dispositivo.
[in] DeviceCharacteristics
Especifica uma ou mais constantes definidas pelo sistema, ORed juntas, que fornecem informações adicionais sobre o dispositivo do driver. Para obter uma lista de possíveis características do dispositivo, consulte DEVICE_OBJECT. Para obter mais informações sobre como especificar características do dispositivo, consulte Especificando características do dispositivo. A maioria dos drivers especifica FILE_DEVICE_SECURE_OPEN para esse parâmetro.
[in] Exclusive
Especifica se o objeto do dispositivo representa um dispositivo exclusivo. A maioria dos drivers define esse valor como FALSE. Para obter mais informações sobre acesso exclusivo, consulte Especificando o acesso exclusivo a objetos de dispositivo.
[out] DeviceObject
Ponteiro para uma variável que recebe um ponteiro para a estrutura de DEVICE_OBJECT recém-criada. A estrutura de DEVICE_OBJECT é alocada do pool nãopagado. A extensão do dispositivo do objeto do dispositivo está zerado.
Valor de retorno
IoCreateDevice retorna STATUS_SUCCESS com êxito ou o código de erro NTSTATUS apropriado sobre falha. Uma lista parcial dos códigos de falha retornados por essa função inclui:
STATUS_INSUFFICIENT_RESOURCES
STATUS_OBJECT_NAME_COLLISION
Observações
IoCreateDevice cria um objeto de dispositivo e retorna um ponteiro para o objeto. O chamador é responsável por excluir o objeto quando ele não é mais necessário chamando IoDeleteDevice.
IoCreateDevice só pode ser usado para criar um objeto de dispositivo sem nome ou um objeto de dispositivo nomeado para o qual um descritor de segurança é definido por um arquivo INF. Caso contrário, os drivers devem usar IoCreateDeviceSecure para criar objetos de dispositivo nomeados. Para obter mais informações, consulte Criando um objeto de dispositivo. O chamador é responsável por definir determinados membros do objeto de dispositivo retornado. Para obter mais informações, consulte Inicializando um objeto de dispositivo e a documentação específica do tipo de dispositivo para seu dispositivo.
Tenha cuidado para especificar os
Um sistema de arquivos remoto que cria um objeto de dispositivo nomeado para um redirecionador de rede e que se registra usando
Objetos de dispositivo para discos, fitas, CD-ROMs e discos de RAM recebem um VPB (Bloco de Parâmetros de Volume) que é inicializado para indicar que o volume nunca foi montado no dispositivo.
Se a chamada de um driver para IoCreateDevice retornar um erro, o driver deverá liberar todos os recursos alocados para esse dispositivo.
Requisitos
Requisito | Valor |
---|---|
da Plataforma de Destino |
Universal |
cabeçalho | wdm.h (include Wdm.h, Ntddk.h, Ntifs.h) |
biblioteca | NtosKrnl.lib |
de DLL |
NtosKrnl.exe |
IRQL | IRQL <= APC_LEVEL |
regras de conformidade de DDI | AddDevice(wdm), CheckDeviceObjectFlags(wdm), HwStorPortProhibitedDIs(storport), IrqlIoPassive1(wdm), MiniportOnlyWdmDevice(kmdf) |