Legacy/뇌자극 - WinSysProg
-
2015.03.08 메일슬롯 IPCLegacy/뇌자극 - WinSysProg 2015. 3. 8. 15:05
메일슬롯과 IPC에 대한 고찰메일슬롯은 한쪽 방향으로만 메시지를 전달할 수 있다.따라서 두 프로세스가 서로 메시지를 주고 받을 수 있는 채팅 프로그램을 구현하기 위해서는 두 개의 메일 스롯을 생성해야함.채팅 프로그램 같은 양방향 통신을 구현하기 위해서는 IPC가 적절함.메일슬롯은 브로드캐스팅 방식의 통신을 지원. 메일슬롯은 생성과 동시에 Usage Count가 1이다. 참조하는 프로세스가 메일슬롯을 생성한 프로세스 하나이기 때문이다. 자식 프로세스의 경우에는 생성과 동시에 참조하는 프로세스가 둘이 되기 때문에 2가 되는 것이다. 메일슬롯뿐만 아니라, 프로세스와 쓰레드를 제외한 다른 모든 커널 오브젝트는 생성과 동시에 Usage Count가 1이 된다. Signaled vs Non-Signaled커널오브젝..
-
2015.02.20 Inter Process Communication 프로세스간 통신Legacy/뇌자극 - WinSysProg 2015. 2. 19. 18:54
IPC(Inter-Process Communication) - 프로세스간 통신(IPC)프로세스 간에 서로 공유하는 메모리가 존재하면 프로세스간 통신은 아주 쉽지만, 그러한 영역이 없다면 보조 수단이 필요함. 실제로 프로세스들은 서로 '만나서' 데이터를 주고 받는 것이 불가능함.프로세스들이 서로 만날 수 없는 이유프로세스는 각자 자기에게 할당된 독립적인 메모리 공간을 가지게 된다. 이 때 프로세스들은 자신에게 할당된 메모리 공간 이외에는 접근이 불가능하다.왜 프로세스간에 만나지 못하게 디자인 했을까?레이스 컨디션과 같은 상황은 생각해 보면 쉬울 듯. Windows에서는 다양한 IPC 기법을 제공하고 있다. 메일슬롯 방식의 IPC메일슬롯은 파이프와 더불어 대표적인 IPC 기법이다. 메일슬롯은 편지를 넣을 수..
-
2015.01.24 뇌자극 명령 프롬프트 프로젝트Legacy/뇌자극 - WinSysProg 2015. 1. 24. 19:52
명령 프롬프트 프로젝트 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143#include #include #include #include #include #define STR_LEN 256..
-
2015.01.22 커널 오브젝트 Usage CountLegacy/뇌자극 - WinSysProg 2015. 1. 21. 09:56
커널 오브젝트와 Usage Count"커널 오브젝트는 프로세스에 종속적인 것이 아니라, 운영체제에 종속적인 관계로 커널 오브젝트 소멸시기는 운영체제에 의해서 결정된다."보통 커널 오브젝트를 생성한 주체가 커널 오브젝트를 소멸시킬 권한(소멸시킬 시점을 결정지을 권한)을 가지고 있다고 생각한다. 이는 맞는 말이지만, 커널 오브젝트를 생성한 주체가 누구냐는 오해할 소지가 있다. 커널 오브젝트를 생성한 주체는 CreateProcess 함수를 호출하는 프로그래머가 아니라, 이 함수의 호출을 받은 운영제체가 커널 오브젝트 생성의 주체이다. CloseHandle 함수에 대한 정확한 이해A라는 프로세스가 생성되면, A 프로세스를 위한 커널 오브젝트가 생성된다. 이때 커널 오브젝트는 완전히 프로세스를 대표하게 된다."프..
-
2015.01.20 커널 오브젝트Legacy/뇌자극 - WinSysProg 2015. 1. 20. 22:43
커널 오브젝트커널 : 운영하는 데 있어서 중심이 되는 운영체제 핵심 부분을 뜻함커널 오브젝트 : 커널에서 관리하는 중요한 정보를 담아둔 데이터 블록 운영체제가 프로세스를 관리하기 위해 프로세스에 관련된 몇몇 정보를 저장할 수 있어야 하고, 참조 및 변경도 가능해야 한다. 이를 위해 Windows 운영체제 개발자들은 구조체 하나를 정의하기에 이른다. 이 구조체는 프로세스 상태 정보를 저장하기 위해 정의한 것.프로세스가 생성될 때마다 이러한 구조체 변수가 하나씩 생성되고, 새롭게 생성된 프로세스 정보들로 초기화되는데, 이것이 바로 커널 오브젝트(Kernel Object)이다. 프로세스가 생성될 때에만 커널 오브젝트가 생성되는 것은 아니다. 프로세스 내에서 쓰레드를 생성할 때에도, IPC(Inter Proce..
-
CommandPrmpt_Two.cppLegacy/뇌자극 - WinSysProg 2015. 1. 19. 21:53
Colored By Color Scripter™123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384#include #include #include #include #include #define STR_LEN 256#define CMD_TOKEN_NUM 10 TCHAR ERROR_CMD[] = _T("'%s'은(는) 실행할 수 있는 프로그램이 아닙니다. \n"); int CmdProcessing(void);TCHAR * StrLower(TCHAR *); int _tmain(in..
-
CommandPrmpt_One.cppLegacy/뇌자극 - WinSysProg 2015. 1. 19. 21:50
Colored By Color Scripter™1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677#include #include #include #include #include #define STR_LEN 256#define CMD_TOKEN_NUM 10 TCHAR ERROR_CMD[] = _T("'%s'은(는) 실행할 수 있는 프로그램이 아닙니다. \n"); int CmdProcessing(void);TCHAR * StrLower(TCHAR *); int _tmain(int argc, TCHAR ..
-
2015.01.19 CreateProcess를 이용한 프로세스 생성Legacy/뇌자극 - WinSysProg 2015. 1. 19. 21:49
CreateProcess를 이용한 프로세스 생성AdderProcess.cpp Colored By Color Scripter™123456789101112131415#include #include #include int _tmain(int argc, TCHAR* argv[]){ DWORD val1, val2; val1 = _ttoi(argv[1]); val2 = _ttoi(argv[2]); _tprintf( _T("%d + %d = %d \n"), val1, val2, val1 + val2); _gettchar(); return 0;} CreateProcess.cpp Colored By Color Scripter™12345678910111213141516171819202122232425262728293031..