일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 27 | 28 |
29 | 30 | 31 |
- dhcp
- 이 컴퓨터는 도메인의 구성원이 아닙니다.
- 클라우드 제공자
- 정수형 데이터타입
- VMWare View Connection Serve
- 수직적 확장
- View Connection
- 온디맨드식
- DHCP 설정
- 운영관리제어의 축소
- 커뮤니티 클라우드
- 도메인 사용자 또는 그룹을 확인할 수 없습니다.
- DHCP 설치
- VMware
- 클라우드 자원 관리자
- 제한된 이식성
- 온 프레미스
- 고정 IP주소를 가진 네트워크 어댑터를 검색할 수 없습니다.
- Virtual Private Cloud
- IT 자원
- 수평적 확장
- VMWare vSphere
- 멀티테넌시
- 가상 프라이빗 클라우드
- 자원 풀링
- Error 1720
- Community Cloud
- 클라우드 소비자
- 클라우드 서비스 소유자
- 클라우드 보안 취약성
- Today
- Total
한 걸음씩..
[Device Driver] DriverEntry Routine 본문
DriverEntry Routine
DriverEntry Routine 은 Device Driver의 시작 위치이다.
코딩상에서 함수명을 반드시 'DeviceEntry' 라고 해야 하는 특징을 가지고 있다.
따라서 C++언어를 사용하는 경우에는 name mangling가 발생할 수 있으므로 반드시 extern "C" 명령을 사용해야 한다
extern "C"
NTSTATUS DriverEntry (
PDRIVER_OBJECT pDriverObject,
PUNICODE_STRING pRegistryPath )
{
pDriverObject->MajorFunction[IRP_MJ_PNP] = SamplePnpDispatch;
pDriverObject->DriverExtension->AddDevice = SampleAddDevice;
pDriverObject->DriverUnload = SampleUnload;
return STATUS_SUCCESS;
}
DriveEntry를 호출하는 이유
1. 드라이버가 메모리에 처음 적재되는 경우에 필요로 하는 내부 변수등을 초기화 하는 작업을 Device Driver 측에서 먼저 수행하라는 의미이다.
똑같은 Device 장치를 같은 PC에 여러 대 설치한다 해도 똑같은 Device Driver를 여러 번 메모리에 적재되지 않고 DriverEntry 는 장치의 개수에 상관없이 단 한번만 호출된다
2. IO Manager가 DriverEntry 함수의 파라미터로 전달되는 pDriverObject를 통해서 Device Driver가 가지는 함수 엔트리를 등록하도록 되어 있다
pDriverObject
Device Driver 측에서 이 pDriverObject 구조체에 기록하는 자신의 함수 포인터는 크게 2종류로 나눌 수 있다
- IRP 명령어 처리 그룹
- Create, Close, Pnp, Read, Write, IoControl 등등
#define IRP_MJ_CREATE 0x00
#define IRP_MJ_CREATE_NAMED_PIPE 0x01
#define IRP_MJ_CLOSE 0x02
#define IRP_MJ_READ 0x03
#define IRP_MJ_WRITE 0x04
#define IRP_MJ_QUERY_INFORMATION 0x05
#define IRP_MJ_SET_INFORMATION 0x06
#define IRP_MJ_QUERY_EA 0x07
#define IRP_MJ_SET_EA 0x08
#define IRP_MJ_FLUSH_BUFFERS 0x09
#define IRP_MJ_QUERY_VOLUME_INFORMATION 0x0a
#define IRP_MJ_SET_VOLUME_INFORMATION 0x0b
#define IRP_MJ_DIRECTORY_CONTROL 0x0c
#define IRP_MJ_FILE_SYSTEM_CONTROL 0x0d
#define IRP_MJ_DEVICE_CONTROL 0x0e
#define IRP_MJ_INTERNAL_DEVICE_CONTROL 0x0f
#define IRP_MJ_SHUTDOWN 0x10
#define IRP_MJ_LOCK_CONTROL 0x11
#define IRP_MJ_CLEANUP 0x12
#define IRP_MJ_CREATE_MAILSLOT 0x13
#define IRP_MJ_QUERY_SECURITY 0x14
#define IRP_MJ_SET_SECURITY 0x15
#define IRP_MJ_POWER 0x16
#define IRP_MJ_SYSTEM_CONTROL 0x17
#define IRP_MJ_DEVICE_CHANGE 0x18
#define IRP_MJ_QUERY_QUOTA 0x19
#define IRP_MJ_SET_QUOTA 0x1a
#define IRP_MJ_PNP 0x1b
- IRP 명령어 처리 그룹 등록 방법
- pDriverObject-> MajorFunction[ IRP_MJ_XXXX ] = XXXX를 처리할 함수 명
- IRP 명령어 비 처리 그룹
- AddDevice, Unload 등등
- IRP 명령어 비 처리 그룹 등록 방법
- pDriverObject->DriverExtension->AddDevice = SampleAddDevice;
pRegistryPath
디바이스 드라이버를 설치하는 당시에 운영체제에 의해서 지정된 디바이스 드라이버를 위한 소프트웨어 서비스 키를 가리키는 위치 정보를 담고있다
시스템이 부팅되는 초반 시기에 메모리에 적재되는 디바이스 드라이버들은 시스템 레지스트리를 접근하는데 있어서 제한을 받게 된다
이때 pRegistryPath에서 가리키는 레지스트리 키는 언제든지 접근이 가능하다는 점에서 디바이스 드라이버들은 이곳을 정보 보관 장소로 사용하게된다.
출처 : 디바이스 드라이버 구조와 원리 그리고 제작 노하우
'프로그래밍' 카테고리의 다른 글
[Device Driver] IRP Dispatch Routine (0) | 2013.09.03 |
---|---|
[Device Driver] AddDevice routine (0) | 2013.09.02 |
[Windows]윈도우 부팅이 안될 때 (0) | 2013.08.28 |
WideChar , Multibyte 변환 시 주의 할점 (1) | 2013.08.08 |
프로세스 숨기기 (1) | 2013.07.22 |