본문 바로가기

Language & API/WINDOWS DRIVER

[함수]IoCreateSymbolicLink

1
2
3
4
5
NTSTATUS
IoCreateSymbolicLink(
    _In_ PUNICODE_STRING SymbolicLinkName,
    _In_ PUNICODE_STRING DeviceName
    );
cs



[파라미터]

SymbolicLinkName -> 유저 네임 유니코드 스트링 버퍼, 드라이버가 유저 모드 응용프로그램, System Componet에 제공하는 인터페이스이다. 


DeviceName -> 드라이버 오브젝트에서 만든 유니코드 스트링 버퍼, PDEVICE_OBJECT가 만들어질 때 사용된 이름이다. 


[반환값]

PDEIVCE_OBJECT 의 DeviceName 과 SymbolicLinkName을 연결시키는 데 성공했다면 STATUS_SUCCESS 를 반환한다. 


[함수설명]

이 함수는 PDEVICE_OBJECT의 DeviceName을 유저모드의 응용 프로그램에 노출되는 SymbolickLinkName으로 연결시키는 역활을 한다. 

이런 심볼릭 링크 방식은 주로 구형(Legacy)드라이버에서 사용되며, SymbolicLinkName의 유일성이라는 제한 사항 때문에 PnP 장치의 드라이버를 작성할 때는 GUID 를 사용해 IoRegisterDeviceInterface()를 호출한다.  DeviceName과의 연결성을 해체 하려면 IoDeleteSymbolicLink()를 사용한다. 


[호출 할때 요구되는 IRQL]

IRQL == PASSIVE_LEVEL




아래 사용예


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#define LINK_NAME L"\\DosDevices\\Ezbeat"
#define DEVICE_NAME L"\\Device\\test"
 
UNICODE_STRING DeviceLink;
UNICODE_STRING DeviceName;
 
NTSTATUS DriverEntry(..생략..)
{
 
    returnStatus = IoCreateDeivce(
        DriverObject,
        0,
        &DeivceName,
        FILE_DEVICE_UNKNOWN,
        FILE_DEVICE_SECURE_OPEN,
        FALSE,
        &MyDevice
        );
 
    (..생략..)
    
    returnStatus = IoCreateSymbolickLink(&DeviceLink, &DeviceName);
 
    (..생략..)
 
}
cs


'Language & API > WINDOWS DRIVER' 카테고리의 다른 글

[함수]IoGetCurrentIrpStackLocation  (0) 2016.07.25
[함수]IoSetDeviceInterfaceState  (0) 2016.07.25
[함수]IoRegisterDeviceInterface  (0) 2016.07.25
[자료구조]DEVICE_OBJECT  (0) 2016.07.25
[함수]IoAttachDeviceToDeviceStack  (0) 2016.07.25