2017.11.03 14:20

DriverEntry routine

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

단축키

Prev이전 문서

Next다음 문서

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

단축키

Prev이전 문서

Next다음 문서

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

DriverEntry routine

DriverEntry 함수는 드라이버의 시작점으로 드라이버가 로드 된 후 가장 먼저 호출하는 함수로 User Mode에서 Entry Point 역할을 수행하는 main(), WinMain(), DllMain() 과 유사한 역할로 Kernel Mode Driver의 Entry Point 역할을 수행한다.

DriverEntry is the first routine called after a driver is loaded, and is responsible for initializing the driver. [1]

드라이버 파일은 I/O Manager에서 관리하며 드라이버 파일이 메모리에 로드 되는 시점에 I/O Manager가 DriverEntry 함수를 호출 한다. PC에 동일한 드라이버를 사용하는 장치가 여러개 연결되어도 드라이버는 메모리에 한번만 로드 되기 때문에 DriverEntry 함수는 한 번만 호출된다.

일반적으로 DriverEntry 함수는 다음과 같이 드라이버에서 필요한 초기화 작업을 수행한다.

  • 드라이버 주요 루틴 ( AddDevice 루틴, Dispatch 루틴, Unload 루틴 등.. )
  • 심볼릭 링크 생성
  • 데이터 및 필요한 리소스 초기화

 

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;
}

 

 

Syntax

DRIVER_INITIALIZE DriverEntry;

NTSTATUS DriverEntry(
    _In_ struct _DRIVER_OBJECT *DriverObject,
    _In_ PUNICODE_STRING       RegistryPath
)
{ ... }

 

Parameters

DriverObject [in]

로드되는 드라이버의 DRIVER_OBJECT 구조체 포인터 ( I/O Manager에서 할당 )

RegistryPath [in]

드라이버의 레지스트리 경로

ex> HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Servier\DriverName

 

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 AddDevice routine NarineStudio 2017.11.03 584
» DriverEntry routine NarineStudio 2017.11.03 605
Board Pagination Prev 1 Next
/ 1