일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 리눅스
- AWS
- VMware
- ssh
- port
- 도커
- RUBY
- 방화벽체크
- 패키지
- docker registry
- DevOps
- 루비
- 우분투
- ssh command
- window size
- Chef
- docker
- Openswan
- driver
- 드라이버
- Linux
- sudo
- golang
- docker container
- opsworks
- ubuntu
- VPN
- docker-compose
- VIM
- QT
- Today
- Total
목록Window Driver (28)
구리의 창고
1. 먼저 VisualDDK폴더 안에 있는 target을 VMWare(타겟머신)로 복사한다. 2. vminstall.exe 를 실행하면 아래와 같은 창이 뜨는데, Install 버튼을 눌러서 설치 후 재부팅한다. 3. 부팅 할 OS를 선택하는 창이 뜨면 VS2008 메뉴에 [디버그 – Driver Launch Settings]를 클릭해주고 아래와 같이 설정한다. 4. Launch를 누르면 아래 창에서 대기를 하고 OS를 선택하는 창에서 VirtualKD가 적혀있는 항목을 선택해서 부팅한다. 5. 부팅이 완료되면 VMWare에 DDKLaunchMonitor란 프로그램이 실행되는데 표시된 아이피를 4번 과정에 있는 Driver stopping in progress 창에서 Target machine hostn..
여기저기 뒤지다가 VisualDDK 라는걸 알아냈다 http://visualddk.sysprogs.org/ VisualDDK 1.5 시작 메뉴얼이 가이드는 VisualDDK를 설치하고 설정하는 것 부터 첫 드라이버를 만들고 디버깅하는 과정을 순서데로 알려줍니다. 당신은 VisualDDK를 기능적으로 완벽하게 느낄 수 있고 간략한 가이드를 통해 어떻게 빠르게 가장 유용한 기능에 접근 할 수 있는지를 알려 줄 것이다. 먼저 Visual Studio 2005/2008, WinDDK(6000과 7600버전에서 테스트했다.)가 설치돼는지인해라. 64비트 호스트 머신에서도 32비트 디버깅 툴을 설치해야 한다. 왜냐하면 VisualStudio자체는 32비트 이고 32비트 DLL들을 사용한다. Installer에서 요..
1. 개요 드라이버에서 개발을 하다보면 주기적으로 호출되는 함수가 필요할 경우가 있다. 예를들면 서버와 클라이언트간의 연결상태가 유효한지를 1분단위로 확인할 수도 있고 드라이버 내부적으로 행이 발생한 곳이 있는지의 여부를 일정한 시간 간격으로 확인할 수도 있다. 실제로 NDIS Miniport 드라이버는 CheckForHang 이라는 함수가 그런 역할을 한다. 이처럼 주기적인 함수호출이 요구될 때 이를 구현하는 방법에 대해서 기본적인 내용으로 예제를 사용하여 설명하겠다. 2. 초기화 우선 DDK에서 제공되는 함수는 다음과 같다. 아래 나열한 함수들을 타이머 연산을 구현하기 위한 기본 함수들로 이외에 함수도 DDK에서는 제공하고 있다. VOID KeInitializeTimer( // 타이머객체를 초기화한다..
모니터 좌표는 주모니터를 기준으로 한다. 다음과 같이 모니터가 4개 설치됐다고 가정하자 (1번모니터가 주모니터이다) 주모니터(1번) 왼쪽 끝은 0,0 좌표를 가진다. 그리고 2번모니터의 좌표는 1번모니터의 가로길이부터 시작한다. 만약 주모니터의 왼쪽이나 위쪽에 있다면 좌표는 마이너스 값을 가지게된다. 각 모니터의 좌표를 얻어온 후, 드라이버 단에서 처리를 해줘야한다. mouclass에 mouse event 를 보내 줄 때, x y 값은 가로세로 최대 0xFFFF 0xFFFF 값을 가진다. 설명을 쉽게 하기 위해 소스를 예로 들겠다. typedef struct { LONG Top; LONG Bottom; LONG Left; LONG Right; } RECT; ... 중략 ... RECT monPrimary..
목차 1. 소개 2. 디바이스 & 드라이버 3. 방법1 (간단) : IRP 와 드라이버 스택 *이름 없는 키보드 디바이스 붙이기 *I/O Completion Routine *정보 로그하기 *APC Routine Patch and 활성화된 창 감지 예제 4. 방법2 : kbdclass.sys 드라이버 1. 소개 여기서 논의할 내용은, 커널모드에서 키보드 데이터를 후킹하는 방법이다. 이 방법을 가지고 키보드 내용을 분석하거나 막거나 재해석 할 수 있다. 2. 디바이스 & 드라이버 후킹을 하기전에, 디바이스와 드라이버가 어떻게 상호작용을 하는지 이해 할 필요가 있다. 드라이버는 여러 개의 계층을 갖는다. 그것은 디바이스와 직접적으로 작동을 하는 드라이버 위에 있는 스택으로 표현된다. 기초적인 드라이버의 일은 ..
Type 0x00000001 : SERVICE_KERNEL_DRIVER. 대게의 WDM 드라이버(커널레벨) 0x00000002 : SERVICE_FILE_SYSTEM_DRIVER. 파일시스템 관련드라이버 & 필터드라이버 0x00000010 : SERVICE_WIN32_OWN_PROCESS. 자신의 프로세스 공간을 가지는 win32 서비스모듈 0x00000020 : SERVICE_WIN32_SHARE_PROCESS : 자신의 프로세스 공간을 가지지 않고 다른 프로세스와 공유하는 wind32 서비스 모듈 Start 0x00000000 : SERVICE_BOOT_START. 부팅시에 메모리에 우선 상주 0x00000001 : SERVICE_SYSTEM_START. 부팅시에 메모리에 상주 0x00000002 :..
디바이스 드라이버를 로딩하는 방법에는 두가지가 있다. (1) 정적 로딩 :레지스트리에 드라이버 정보를 등록한 후 로딩한다. 레지스트리를 수정하기 때문에 반드시 재부팅이 필요하다. (2) 동적 로딩 : 레지스트리를 쓰지않고, 서비스 메니져를 통해서 동적으로 로딩하는 방법. 재부팅이 필요하지 않다. 먼저 정적으로 로딩하는 방법은 아래와 같다. 1. HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services 에 드라이버 정보를 등록한다. 2. HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class에서 내가 만든 필터 드라이버를 부착시킬 클래스 드라이버를 찾아낸 후, UpperFilters 부분에 내가 만든 필터 드라이버 클래스..
HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\PointerPort 여기에 레지스트리가 등록되있으면 Mouclass 드라이버가 IOCTL_INTERNAL_MOUSE_CONNECT 를 드라이버에게 부팅시에 알려줍니다. 이 곳에서 CONNECT_DATA 를 얻을 수 있다. http://support.microsoft.com/kb/102990
[ Application에서 처리 ] // 1. Application에서 Driver와 이벤트 공유를 위해서 Named Event 객체 생성. m_hWaitEvent = CreateEvent(NULL, FALSE, FALSE, "WaitUpdateEvent"); // 2. Driver에서 이벤트 공유를 위한 시점을 알려 주기 위한 IOCTL Code 선언. #define IOCTL_EVENT_SETTING CTL_CODE(FILE_DEVICE_UNKNOWN, 0x800, METHOD_BUFFERED, FILE_ANY_ACCESS) // 3. Driver에게 IOCTL Code 전송. DeviceIoControl(pDev->hDevice, IOCTL_EVENT_SETTING, NULL, NULL, NULL..
드라이버에서 레지스트리를 읽고 쓰는 함수이다. 1、RtlQueryRegistryValues 读取所有的键值 NTSTATUS status; NTSTATUS STATUS; RTL_QUERY_REGISTRY_TABLE paramTable[2]; RtlZeroMemory(paramTable, sizeof(paramTable)); paramTable[0].QueryRoutine = GetDirAndKey; paramTable[0].Flags = RTL_QUERY_REGISTRY_TOPKEY; paramTable[0].Name = NULL; STATUS = RtlQueryRegistryValues(RTL_REGISTRY_USER, L"Software\\CryptionDirectory", ¶mTable[0], ..