2017.11.03 20:19

AddDevice routine

조회 수 574 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄

AddDevice routine

AddDevice 함수는 새로운 장치 연결 시 PnP Manager ( Plug and Play Manager )에서 해당 장치의 Function Driver와 Filter Driver를 로드 하고, 각 Driver에 대해서 AddDevice Routine을 호출 한다.

The AddDevice routine is responsible for creating functional device objects (FDO) or filter device objects (filter DO) for devices enumerated by the Plug and Play (PnP) manager. [1]

 

NTSTATUS DriverEntry(
    PDRIVER_OBJECT DriverObject, 
    PUNICODE_STRING RegistryPath
)
{
    NTSTATUS status = STATUS_SUCCESS;
    USHORT i = 0;

    UNREFERENCED_PARAMETER(DriverObject);
    UNREFERENCED_PARAMETER(RegistryPath);

    PAGED_CODE();

    // 드라이버 주요 루틴 - IRP 명령어 처리 그룹
    for ( i = 0; i < IRP_MJ_MAXIMUM_FUNCTION; ++i )
    {
        DriverObject->MajorFunction[i] = NarinDispatch;
    }

    DriverObject->MajorFunction[IRP_MJ_PNP] = Narin_FilterPnP;

    // 드라이버 주요 루틴 - IRP 비처리 그룹
    DriverObject->DriverUnload = Narin_Unload;
    DriverObject->DriverExtension->AddDevice = Narin_AddDevice;

    // Symbolic Link
    ...

    // 필요한 리소스 초기화
    ...

    return status;
}

[ Source 1. DriverEntry Example ] 에서 24번째 줄과 같이 AddDevice 루틴에 Narin_AddDevice 할당 시 PnP Manager에서 신규 장치 인식 시 Narin_AddDevice 함수를 호출하게 된다.

NTSTATUS Narin_AddDevice(
    PDRIVER_OBJECT DriverObject, 
    PDEVICE_OBJECT PhysicalDevice
)
{
    UNREFERENCED_PARAMETER(DriverObject);
    UNREFERENCED_PARAMETER(PhysicalDevice);

    PAGED_CODE();
    
    // Create Device Object
    ...
    
    // Attach Device Object to PhysicalDevice
    ...
    
    // Etc
    ...

    return STATUS_SUCCESS;
}

 

Syntax

DRIVER_ADD_DEVICE AddDevice;

NTSTATUS AddDevice(
    _In_ struct _DRIVER_OBJECT *DriverObject,
    _In_ struct _DEVICE_OBJECT *PhysicalDeviceObject
)
{ ... }

 

Parameters

DriverObject [in]

Caller-supplied pointer to a DRIVER_OBJECT structure. This is the driver's driver object.

RegistryPath [in]

Caller-supplied pointer to a DEVICE_OBJECT structure representing a physical device object (PDO) created by a lower-level driver.

 

Return Value

If the routine succeeds, it must return STATUS_SUCCESS. Otherwise, it must return one of the error status values defined in Ntstatus.h.

 

ETC

호출 시점 : 장치가 인식되었을 때
IRQL : PASSIVE_LEVEL

 

?

Windows Driver Reference

Windows Kernel-Mode Driver Reference

List of Articles
번호 제목 글쓴이 날짜 조회 수
2 DriverEntry routine NarineStudio 2017.11.03 595
» AddDevice routine NarineStudio 2017.11.03 574
Board Pagination Prev 1 Next
/ 1