Windows의 커널 드라이버에서는 심볼릭 링크를 통해 사용자 모드 애플리케이션이 커널 모드 드라이버에 쉽게 접근할 수 있게 준다.
\Device\MyDriverDevice라면, 이 경로는 커널 내부에서만 사용될 수 있다.\\.\MyDriver를 설정하면, 사용자 모드 애플리케이션은 \\.\MyDriver라는 경로를 사용해 커널 드라이버와 통신할 수 있게 된다.이것이 심볼릭 링크의 역할이다. 즉, 사용자 모드와 커널 모드 사이의 경로를 연결하는 가상 링크라고 보면 된다.
드라이버에서 다음과 같이 심볼릭 링크를 생성하면
if (NT_SUCCESS(status)) {
// 심볼릭 링크 생성
status = IoCreateSymbolicLink(&symbolicLink, &deviceName);
}
유저 모드 프로세스에서
HANDLE hDevice = CreateFileW(L"\\\\.\\ExternalStartDriver",
GENERIC_READ | GENERIC_WRITE,
0, NULL, OPEN_EXISTING, 0, NULL);
다음과 같이 심볼릭 링크를 통해 핸들을 요청 할 수 있다. 물론 이 핸들을 통해 IOCTL을 하는 것
DeviceIoControl 또는 ioctl 을 통해 사용자 모드 애플리케이션과 커널 드라이버가 통신하려면 디바이스 객체를 반드시 생성해야 한다.