BusEnum에 드라이버 로딩을 위한 비동기 쓰레드 생성 기능(DEVFLAGS_LOAD_ASYNC)과 LoadAsyncDelay, LoadAsyncEvent옵션을 추가함으로서 드라이버로딩의 시점을 레지스트리에서 제어할 수 있다.
레지에서 아래 플래그를 추가하면 비동기 쓰레드가 동작한다.
“Flags”= dword: DEVFLAGS_LOAD_ASYNC ; load in async thread
비동기 쓰레드에서 아래와 같이 설정하면 딜레이시간과 이벤트를 기다리게 하여 드라이버 로딩 시점을 제어 할 수 있다.
"LoadAsyncDelay"=dword:2710 ; delay 10000 ms
"LoadAsyncEvent"="StartOthers" ; waiting for the "StartOthers" event
BusEnum은 버스드라이버를 로딩하는 드라이버이다. 이것은 하나의 쓰레드로 로딩하게 되어 있다.
[HKEY_LOCAL_MACHINE\Drivers\BuiltIn\C]
“Dll”=”C.dll”
“Order”=dword:10
여기 비동기 쓰레드를 추가함으로서 드라이버로딩을 제어할 수 있다. 레지에서 아래 플래그를 추가하면 비동기 쓰레드가 동작한다.
“Flags”= dword: DEVFLAGS_LOAD_ASYNC ; load in async thread
비동기 쓰레드에서 아래와 같이 설정하면 딜레이시간과 이벤트를 기다리게 하여 드라이버 로딩 시점을 제어 할 수 있다.
"LoadAsyncDelay"=dword:2710 ; delay 10000 ms
"LoadAsyncEvent"="StartOthers" ; waiting for the "StartOthers" event
Delay는 레지에서 줄수 있고 이벤트는 아래와 같이 어플리케이션에서 줄 수 있다.
#include "windows.h"
int WINAPI WinMain(
HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPWSTR lpCmdLine,
int nShowCmd
)
{
HANDLE hAsyncLoadStartEvent;
WCHAR szEventName[MAX_PATH] = L"StartOthers";
hAsyncLoadStartEvent = CreateEvent(NULL, TRUE, FALSE, szEventName);
if(hAsyncLoadStartEvent) {
SetEvent(hAsyncLoadStartEvent);
CloseHandle(hAsyncLoadStartEvent);
}
return 0;
}
댓글 없음:
댓글 쓰기