결론부터

난 머리가 훌륭하지 않아~ 기본을 따르는 것도 정신 건강에 도움이 됨.

 

IoCreateSymbolicLink

 

NTSTATUS IoCreateSymbolicLink(
  [in] PUNICODE_STRING SymbolicLinkName,
  [in] PUNICODE_STRING DeviceName
);

 

IoDeleteSymbolicLink

 

NTSTATUS IoDeleteSymbolicLink(
  [in] PUNICODE_STRING SymbolicLinkName
);

 

 

코드

#define DEVICE_NAME L"\\Device\\wdmdrv-02Class0" // 실제 드라이버 생성한 디바이스의 이름
#define SYMBOLIC_NAME L"\\DosDevices\\wdmdrv-02Class0" // 유저가 접근할 심볼, 응용에서 드라이버 접근시 ex) L"\\\\.\\wdmdrv-02Class0"

 

빌드 된 드라이버 파일 명

 

개념 바로 챙기기

디바이스 이름을 이렇게 표시한 이유는 

드라이버에 여러개의 디바이스가 존재할 수 있기 때문이다.

 

드라이버 1개 안에 디바이스 1개 만 존재하는 경우

wdmdrv-02 : 드라이버 이름

wdmdrv-02Class0: 디바이스 이름

 

드라이버 1개 안에 디바이스 2개 만 존재하는 경우

wdmdrv-02 : 드라이버 이름

wdmdrv-02Class0: 디바이스 이름1

wdmdrv-02Class1: 디바이스 이름2

 

 

 

 

결과물

 

 

 

 

 

 

 

 

키보드, 마우스 드라이버와 유사함. (가장 이해가 빠름)

 

예를 들어 키보드가 하나 더 추가 된다면 디바이스 명은 어떻게 될까요?

\Device\KeyboardClass0

\Device\KeyboardClass1 

 

+ Recent posts