Ring3에서 드라이버 로드를 위한 2가지 방법 - 1/2

컴퓨팅/드라이버 2008/05/28 03:38

SCM(Service Control Manager)를 이용해 드라이버를 등록하고 실행합니다.
잘알려진 InstDrv.exe도 이 방법을 이용한 것입니다.

기본적인 드라이버 로드를 위한 함수 구조

void load_driver(char* driverName) {
   ...
   SC_HANDLE openHandle = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS);
   ...
   SC_HANDLE handle = CreateService( openHandle,
                                    driverName,
                                     driverName,
                                     SERVICE_ALL_ACCESS,
                                    SERVICE_KERNEL_DRIVER,
                                     SERVICE_DEMAND_START,
                                     SERVICE_ERROR_NORMAL,
                                     로드될 .sys파일의 path정보,
                                    NULL,
                                    NULL,
                                     NULL,
                                     NULL,
                                     NULL);
   ...
   StartService(handle, 0, NULL);
   ...
   CloseServiceHandle(openHandle);
   CloseServiceHandle(handle);
}

위와 같이 아주 간단하게 드라이버를 ring3 프로그램에서 등록시키고 실행할 수 있습니다.
정석적인 방법이기에 좀더 은밀(?)하게 드라이버를 로드하고 싶으신 분은 다른 방법을 찾아야합니다.
크리에이티브 커먼즈 라이선스
Creative Commons License
Trackback 0 : Comment 0
◀ PREV : [1] : ... [13] : [14] : [15] : [16] : [17] : [18] : [19] : [20] : [21] : ... [41] : NEXT ▶