본문 바로가기

WinNT 계열에서 프로세스 강제종료하기 Windows에서 프로세스를 강제 종료하려면 TerminateProcess() API를 사용하면 된다. 그런데 Windows NT 계열에서 TerminateProcess()를 사용하려면 PROCESS_TERMINATE 접근 권한을 가지는 프로세스 핸들이 필요하다. OpenProcess()로 PROCESS_TERMINATE 접근 권한의 프로세스 핸들을 얻을 수 있는데 그 전에 먼저 SeDebugPrivilege 권한을 획득해야 한다. 따라서 프로세스를 종료하기 위한 절차는 다음과 같다. 1. 현재 프로세스의 권한을 변경하기 위한 액세스 토큰의 핸들을 가져온다. OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hTok..
윈도우 강제(자동)종료, 재부팅, 로그오프 TOKEN_PRIVILEGES ns; HANDLE htoken; LUID LID; LUID_AND_ATTRIBUTES att; if(!OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES, &htoken)) { MessageBox("Process token을 열 수 없습니다.\n"); return; } if(!LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME, &LID)) { MessageBox("Privilege를 찾을 수 없습니다.\n"); return; } // Shutdown privilege 활성화 att.Attributes = SE_PRIVILEGE_ENABLED; att.Luid = LID; // Privi..
API의 기본 정의 API란 Application Programming Interface의 약자이며, 우리말로 풀어본다면 운영체제가 응용 프로그램을 위해 제공하는 함수의 집합이라고 정의할 수 있다. 운영 체제는 하드웨어와 응용 프로그램 사이에 위치하며 응용 프로그램을 대신하여 하드웨어를 관리하고 메모리를 관리하느 시스템 소프트웨이다. 특정 운영체제에서 실행되는 응용 프로그램은 운영체제에 종속적일 수 밖에 없으며 운영체제가 규정한 바대로 하드웨어를 엑세스해야 한다. 또한 윈도우즈와 같은 멀티 태스킹 운영체제의 경우 응용 프로그램간 상호작용을 할 때도 운영체제의 규정을 따라야만 한다. 그러나 현식적으로 응용 프로그램 개발자들이 이러한 운용체제의 내부 동작까지 속속들이 이해하고 있을 수는 없다. 그래서 운영체제는 가장 기본적인 ..
MessageBox() 사용법 int MessageBox(HWND hWnd, LPCTSTR lpText, LPCTSTR lpCaption, UINT uType); hWnd 메시지 박스의 오너(Owner) 윈도우이다. 오너 윈도우란 메시지 상자를 소유한 윈도우를 말하며 메시지 박스는 오너 윈도우의 중앙에 나타나며 메시지 박스가 떠 있는 동안 오너 윈도우 는 사용할 수 없는 상태가 된다. 메시지 박스를 닫아야만 오너 윈도우를 사용할 수 있다. lpText 메시지 박스에 출력할 문자열 lpCaption 메시지 상자의 타이틀 바에 나타날 제목 문자열 uType DWORD값 참조 값 설명 MB_ABORTRETRYIGNORE Abort, Retry, Ignore 세 개의 버튼이 나타난다. MB_OK OK버튼 하나만 나타난다. MB_OKCANCE..
DrawText() 함수 nt DrawText( HDC hDC, LPCTSTR lpString, int nCount, LPRECT lpRect, UINT uFormat ); lpString 출력할 문자열 nCount 어디까지 출력할것인지 lpRect 지정한 사각형틀 안에서 uFormat DWORD표 참조 DrawText의 4번째 인수는 이 구조체의 포인터이며 문자열이 출력될 사각 영역을 지정한다. 첫번째 인수는 물론 hdc이며 두번째 인수가 출력할 문자열, 세번째 인수는 출력할 문자열의 길이이되 이 값이 -1이면 널 종료 문자열로 간주한다. 다섯 번째 인수 uFormat은 DrawText 함수가 문자열을 출력할 방법을 지정하는 플레그이다. 값 설명 DT_LEFT 수평 왼쪽 정렬한다. DT_RIGHT 수평 오른쪽 정렬한다. DT_..
CFileDialog의 모든것 CFileDialog 정의 CFileDialog(BOOL bOpenFileDialog, LPCTSTR lpszDefExt = NULL, LPCTSTR lpszFileName = NULL, DWORD dwFlags = OFN_HIDEREADONLY | OFN_OVERWITEPROMPT, OPCTSTR lpszFilter = NULL, CWnd *pParentWnd = NULL) bOpenFileDialog TRUE:열기, FALSE: 다른 이름으로저장 lpszDefExt 기본 확장자. lpszFileName 대화상자가 처음 출력되었을 때 "파일 이름" Edit 컨트롤에 출력될 파일명 지정 dwFlags OFN_EXPLORER 윈도우 탐색기 스타일로 출력 OFN_ARROWMULTISELECT 파일을 한번에 ..
Places Bar 만들기 파일 열기나, 저장시 사용하는 공통대화상자의 왼쪽의 등이 등록된 메뉴를 Places Bar 라고 부릅니다. 이 바는 윈도우즈 2000부터 지원되는 기능입니다. 따라서 95, 98, ME, NT4.0까지는 지원되지 않죠. 그런데 CFileDialog는 모든 윈도우에서 공통으로 사용되는 클래스입니다. 즉 CFileDialog 클래스를 이용해서는 Place Bar 를 사용할 수 없습니다. 다음과 같이 직접 API를 호출해서 파일 다이얼로그를 띄우거나, OPENFILENAME ofn; memset(&ofn, 0, sizeof(ofn)); ofn.lStructSize = sizeof(ofn); int nResult = ::GetOpenFileName(&ofn) 아니면 CFileDialog로부터 상속 받고 GetO..