Windows_/Windows32_API 19

Windows :: Named Pipe를 이용한 프로세스간 통신

/* * http://sosal.kr/ * made by so_Sal */ 앞서 Windows 09. Pipe를 이용한 프로세스간 통신 / 포스트에서 파이프에 대한 내용을 알아보았습니다. 일반 Pipe는 양방향 통신을 사용하며, 핸들을 기반으로 통신합니다. 따라서 핸들을 주고받을 수 있는 프로세스들 (흔히 부모-자식)처럼 특별한 관계가 있는 프로세스들끼리만이 통신할 수 있는 기법이었습니다. 하지만 Named Pipe는 파이프의 이름만 알고있다면 어떠한 관계에 있는 프로세스라도 통신이 가능하게 됩니다. 그럼 Named Pipe의 생성과정에 사용되는 함수들은? // 서버가 하는일 // CreateNamedPipe() -> ConnectNamedPipe(). CreateNamedPipe를 이용해서 파이프를 생..

Windows :: 윈도우 핸들찾기, pid를 이용하여 핸들 가져오기

/* * http://sosal.kr/ * made by so_Sal */ 음.. 이번 포스트에서는 음.. 사실 06 커널오브젝트, 핸들내용에서 넣지못한 글을 간단히 정리해서 올리려고 합니다. :: struct PROCESS_INFORMATION :: FindWindow() :: FindWindowEx() :: OpenProcess() :: CloseHandle() 이것들을.. 살펴보고자 합니다 ^-^ PROCESS_INFORMATION 구조체를 선언하여 CreateProcess 함수의 인자로 쓰기는 해보았는데, 가져와서 이용을 한적이 없어요. 한번 살펴보죠. 흠. typedef struct _PROCESS_INFORMATION { HANDLE hprocess; //프로세스의 핸들 HANDLE hproc..

Windows :: 커널 오브젝트, 핸들 object Handle

/* * http://sosal.kr/ * made by so_Sal */ 커널 오브젝트 :: 커널에 의해 관리되는 리소스 정보를 담고 있는 Data block. 커널? :: 모든 운영체제들이 가지고 있는 핵심이 되는 부분. 우리가 프로세스 실행을 명령하면, 그 일을 수행하는것은 커널이다. //사실 운영체제와 커널은 초기에 같은의미로 쓰였지만, 운영체제라는 단어의 의미가 //점점더 확장되면서 (상업적이라던지, 사용자의 편의를 위한 부분 등..) 하는일이 //더 많아지면서 다른 의미로 쓰이지만, 사실 운영체제를 공부한다고 한다면 //커널을 공부한다고 생각하시면 되겠습니다. 다양한 링크리스트나 트리같은 자료구조의 경우에는 프로그래머가 정보들을 직접 다루고 있다고 할 수 있습니다. 하지만 프로그래머가 프로세스..

Windows :: 프로세스와 스케쥴러 동작

/* * http://sosal.kr/ * made by so_Sal */ 프로그래밍을 직접 해보기에 앞서서 프로세스와 스케쥴러에 대해서 공부하겠습니다. 프로세스란? :: 메인 메로리로 이동하여 실행중인 프로그램 프로세스의 범위 메모리구조 + 레지스터 set 프로세스 별 독립적인 대상은 프로세스의 범주에 포함시킬 수 있다. 램보다 더 큰 공간을 할당받았다고 가정하였을때, 메인메모리에 다 들어갈 수 없으므로 하드디스크까지 그 영역을 확장시키게 됩니다. (Virtual Memory 사용) 메인메모리 뿐만 아니라 더 넓은 범위까지 포함합니다. 프로세스의 실행 프로그램을 실행시킨다는것에서 CPU를 가장 먼저 떠올리는데, 이는 ALU가 있기 때문이죠. (기본 연산장치) 이보다 더 중요한것은 register set..

Windows :: 문자셋 종류, MBCS, WBCS

/* * http://sosal.kr/ * made by so_Sal */ 문자셋의 종류와 특성 SBCS (Single byte Character set) 문자를 표현하는데 1바이트 사용. - ASCII Code MBCS (Muiti Byte Character Set) 한글은 2바이트, 영문은 1바이트 - Multi : 문자열의 종류에 따라 다른 크기를 가진다. WBCS (Wide Byte Character Set) 문자를 표현하는데 2바이트 사용. - UNICODE 안정적이기 때문에 많이 사용한다. #include #includeint main(void){ char str[] = "ABC한글"; int size = sizeof(str); int len = strlen(str); printf("배열의 크..

Windows :: IPC MailSlot을 이용한 프로세스간 통신

/* * http://sosal.kr/ * made by so_Sal */ 프로세스간 통신? :: 독립된 두 A, B 프로세스가 서로 데이타를 주고 받는것, or 메모리 공유 보통 하나의 프로그램이 하나의 프로세스라고 생각하시는 분이 많으신데, 하나의 프로그램이 여러개의 프로세스를 생성하는 경우도 많습니다. (특히 서버측 프로그램이 다중 프로세스로 구현되는 경우가 많습니다.) 다중 프로세스 프로그램의 경우, 각각의 프로세스가 서로 데이타를 주고받는 경우가 십중팔구입니다. 흔히 A라는 프로세스가 B에게 하나씩 데이타를 send 해주고, B 프로세스는 A가 보내는 정보를 recieve 한다고 생각합니다. 하지만 프로세스간 통신은 메모리 공유한다는것이라는 엉뚱한 결론이 도출됩니다. 곧 프로세스간 통신은 메모리..

WinAPI / IPC 메일슬롯 단방향 통신 예제

/* * http://sosal.kr/ * made by so_Sal */ Windows 08. IPC 프로세스간 통신 예제소스 입니다. 잘 이해가 안되는 부분이 있다면 아래 링크를 참조하세요. LINK_ ======================= Receiver ======================= #include #include #include#define SLOT_NAME _T("\\\\.\\mailslot\\Mail")int _tmain(int argc,TCHAR *argv[]){ HANDLE hMailSlot; TCHAR messageBox[BUFSIZ]; DWORD bytesRead; hMailSlot = CreateMailslot( //우체통 생성!! SLOT_NAME, 0, MAILS..

Windows :: 프로세스 정보 추출하기

/* * http://sosal.kr/ * made by so_Sal */ 이번장에서는 프로세스들의 정보를 순간적으로 가져오는 Snapshot과 정보를 추출, 그 정보를 얻어오는 법을 이 포스트에서 보려고 합니다. 그리고 프로세스 정보를 통해서 어떤일을 할 수 있을까?? 프로세스 정보(프로세스 이름 , PID, PPID , ThreadID 등등..)을 통해 프로세스 핸들값을 도출해낼 수 있습니다. 차근차근 위의 일을 수행하는 함수를 보려고 합니다. 다음 헤더파일은 아래 함수들을 포함. #include 프로세스들의 정보를 가져오기 위해서 스냅(사진찍기)를 해야한다. 단, 사진 찍는 순간의 프로세스 정보를 가져오기 때문에 100% 신뢰할 수 없는 정보이다. (스냅샷 찍는 함수) HANDLE CreateToo..

Windows :: CreateProcess, STARTUPINFO

/* * http://sosal.kr/ * made by so_Sal */ 윈도우는 다중 태스킹 운영체제입니다. 한 시점에서 여러 개의 프로그램들이 실행되는데, 각 실행중인 프로그램은 하나의 프로세스가 되고, 하나의 프로그램이 여러개의 프로세스를 생성할 수 있습니다. 따라서 여러 사용자들이 하나의 프로그램을 실행시켜 프로세스를 생성할 수 있고, 하나의 프로세스가 또다른 프로세스를 생성할 수 있습니다. 시스템 자체도 시스템 자원을 관리하고 사용자 접근을 제어하기 위해 여러 개의 프로그램들을 실행 합니다. 프로세스 :: 시스템 자원들을 포함하는 하나의 주소공간 프로세스는 프로그램 코드, 자료, 변수들, 열린 파일들, 그리고 환경으로 구성됩니다. 하드 메모리에 저장되어 있는 프로그램을 시스템 메모리에 끌어와 ..