Windows_ 49

C# 키보드 후킹 예제

/* * http://sosal.kr/ * made by so_Sal */ https://gist.github.com/Stasonix/3181083 github에서 그대로 퍼왔습니다.아래 코드는 후킹한 후에 원래 목적지로 가지 않는다는점...원한다면 hookProc 함수에서 return (IntPtr)1; 을CallNextHookEx(hhook, code, (int)wParam, lParam);로 고쳐주시면 됩니다. using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.W..

Windows_/Windows_C# & App 2014.09.04 (2)

Windows :: 정적 라이브러리 만들기

/* * http://sosal.kr/ * made by so_Sal */ 1. 정적 라이브러리 만들기. 2. #pragma 명령어 사용하기 이번 포스팅은 그림과 Plus() 함수 기본 예제를 통해 설명해 나가도록 하겠습니다. 정적 라이브러리를 만들기 1.Win32 프로젝트를 생성합니다. Win32 project는 윈도우를 포함하여 DLL, static library 등을 만들 수 있습니다. 이름을 입력하여 생성한 후 을 누르지 말고, 다음을 누른 다음, 응용 프로그램 종류 :: 정적 라이브러리 아참, 지금 만드려는 라이브러리는 간단하게 살짝 짚고 가는거니.. 미리 컴파일된 헤더란에 체크를 풀고 마침 버튼을 ^-^; 그리고 하나의 헤더파일과 리소스 파일을 만들어 (소스, 리소스는 사실 차이가 없습니다.)..

Windows :: 라이브러리와 DLL

/* * http://sosal.kr/ * made by so_Sal */ 1. 라이브러리 2. DLL 3. DLL Export, Import 4. import library Library :: Static Library 함수, 데이터, 자료형 등 여러가지 프로그래밍 요소의 집합. 일반적으로 Library를 말하면 Statc library. 정적 라이브러리를 말한다. printf() 함수를 쓰기 위해서 #include 헤더파일을 추가해보았을 것이다. stdio.h :: extern int printf (__const char *__restrict __format, ...); 라는 구문이 있는데, 이 함수의 원형을 보자하면 끝이 없다. 이 굉장히 긴 코드를 단지 출력해주기 위해 매번 프로그램에 추가하는 것..

WinMain() , WNDCLASS 기본 윈도우 프로젝트

/* * http://sosal.kr/ * made by so_Sal */ 여기서 다룰 내용 int WinMain() struct WNDCLASS ShowWindow(); UpdateWindow(); GetMessage(); TranslateMessage(); DispatchMessage(); struct MSG int WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd); WinMain 함수는 윈도우 기반 응용 프로그램을 위한 초기 진입점으로서 커널에 의해서 호출됩니다. HINSTANCE hInstance 현재 윈도우 응용 프로그램의 Instance(메모리) 핸들 윈도우 95 이전에는 프로세스마다 메모리가..

Windows :: 커널모드 스레드 동기화

/* * http://sosal.kr/ * made by so_Sal */ 커널모드 동기화 :: 뮤택스 동기화 기법 :: CreateMutex() :: WaitForSingleObject() :: ReleaseMutex() :: 세마포어 동기화 기법 :: CreateSemaphore() :: WaitForSingleObject() :: ReleaseSemaphore() :: 다중프로세스 동기화 // 이름있는 뮤텍스, 세마포어 :: Named Mutex, OpenMutex() :: Named Mutex, OpenSemaphore() :: 예제들 뮤텍스는 세마포어의 일부에 포함되는 기능중 하나입니다. 유저모드의 CriticalSection 관련 동기화 함수와 마찬가지로, 단 하나의 스레드만 임계영역에 접근 ..

Windows :: 유저모드 스레드 동기화

/* * http://sosal.kr/ * made by so_Sal */ 동기화에 대해서 기본적인 지식이 없다면.. 링크를 잠깐 확인하고 오세요 :: LINK_ 임계영역 :: 둘이상의 스레드가 동시에 접근하는 위험요소를 지니는 코드 블럭 쉽게 동기화는 임계영역 위험요소에 의해 발생될 문제를 제거하는 것이라 할 수 있다. 임계영역은 어떤 메모리를 말하는 것이 아니라, 위험요소를 지닌 코드입니다. 이 포스트에서 살펴볼 유저모드의 동기화 입니다. (다음 포스트에 커널모드로 연재합니다.) 이번장에서 살펴볼 내용 :: 1. 크리티컬 섹션 기반 동기화 + 예제 :: void InitializeCriticalSection(LPCRITICAL_SECTION lpCriticalSection); :: void Enter..

Windows :: 스레드의 동기화

/* * http://sosal.kr/ * made by so_Sal */ 동기화 :: 작업들 사이의 수행 시기를 맞추는 것. 사건이 동시에 일어나거나, 일정한 간격을 두고 일어나도록 시간의 간격을 조정하는 것을 이른다. 임계영역 :: 둘이상의 스레드가 동시에 접근하는 위험요소를 지니는 코드 블럭 쉽게 동기화는 임계영역 위험요소에 의해 발생될 문제를 제거하는 것이라 할 수 있다. 그렇다면, 둘 이상의 스레드가 동시접근 하는것이 왜 위험요소인가? 간단히 예를 들겠습니다. 스레드 A와 B가 전역변수 int (0)를 1만큼 증가시킨다고 가정해보면. 스레드 A는 int (0)의 값을 가져와서 1을 증가시킨다음, 원래 int (0) 가 존재하는 메모리에 증가시킨 값(1)으로 int (1)를 대입합니다. 여기서 발..

Windows :: 스레드의 상태 컨트롤과 프로세스및 스레드의 우선순위

/* * http://sosal.kr/ * made by so_Sal */ 스레드의 상태는 프로세스의 상태를 떠올리시면 됩니다. 실제로 Windows에서 상태가 변화하는 주체는 프로세스가 아닙니다. 스레드가 변화하는 것입니다. 위 그림은 프로세스의 상태변화를 나타내는 대표적인 그림입니다. 위 상태를 나타내는 준비, 실행, 대기 (ready, running, block)에 관한 내용은 스레드의 상태를 나타낸다고 보셔도 무방합니다. :: 프로세스의 상태와 우선순위에 대한 자세한 내용을 잘 모르신다면 :: 링크로 " LINK_ " 프로세스 우선순위 설정 함수 BOOL SetPriorityClass( HANDLE hProcess, DWORD dwPriorityClass) 원하는 프로세스의 핸들을 첫 매개변수에 ..

Windows :: 스레드 생성 함수와 예제 // CreateThread _beginthreadex

/* * http://sosal.kr/ * made by so_Sal */ 스레드 (혹은 쓰레드, Thread) 에 대해서 잘 모르신다면 링크로~! ^-^ :: LINK_ /* * CreateThread() * ExitThread() * GetExitCodeThread() * _beginthreadex() * ResumeThread(); * _endthreadex() * ------------- */ Windows에서 쓰레드를 생성하는 가장 기본적인 함수는 CreateThread 입니다. HANDLE CreateThread( 1. LPSECURITY_ATTRIBUTES lpThreadAttributes, 2. SIZE_T dwStackSize, 3. LPTHREAD_START_ROUTINE lpStart..

Windows :: 윈도우즈 스레드(thread) 프로그래밍

/* * http://sosal.kr/ * made by so_Sal */ 동시에 원하는 일을 하기 위해서, 다중 프로세스를 이용하였습니다. (다중프로세스와 스케쥴러에 대한 내용은 링크를 참조하세요 :: LINK_) 다중프로세스는 프로세스간의 자원을 공유하지 않고, IPC라는 방법을 사용하여 통신을 해야 하기 때문에, 다중 프로세스 프로그래밍에서는 메모리 낭비, 컨텍스트 스위칭에 의한 속도 저하 등 단점이 많습니다. 위 문제점을 극복하기 위해서 스레드 기법을 사용하였습니다. 한 프로세스 내에 스택을 여러개 두어, IPC처럼 메모리 공유가 필요한 부분은 공유하는 구조를 만드는 것입니다. 한 프로세스 안에서 스택을 여러개 생성하여, 메모리 흐름을 여러개 만들어서 다중프로세스처럼 한 프로세스가 한번에 다양한 ..