Ring3에서 드라이버 로드를 위한 2가지 방법 - 1/2
컴퓨팅/드라이버 2008/05/28 03:38SCM(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 프로그램에서 등록시키고 실행할 수 있습니다.
정석적인 방법이기에 좀더 은밀(?)하게 드라이버를 로드하고 싶으신 분은 다른 방법을 찾아야합니다.
'컴퓨팅 > 드라이버' 카테고리의 다른 글
| _DRIVER_OBJECT / 심볼릭 링크로 Driver Object 얻어오기 (0) | 2008/05/28 |
|---|---|
| Ring3에서 드라이버 로드를 위한 2가지 방법 - 1/2 (0) | 2008/05/28 |
| InstDrv - 드라이버 로딩 도구 (0) | 2008/05/27 |
| Visual Studio 2008 / WDK 연동 (0) | 2008/05/27 |
