본문 바로가기

reversing/Windows Driver

Driver Object , Deivce Object 연관성 및 함수 정리

SMALL


디바이스 스택과 디바이스 오브젝트, 디바이스 드라이버는 다음과 같은 연관성을 가진다.



위와 관련되어 있는 함수를 정리 


1
2
3
4
5
6
7
8
9
NTSTATUS IoCreateDevice(
  _In_     PDRIVER_OBJECT  DriverObject,/
  _In_     ULONG           DeviceExtensionSize,
  _In_opt_ PUNICODE_STRING DeviceName,
  _In_     DEVICE_TYPE     DeviceType,
  _In_     ULONG           DeviceCharacteristics,
  _In_     BOOLEAN         Exclusive,
  _Out_    PDEVICE_OBJECT  *DeviceObject
);
cs


PDRIVER_OBJECT        : 호출자인 드라이버 오브젝트의 포인터 값
DeviceExtensionSize   : 디바이스 오브젝트에서 사용할 DeviceExtension의 크기
PUNICODE_STRING       : 옵셔널 인자로, 디바이스 오브젝트의 이름을 붙임
DEVICE_TYPE           : 어떠한 디바이스인지 종류를 나타탬
                        FILE_DEVICE_DISK, FILE_DEVICE_KEYBOARD
DeviceCharacteristics : 드라이버의 디바이스 오브젝트에 추가 정보를 제공
 보통 FILE_DEVICE_SECURE_OPEN을 사용
  FILE_DEVICE_UNKNOWN 도 사용
Exclusive             : 해당 디바이스 오브젝트가 단독 장치인지를 표시함
 보통 FALSE 값을 설정
*DeviceObject         : 생성된 디바이스 오브젝트의 포인터를 담을 변수

                


1
2
3
4
PDEVICE_OBJECT IoAttachDeviceToDeviceStack(
  _In_ PDEVICE_OBJECT SourceDevice,
  _In_ PDEVICE_OBJECT TargetDevice
);
cs

IoAttachDeviceToDeviceStack 루틴은 호출자의 장치 개체를 체인의 최상위 장치 개체에 연결하고 
이전에 가장 높은 장치 개체에 대한 포인터를 반환

SourceDevice : 호출자(드라이버)가 만든 디바이스 오브젝트의 포인터
TargetDevice : 다른 드라이버의 디바이스 오브젝트 포인터

위의 그림에서 Y가 SourceDevice, X가 TargetDevice




Device Object 

typedef struct _DEVICE_OBJECT { CSHORT                      Type; USHORT                      Size; LONG                        ReferenceCount; struct _DRIVER_OBJECT  *DriverObject; --> 해당 디바이스를 생성한 드라이버 오브젝트 struct _DEVICE_OBJECT  *NextDevice; --> 같은 드라이버에서 생성된 다른 디바이스 오브젝트 struct _DEVICE_OBJECT  *AttachedDevice; --> 디바이스 스택에서 밑에 놓여있는 디바이스 오브젝트

...

}


[참고] : https://www.youtube.com/watch?v=1E5Y64CPH00

[참고2] : MSDN


LIST

'reversing > Windows Driver' 카테고리의 다른 글

Minifilter - User Mode Communication  (0) 2017.08.04
IRP, I/O Stack 관련 내용 정리  (0) 2017.07.28
[Device Stack] 디바이스 스택  (0) 2017.07.25
MDL(Memory Descriptor List)  (0) 2017.07.21
DPC (Deferred Procedure Calls)  (0) 2017.07.20