windows Driver WinObj 활용

wangki·2026년 3월 25일

windows driver

목록 보기
2/10

windows driver의 Device Object를 생성하고 어플리케이션 레벨에서 연결하기 위해서는 CreateFile을 호출하여 Handle을 얻어야 한다. Symbol Name을 어떻게 생성하고 생성된 Symbol을 WinObj로 확인하는 과정을 실습해 보았다.


1. Device Object 생성


NTSTATUS DriverEntry(PDRIVER_OBJECT pDrvObj, PUNICODE_STRING pRegistryPath) {
	PDEVICE_OBJECT DeviceObject = NULL;
	NTSTATUS ntStatus;
	UNICODE_STRING DeviceName;
	UNICODE_STRING SymbolicLinkName;

	pRegistryPath = pRegistryPath;

	pDrvObj->DriverUnload = SampleDriverUnload;

	// DeviceObject 생성
	RtlInitUnicodeString(&DeviceName, L"\\Device\\SAMPLE");	// 대소문자 상관없음 
	ntStatus = IoCreateDevice(
		pDrvObj,
		0,
		&DeviceName,
		FILE_DEVICE_UNKNOWN,
		0,
		FALSE,
		&DeviceObject
	);
	
	RtlInitUnicodeString(&SymbolicLinkName, L"\\DosDevices\\MYSAMPLE");	
	IoCreateSymbolicLink(&SymbolicLinkName, &DeviceName);	// 유저 모드에서 접근할 수 있도록 설정해주는 것이다. 

	return STATUS_SUCCESS;
}

2. Device Object 리소스 해제


VOID SampleDriverUnload(PDRIVER_OBJECT pDriverObj) {
	UNICODE_STRING SymbolicLinkName;

	KdPrint(("SampleDriveUnload"));
	pDriverObj = pDriverObj;

	// device symbol link 삭제 

	RtlInitUnicodeString(&SymbolicLinkName, L"\\DosDevices\\MYSAMPLE");
	IoDeleteSymbolicLink(&SymbolicLinkName);
	// device object 삭제 
	IoDeleteDevice(pDriverObj->DeviceObject);
}

3. vm에서 driver 로드


4. WinObj 실행하여 Symbol 확인


WinObj는 링크 에서 다운로드 할 수 있음.

등록한 MYSAMPLE을 확인할 수 있다.

5. driver 해제 후 symbol 확인


WinObj에서 MYSAMPLE을 찾을 수 없다.

6. 결론

어플리케이션을 개발할 때 CreateFile에 symbol을 넣어 핸들을 얻어와 사용한 적이 있다. 실제로 어떻게 내부적으로 심볼을 생성하는지 알 수 있었다.

0개의 댓글