본문 바로가기
Security/Windows System

DeviceObject이란?(1)

by Winduck 2017. 7. 30.
반응형

루트킷 코드를 작성하며 정식적으로 드라이버 개발공부를 해야 한다고 생각들어 유투브 강의내용과 책에서 공부한 내용들을 간단하게 정리해봅니다.

 

DeviceObject?


-IO manager에 의해 생성되는 구조체로써 해당 디바이스의 정보 (드라이버 오브젝트, 디바이스 스택 연결정보, IRP포인터등)를 담고 있다.
 => 단순히 운영체제에서 디바이스들과 드라이버들을 관리하기 위한 Object로 보임(제 생각입니다)


-하나의 장치(HDD,USB)에는 여러 개의 DeviceObject로 이루어진 DeviceStack있다.


※Device Object & Device Stack전체그림

 

 

-장치(HDD,Print)에는 디바이스 스택이 존재하며 내용에는 DeviceObject들을 포함한다.

 DeviceObject는 IO Manager에 의해 해당 장치와 관련된 Driver가 발견되었을때 생성됩니다.

 

※Device Object구조체

 

typedef struct _DEVICE_OBJECT {
  CSHORT                      Type;
  USHORT                      Size;
  LONG                        ReferenceCount;
  struct _DRIVER_OBJECT  *DriverObject; // DrvierObject
  struct _DEVICE_OBJECT  *NextDevice; // 다른 디바이스 스택에 존재하는 동일한 드라이버의 Device Object
  struct _DEVICE_OBJECT  *AttachedDevice; // 디바이스 스택의 상위 DeviceObject
  struct _IRP  *CurrentIrp;
  PIO_TIMER                   Timer;
  ULONG                       Flags;
  ULONG                       Characteristics;
  __volatile PVPB             Vpb;
  PVOID                       DeviceExtension; // 프로그래머가 DeviceObject에서 데이터들을 저장하도록 만든 구조체.

  DEVICE_TYPE                 DeviceType;
  CCHAR                       StackSize;
  union {
    LIST_ENTRY         ListEntry;
    WAIT_CONTEXT_BLOCK Wcb;
  } Queue;
  ULONG                       AlignmentRequirement;
  KDEVICE_QUEUE               DeviceQueue;
  KDPC                        Dpc;
  ULONG                       ActiveThreadCount;
  PSECURITY_DESCRIPTOR        SecurityDescriptor;
  KEVENT                      DeviceLock;
  USHORT                      SectorSize;
  USHORT                      Spare1;
  struct _DEVOBJ_EXTENSION  *  DeviceObjectExtension;
  PVOID                       Reserved;
} DEVICE_OBJECT, *PDEVICE_OBJECT;
 

 

※DeviceStack관계 모습

 

 

위에 설명된 DeviceObject에서  NextDevice, AttachedDevice변수 관계를 통해 이해가능합니다.

 

[ 참조자료 : https://www.youtube.com/watch?v=1E5Y64CPH00  . 책 : 윈도우디바이스드라이버 ]


반응형

댓글