DriverEntry의 필수 책임
DriverEntry 루틴의 필수 순서가 지정된 책임은 다음과 같습니다.
드라이버의 표준 루틴에 대한 진입점을 제공합니다.
드라이버는 드라이버 개체 또는 드라이버 확장에 많은 표준 루틴에 대한 진입점을 저장합니다. 이러한 진입점에는 드라이버의 AddDevice 루틴, 디스패치 루틴, StartIo 루틴 및 언로드 루틴에 대한 진입점이 포함됩니다. 예를 들어 드라이버는 다음과 같은 문을 사용하여 AddDevice, DispatchPnP 및 DispatchPower 루틴의 진입점을 설정합니다(Xxx 는 드라이버를 식별하는 공급업체 제공 접두사에 대한 자리 표시자임).
: DriverObject->DriverExtension->AddDevice = XxxAddDevice; DriverObject->MajorFunction[IRP_MJ_PNP] = XxxDispatchPnp; DriverObject->MajorFunction[IRP_MJ_POWER] = XxxDispatchPower; :
ISR 또는 IoCompletion 루틴과 같은 추가 표준 루틴은 시스템 지원 루틴을 호출하여 지정됩니다. 자세한 내용은 개별 표준 드라이버 루틴에 대한 설명을 참조하세요.
드라이버에서 사용하는 다양한 드라이버 차원의 개체, 형식 또는 리소스를 만들고/또는 초기화합니다. 대부분의 표준 루틴은 디바이스별로 개체를 사용하므로 드라이버는 AddDevice 루틴에서 또는 IRP_MN_START_DEVICE 요청을 받은 후에 이러한 개체를 설정해야 합니다.
드라이버에 디바이스 전용 스레드가 있거나 커널 정의 디스패처 개체에서 대기하는 경우 DriverEntry 루틴은 커널 디스패처 개체를 초기화할 수 있습니다. (드라이버에서 개체를 사용하는 방법에 따라 대신 AddDevice 루틴에서 또는 IRP_MN_START_DEVICE 요청을 받은 후 이 작업을 수행할 수 있습니다.)
할당된 메모리를 해제하고 더 이상 필요하지 않습니다.
드라이버가 성공적으로 로드되었고 PnP 관리자의 요청을 수락하고 처리하여 디바이스를 구성, 추가 및 시작할 수 있는지 여부를 나타내는 NTSTATUS를 반환합니다. ( DriverEntry 반환 값을 참조하세요.)