월 22,000원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 해결됨Windows 시스템 프로그래밍 - 기본
WaitForSingleObject 함수 질문
WaitForSingleObject 함수 질문드립니다. 핸들을 넘겨주고 해당 스레드의 상태가 변화하는지를 체크한다고 하셨는데, 여기서 말씀하신 변화라는게 어떤 것을 말씀하시는걸까요?
- 해결됨Windows 시스템 프로그래밍 - 기본
세마포어 예제 소스 코드 문의
안녕하세요 강사님세마포어 개념을 이해하려고 노력중입니다 ㅎㅎ강의 보며 소스코드를 따라치면서 이해해보도록 노력하고 있습니다.아래와 같이 실행하니, 보안에러가 발생하고 있습니다.혹시 제가 소스코드를 잘못작성한건지, 실행환경설정을 바꿔주면 실행되는지 문의 드립니다.#define CRTSECURE_NO_WARNINGS #include <iostream> #include <string.h> #include <Windows.h> #include <process.h> #include <conio.h> // Semaphore를 이용한 동기화 HANDLE g_hSema; TCHAR g_StringList[10][64] = { 0 }; UINT WINAPI ThreadSemaphore(LPVOID param) { int nIndex = (int)param; while (TRUE) { ::wsprintf(g_StringList[nIndex], TEXT("%d thred is Waiting"), nIndex); ::Sleep(500); DWORD dwResult = ::WaitForSingleObject(g_hSema, INFINITE); // g_hSema이 끝나기를 ::wsprintf(g_StringList[nIndex], TEXT("%d thred is Selected##"), nIndex); ::Sleep(500); ::ReleaseSemaphore(g_hSema, 1, NULL); } return 0; } int main(void) { g_hSema = ::CreateSemaphore(NULL, 3, 3, NULL); UINT nThreadId = 0; HANDLE hThread = NULL; // 핸들 생성 for (int i = 0; i < 10; i++) { hThread = (HANDLE)::_beginthreadex( NULL, 0, ThreadSemaphore, (LPVOID)i, 0, &nThreadId); } while (1) { system("cls"); for (int i = 0; i < 10; i++) { putws(gStringList[i]); } ::Sleep(1000); } return 0; } <에러 문구>
- 해결됨Windows 시스템 프로그래밍 - 기본
명시적 로딩 dll의 thread attach 관련 여쭤볼 부분이 있습니다
예시로 보여주신 부분 중에 명시적으로 main thread 에서 dll을 로딩하고 추가적인 thread를 생성했을 때 dllmain의 thread attach 이벤트가 호출되는데 얘기해주시는 설명에서는 thread 마다 dll을 명시적으로 로딩하고 프리해줘야 사용할 수 있다고 해주셔서요추가적으로 만든 thread에서 dll 명시적 로딩을 하지 않음에도 main thread에서 명시적 로딩한 dll의 dllmain의 thread attach 가 호출되는 부분이 궁금합니다 다른 thread에서 main thread 에서 명시적 로딩한 dll의 hmodule과 함수포인터를 얻어와 바로 사용해도 되는걸까요?강의 감사합니다!
- 해결됨Windows 시스템 프로그래밍 - 기본
vmware
안녕하세요개발 환경 운영체제 관련하여서 질문드립니다현재 인텔 맥북만 보유 중이어서 vmware fusion에 windows10을 올려서 실습을 할 예정입니다혹시 문제가 발생할 수도 있을까요? (만약 발생한다면 저는 어떠한 방법으로 하는 게 좋을까요?)감사합니다
- 해결됨Windows 시스템 프로그래밍 - 기본
본 강의를 통해서 얻어갈 수 있는 지식
C#을 통해 WinAPI, DLLImport를 통해 타사 어플리케이션을 조작하고 내용을 얻어오는 프로그램을 만들고 있습니다. 개발을 하면서 각종 오류 (SystemMemoryViolation 등)을 만나는 등 MSDN에서 읽는 것만으로는 해결이 안되고 벽을 느끼는 경우가 있는데 이 강의를 들으면 제가 만들려는 프로그램을 만드는 데 도움이 될까요? 도움이 안되더라도 어쨌든 컴퓨터 분야에서 많은 걸 넓게 알고 싶기에 계속 강의를 볼 계획이긴 합니다.
- 해결됨Windows 시스템 프로그래밍 - 기본
임계영역 기반 동기화 질문입니다.
안녕하세요. 시스템 프로그래밍 수업을 듣고 있는 수강생입니다. "임계영역 기반 동기화" 에서 질문이 있습니다. 해당 예제 코드는 ThreadFunc1과 ThreadFunc2가 경쟁적으로 SetString, GetString 하는 것을 CRITICAL_SECTION 으로 해결해보려는 예제로 인지했습니다. 그런데 main함수 초반에 hHandle에 ThreadFunc1쓰레드를 실행(_beginthreadex)하고 ::CloseHandle(hThread);를 했습니다. 저는 그래서 ThreadFunc1쓰레드가 종료되었다 생각하여 ThreadFunc1을 출력할 일이 없을거라 생각했습니다.하지만 실행결과는 ThreadFunc1과 ThreadFunc2이 랜덤으로 5번 출력되는데 왜 ThreadFunc1이 출력되는지 궁금합니다. 혹시 제가 간과한 개념이 있을까요??
- 해결됨Windows 시스템 프로그래밍 - 기본
파일 매핑 객체와 memcpy를 활용한 파일 복사 중, 왜 READ와 WRITE가 동시에 필요한가요?
안녕하십니까, 윈도우 시스템 프로그래밍 강의 듣고 있는 학생입니다. 메모리 맵 강의에서 소개해주신 숙제를 수행하던 중에 접근 모드를 설정하는 부분에 사소한 의문이 있어서 질문드립니다.작성한 코드의 흐름은 대략 다음과 같습니다.CreateFile()src파일과 dst파일의 핸들을 획득.GetFileSizeEx()src파일의 크기를 획득SetFilePointer()dst파일의 크기를 설정, 2번의 값을 활용CreateFileMapping()각 파일의 매핑 객체 생성MapViewOfFile()각 파일 매핑 객체에 대한 포인터를 획득memcpy()각 파일에 대한 매핑 객체의 포인터와 파일의 크기로 파일의 복사첫 시도에서 다음과 같이 1번과 4번을 수행했습니다.<실패>// 1번. dst 파일 생성 HANDLE hDst = CreateFile( TEXT("복사 대상 파일의 절대 경로"), GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL );HANDLE hDstMap = CreateFileMapping(hDst, NULL, PAGE_WRITECOPY, 0, llFileSize.LowPart, NULL); if (hDstMap == NULL) { wprintf(L"Failed to create Dst file mapping obj [ERROR CODE: %d]\n", ::GetLastError()); CloseHandle(hSrcMap); CloseHandle(hSrc); CloseHandle(hDst); return 0; }수행 결과, Dst파일에 대한 맵뷰 객체를 생성하는데 실패했고, ERROR_ACCESS_DENIED에러 코드를 받았습니다.MSDN에서 CreateFileMapping()에 대해서 찾아본 결과, PAGE_WRITECOPY플래그가 PAGE_READONLY와 동일하다는 점을 확인하고 다음과 같이 수정하여 실행에 성공했습니다.<성공>HANDLE hDst = CreateFile( TEXT("복사 대상 파일의 절대 경로"), GENERIC_WRITE | GENERIC_READ, // 왜 GENERIC_WRITE만 설정하면 ERROR_ACCESS_DENIED인가요? 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL );HANDLE hDstMap = CreateFileMapping(hDst, NULL, PAGE_READWRITE, 0, llFileSize.LowPart, NULL); if (hDstMap == NULL) { wprintf(L"Failed to create Dst file mapping obj [ERROR CODE: %d]\n", ::GetLastError()); CloseHandle(hSrcMap); CloseHandle(hSrc); CloseHandle(hDst); return 0; }MSDN에서 문제를 해결했지만, dst 파일에는 복사한 내용을 써넣기만 하는데 왜 dst파일에 대한 READ가 필요한지 의문이 들어서 이에 질문드립니다. 긴 글 읽어주셔서 감사드립니다.
- 해결됨Windows 시스템 프로그래밍 - 기본
실행 중인 프로세스에 대한 질문
선생님 안녕하세요, 강의 재밌게 보고 있는 수강생 중 한명입니다"실행중인 프로세스 열거"를 듣고 있다가 하나의 궁금증이 생겨서 질문합니다. 영상을 이해한 바로는 시스템에서 실행중인 Process Handle 과 그 process가 사용한 메모리에 권한만 충족한다면 접근할 수 있다고 이해했습니다.그런데 여기서 제가 소유하지 않은 프로그램에 접근해서 메모리와 정보를 읽는 프로그램을 만들고 배포 유통 까지 하면 현행법상 문제가 발생하나요? 예를들어서, 어떤 회사가 A라는 프로그램을 만들었는데 그 프로그램을 모니터링하는 프로그램을 제가 출시한다면 거기에 따른 법적 제약이 있는지 선생님 경험의 바탕에서 궁금합니다. OS위에 돌아가는 process 간의 접근 제약이 그렇게 크지 않다는 것을 보고 갑자기 흥미로운 질문이 들어서 질문합니다 :D질문 봐주셔서 감사하고 강의의 주제에 다소 벗어나는 질문인 것 같지만 가볍게라도 답변해주셨으면 감사하겠습니다.
- 해결됨Windows 시스템 프로그래밍 - 기본
프로세스 힙 확인에 대한 질문이 있습니다.
안녕하세요 선생님프로세스 힙 상태 확인 예제 코드 결과에서 나온 region은 allocation size 인 64KB 인것 같은데왜 block은 32KB인가요? 전 강의에서는 Allocation size (64KB), page size (4KB) 이렇게 나온것 같은데 그냥 새로운 논리적 구분 범위가 또 있다고 생각하면 되나요?
- 해결됨Windows 시스템 프로그래밍 - 기본
친화력 조절 (꼼수)에 관한 질문입니다.
안녕하세요 선생님 꼼수관련 질문이 2개 있습니다.1) 문제가 생긴 프로그램이 multi threading 때문에 context switching이 자주 일어나서 2시간만 지나면 고장나는 것인가요?2) 이를 하나의 프로세스로 고정시키면 여전히 context switching 이 일어나더라도 cpu core가 완전히 바뀌는게 아니라 좀 더 손쉬운 context switch가 일어나서 부하가 덜간다... 이런 느낌으로 이해하면 맞을까요?
- 해결됨Windows 시스템 프로그래밍 - 기본
소스코드 분석 팁 관련 질문입니다.
안녕하십니까, 시스템 프로그래밍 강의를 수강중인 문민철입니다.강의를 듣다가, F12 키를 이용해서 시스템 함수들을 확인해 보고 있습니다. (ex: synchapi.h의 CreateEventW 함수)헤더 파일은 함수의 선언만 되어 있고, 실제 내부 정의는 소스 파일에 되어 있을 텐데, visual studio에서 함수 선언 코드 -> 함수 정의 코드로 빠르게 넘어갈 수 있는 팀이 혹시 있을까 하여 질문드립니다.감사합니다!
- 해결됨Windows 시스템 프로그래밍 - 기본
GetString 에서 free하지 않고 가져오기만 했을 때는 동기화가 필요없나요?
강의에서 GetString 도 free(...) 를 호출하고 = NULL; 을 호출하기에 WRITE 요소가 있어 동기화가 필요하다 얘기해주셨는데 그렇다면 정말 sprintf_s 로 버퍼를 복사해오는 읽기만 있다면 GetString 함수를 동기화할 필요가 없나요? 두 Worker Thread에서 free(...) 를 호출한 이후에 Main Thread 에서 그 값을 버퍼로 복사해오는 읽기 작업을 한다면 제대로된 문자열을 복사해오지 않을 수 있을 것 문제가 발생할 수 있어보여서여A Thread는 WRITE / B Thread는 READ 만 했을 때 READ함수에는 동기화를 하지 않아도 되는지 궁금합니다.
- 해결됨Windows 시스템 프로그래밍 - 기본
SECURITY_ATTRIBUTES 구조체 # 0:49 쯤 에 질문있습니다.
안녕하세요 선생님 질문이 있습니다.제가 자바의 intellij에 익숙해서 선생님이 하신것 처럼 _SECURITY_ATTRIBUTES#lpSecurityDescriptor 다음에 SECURITY_DESCRIPTOR 로 넘어가시는데 1번째 구조체에서 뭘 참조해서 넘어가신것인가요? 1번째 구조체는 CreateProcess를 타고 들어가서 찾을 수 있었는데 2번째 구조체는 ctrl+shift+f로 밖에 못찾겠습니다. 어떻게 연결되는것인가요?아니면 연결이 안되고 그냥 별도의 구조체로 존재한다 봐야하나요?
- 해결됨Windows 시스템 프로그래밍 - 기본
스레드에 대한 기본 이론에서
14:33 에서 idle time 개념을 잘모르겠습니다