IRP_MN_START_DEVICE

Todos os drivers PnP devem lidar com esse IRP.

Valor

0x00

Código principal

IRP_MJ_PNP

Quando enviado

O gerenciador PnP envia esse IRP depois de ter atribuído recursos de hardware, se houver, ao dispositivo. O dispositivo pode ter sido enumerado recentemente e está sendo iniciado pela primeira vez ou o dispositivo pode estar sendo reiniciado após ser interrompido para reequilíbrio de recursos.

Às vezes, o gerenciador de PnP envia um IRP_MN_START_DEVICE para um dispositivo que já foi iniciado, fornecendo um conjunto diferente de recursos que o dispositivo está usando no momento. Um driver inicia essa ação chamando IoInvalidateDeviceState e respondendo à solicitação de IRP_MN_QUERY_PNP_DEVICE_STATE subsequente com o sinalizador de PNP_RESOURCE_REQUIREMENTS_CHANGED definido. Um motorista de barramento pode usar esse mecanismo, por exemplo, para abrir uma nova abertura em uma ponte PCI para PCI.

O gerenciador PnP envia esse IRP no IRQL PASSIVE_LEVEL no contexto de um thread do sistema.

Parâmetros de Entrada

O membro Parameters.StartDevice.AllocatedResources da estrutura IO_STACK_LOCATION aponta para um CM_RESOURCE_LIST que descreve os recursos de hardware atribuídos pelo gerenciador PnP ao dispositivo. Esta lista contém os recursos em forma bruta. Use os recursos brutos para programar o dispositivo.

Parameters.StartDevice.AllocatedResourcesTranslated aponta para um CM_RESOURCE_LIST descrevendo os recursos de hardware que o gerenciador PnP atribuiu ao dispositivo. Esta lista contém os recursos no formulário traduzido. Use os recursos traduzidos para conectar o vetor de interrupção, o espaço de E/S do mapa e a memória do mapa.

Parâmetros de saída

Nenhum

Bloco de Status de E/S

Um driver define Irp-IoStatus.Status> como STATUS_SUCCESS ou para um erro apropriado status como STATUS_UNSUCCESSFUL ou STATUS_INSUFFICIENT_RESOURCES.

Se um driver exigir algum tempo para executar suas operações de início para um dispositivo, ele poderá marcar o IRP pendente e retornar STATUS_PENDING.

Operação

Esse IRP deve ser tratado primeiro pelo motorista do barramento pai de um dispositivo e, em seguida, por cada driver mais alto na pilha do dispositivo.

Em resposta a esse IRP, os drivers iniciam um dispositivo pela primeira vez ou reiniciam um dispositivo que foi interrompido. As operações exatas necessárias para iniciar um dispositivo variam de dispositivo para dispositivo, mas podem incluir ligar o dispositivo, executar inicialização específica do dispositivo e conectar a interrupção.

Normalmente, um driver pode lidar com esse IRP da mesma maneira, seja iniciando um dispositivo pela primeira vez ou reiniciando um dispositivo após um IRP_MN_STOP_DEVICE, exceto se um driver precisar restaurar o estado do dispositivo em uma reinicialização após uma parada.

No Windows Vista e em sistemas operacionais posteriores, recomendamos que os drivers sempre pendam a IRP_MN_START_DEVICE IRP e conclua o processamento posteriormente. Essa ordem permite que o sistema processe reinicializações de dispositivo de forma assíncrona. (Em sistemas operacionais antes do Windows Vista, os drivers podem retornar STATUS_PENDING de suas rotinas de expedição, mas o gerenciador PnP não sobrepõe a reinicialização do dispositivo com nenhuma outra operação.)

Para obter mais informações sobre como lidar com um IRP inicial, consulte Iniciando um dispositivo.

Enviando este IRP

Reservado para uso do sistema. Os drivers não devem enviar esse IRP.

Requisitos

parâmetro

Wdm.h (inclua Wdm.h, Ntddk.h ou Ntifs.h)

Confira também

IRP_MN_STOP_DEVICE