일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- sudo
- VIM
- DevOps
- docker container
- 루비
- 리눅스
- port
- ubuntu
- ssh command
- VPN
- QT
- RUBY
- 도커
- 우분투
- Chef
- driver
- docker registry
- golang
- VMware
- docker
- 패키지
- opsworks
- Linux
- 방화벽체크
- 드라이버
- AWS
- window size
- docker-compose
- Openswan
- ssh
- Today
- Total
구리의 창고
응용 프로그램이 다중 모니터 환경을 직접 다루거나 다중 모니터로 인한 문제점을 해결하려면 먼저 시스템에 장착된 모니터에 대한 정보를 조사해야 한다. 다음 함수는 시스템의 모든 모니터 또는 특정 DC와 관련된 모니터를 열거한다. BOOL EnumDisplayMonitors(HDC hdc, LPCRECT lprcClip, MONITORENUMPROC lpfnEnum, LPARAM dwData); hdc와 lprcClip 인수에 대해서는 잠시 후 따로 정리해 보기로 하되 이 값이 둘 다 NULL이면 모든 모니터가 열거된다. lpfnEnum 인수는 모니터가 발견될 때마다 호출될 콜백 함수이며 dwData는 이 함수로 전달될 사용자 정의값이다. 콜백 함수는 다음과 같은 원형을 가진다. BOOL CALLBACK M..
목차 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
SetCursorPos()를 사용해서 마우스 위치를 지정 할 수 있다. 하지만, 클릭이나 드래그 같은 기능은 구현 할 수 없다. 그래서 SendInput()이란 함수를 이용하면 된다. 헤더파일은 windows.h 이다. 아래는 마우스 왼쪽버튼을 클릭 한 후, 다시 복구시키는 소스이다. INPUT an_input; an_input.type = INPUT_MOUSE; an_input.mi.dx = 0; an_input.mi.dy = 0; an_input.mi.mouseData = 0; an_input.mi.dwFlags = MOUSEEVENTF_LEFTDOWN; an_input.mi.time = 0; an_input.mi.dwExtraInfo = 0; SendInput(1, &an_input, sizeof ..
[ 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..
콘솔모드로 간단히 어플을 테스트하다가 타이머를 사용 할 일이 생겼다. StartTimer란 기본적으로 WinAPI에서 제공하는 함수이므로 스레드를 사용해야한다. 스레드 함수 원형은 아래와같다 uintptr_t _beginthread( void( *start_address )( void * ), unsigned stack_size, void *arglist ); uintptr_t _beginthreadex( void *security, unsigned stack_size, unsigned ( *start_address )( void * ), void *arglist, unsigned initflag, unsigned *thrdaddr ); 간단한 사용방법은 아래와 같다 _beginthread(Handler..
드라이버에서 레지스트리를 읽고 쓰는 함수이다. 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], ..
일단.. 인터럽트 전송 전용 URB를 만든다. 지금부터 할 방법으로는 데이터를 받아오기 위해선 두 개의 함수가 필요하다 한 개는 urb를 생성하는과정이고, 한 개는 데이터를 처리하면서 다시 urb를 생성하게해준다. UsbBuildInterruptOrBulkTransferRequest() 함수를 이용해 URB를 생성해준다. 그리고 IoSetCompletionRoutine() 함수를 이용해서, Irp와 인터럽트가 들어왔을 때 호출 할 함수를 등록해준다. NTSTATUS StartInterruptUrb( PDEVICE_EXTENSION pdx ) { // If the interrupt polling IRP is currently running, don't try to start // it again. BOOL..