반응형 훈, IT 공부79 C/C++/Window, 서비스에서 UI 실행시키기 서비스 UI에서 동작시키는법 [문제발생] 서비스에서 UI가 있는 A.exe 프로그램을 CreateProcess() API를 사용하여 실행을 시켰다. 실행은 되었지만 UI가 있는 프로그램임에도 불구하고 UI가 나타나지 않는다. 그 이유는 SYSTEM권한으로 실행되어서 UI가 발생되지 않았던 것이다. [문제분석] 윈도우는 기본적으로 User Interface, GDI, 커널 메인 객체를 제공한다. 커널은 안전하지만, UI, GDI는 그렇지 않기 때문에 추가적인 보안성을 제공하기 위해 윈도우는 Stations와 desktops을 사용한다. 각 윈도우 데스크탑은 세션과 윈도우 스테이션에 속하며, 각 세션에서 오직 한번에 하나의 테스크탑만이 활성되 될 수 있다. 그리고 그것은 반드시 WinSta0에 속해야 한다... 훈, IT 공부/C,C++,MFC 2019. 5. 10. Windbg, 디버깅 팁 Attach Process 한 상태에서 동작하다가 죽는경우 - pdb를 붙여둔 상태에서 작업진행 분석진행과정 - !analyze -v : windbg에게 분석을 맡긴다. - k : 콜스택 확인가능 - !teb : Thread Environment Block 표시 - !peb : Process Environment Block 표시 결과값으로 아래형태의 코드가 나타난다. - dps StackBase StackLimit : Display Word and Symbols 메모리값을 보여주고 그 값을 현재 가지고 있는 심볼과 비교하여 출력해준다. d*s 란 무엇인가 가운데 오는 d, q, p는 프로세서의 아키텍쳐를 의미한다. - p : Double Word 32bit - q : Quad Word 64bit - p .. 훈, IT 공부 2019. 4. 26. C++, Gdiplus 사용하여 png 생성하기 GDI+ 활용 회사에서 워터마크 관련하여 작업하는 중에 GDI+를 찾게 되었고, 이걸 이용해서 문제를 해결하였다. #include using namespace Gdiplus; 우선 Gdiplus를 사용하기 위해서는 헤더파일을 먼저 선언 해주어야한다. ▶ Gdiplus png 이미지파일 생성하기 // GDI+ 을 사용하기위한 설정 GdiplusInit gdiplusinit; ULONG_PTR gpToken; GdiplusStartupInput gpsi; if(GdiplusStartup(&gpToken, &gpsi, NULL) != Ok) { TRACE(_T("Do Not GDI+ initizlize!")); return ; } //GDI+ 폰트 생성 REAL rSize = 30; Gdiplus::Font .. 훈, IT 공부/C,C++,MFC 2018. 9. 9. [MFC]CreateFont 폰트 관련하여서. ▶ CFont::CreateFont BOOL CreateFont( int nHeight, int nWidth, int nEscapement, int nOrientation, int nWeight, BYTE bItalic, BYTE bUnderline, BYTE cStrikeOut, BYTE nCharSet, BYTE nOutPrecision, BYTE nClipPrecision, BYTE nQuality, BYTE nPitchAndFamily, LPCTSTR lpszFacename ); nHeight - 글자의 원하는 높이 지정. - 16~384 단위를 넘어가지 않도록 설정해야한다. nWidth - 글자의 넓이를 지정한다. - 0을 입력할 경우에는 사용가능한 글꼴의 가장 가까운 크기의 .. 훈, IT 공부/C,C++,MFC 2018. 8. 31. PHP. php를 이용한 폴더 다루기 php 폴더를 다루다. ▶ getcwd()함수원형string getcwd ( void ) 12345cs- 현재 작업중인 디렉토리의 경로를 얻는다. ▶ chdir()함수원형bool chdir ( string $directory )- 현재 디렉터리 변경하기- [ chdir('tmp') ] 현재 디렉터리에 'tmp' 폴더가 있다면 가능.- 예제는 위의 getcwd()를 참고하면 되겠습니다. ▶ scandir()함수원형array scandir ( string $directory [, int $sorting_order = SCANDIR_SORT_ASCENDING [, resource$context ]] ) 1234567cs- 해당 폴더에 있는 파일&폴더를 보여준다.- 두번째 인자는 출력될 정렬방식이다. - sca.. 훈, IT 공부/Html,CSS,PHP 2018. 8. 31. PHP, php를 이용한 파일 다루기 php 파일 관련▶ Copy()함수원형bool copy ( string $source , string $dest [, resource $context ] ) 12345678Colored by Color Scriptercs- 특정 대상 파일을 복사할때 사용한다. ▶ Unlink()함수원형bool unlink ( string $filename [, resource $context ] ) 1234567Colored by Color Scriptercs- 특정 파일을 삭제할때 사용한다. 파일 읽고 쓰기 ▶ file_get_contents()함수원형string file_get_contents ( string $filename [, bool $use_include_path = FALSE[, resource $cont.. 훈, IT 공부/Html,CSS,PHP 2018. 8. 28. [DLL Injection]CreateRemoteThread API DLL Injection API ▶ CreateRemoteThread()- DLL Injection 을 할때 많이 사용하는 방법이 CreateRemoteThread() API를 사용하는 것이다.- 윈도우는 CreateRemoteThread() API를 통하여 다른 프로세스에 스레드를 쉽게 생성할 수 있는 방법을 제공한다.함수의 원형HANDLE CreateRemoteThread( HANDLE hProcess, LPSECURITY_ATTRIBUTES lpThreadAttributes, SIZE_T dwStackSize, LPTHREAD_START_ROUTINE lpStartAddress, LPVOID lpParameter, DWORD dwCreationFlags, LPDWORD lpThreadId);- hP.. 훈, IT 공부/Reversing 2018. 8. 24. CPU에 관하여 코어,쓰레드,클럭,HT CPU의 스펙중에 코어가 머리속에서 확실하게 자리잡지 않아 정리해본다.▲ 다나와 CPU 정보 코어- CPU칩셋에 물리적으로 존재하는 코어 유닛 갯수이다. 명령어를 가져와 계산하고 해석하는 반도체 유닛이 n개 있다는 것을 뜻한다.- 쉽게 설명하자면 주방에 요리사 숫자가 n명 이라는 것과 동일하다. 쓰레드 - 논리적인 부분으로 접근해야한다. 한 코어에는 하나의 쓰레드를 가지고 작업한다. 기술의 발달로 현재는 하나의 코어가 두개의 쓰레드를 가지고 작업을 한다. - 쓰레드는 요리할 수 있는 프라이팬에 비유할 수 있다. 프라이팬이 m개 있다는것- 이 것을 응용하면 요리사(코어)n명이 프라이팬(쓰레드)를 m개 가지고 요리한다는 것을 의미한다. 하이퍼 스레딩(HT)- 물리적인(코어) 장치에 논리적인(스레드) 장치를 .. 훈, IT 공부/컴퓨터기초 2018. 8. 23. [MFC]트레이아이콘(Tray)과 풍선(Balloon) 알림 사용 트레이아이콘과 풍선알림 ▶ 트레이아이콘 Windows 운영체제에서는 트레이 아이콘이라는 것이 있습니다. 작업표시줄의 우측 하단을 통해서 살펴볼 수 있습니다. 누구나 쉽게 접할 수 있을 것입니다. 트레이아이콘을 응용하여서 메뉴, 알림, 툴팁 등 을 이용하여서 사용자에게 여러 편의성을 제공할 수 있다는 점이 큰 장점입니다. ▲ win10 트레이아이콘 목록 ▲ win7 트레이아이콘 목록 익숙하게 보던 것들입니다. 그리고 아이콘을 우측 클릭하면 발생하는것을 트레이 메뉴라고 합니다. 다른 프로그램들을 보게되면 트레이아이콘을 실시간으로 모양이 바뀌면서 재미난 모습을 보여주는 것들도 있습니다. 오늘은 그렇게 까지 응용하지는 않고 핵심 부분만 볼 것입니다. ▲ ToolTip 옵션 ▲ 트레이 메뉴 추가적으로 트레이 메뉴.. 훈, IT 공부/C,C++,MFC 2018. 8. 12. [궁금점]winApi WriteFile 함수의 동작 WriteFile 윈도우 API WriteFile BOOL WriteFile( // 반환값 : 성공이면 TRUE HANDLE hFile, // 파일 핸들 LPCVOID lpBuffer, // 기록할 데이터가 저장된 버퍼 DWORD nNumberOfBytesToWrite, // 기록할 최대 바이트수 LPDWORD lpNumberOfBytesWritten, // 실제로 기록한 바이트 수를 받을 변수의 주소 LPOVERLAPPED lpOverlapped // OVERLAPPED 구조체 주소 ); WriteFile은 윈도우 환경에서 파일에 출력할때 사용된다. 실험 WriteFile을 사용하던 중 신기한 경우를 찾아내어서 작성해본다. 파일의 인코딩이 변경된다?? 라는 것에 대한 의문점이다. ▲ 인코딩 파일 인코딩.. 훈, IT 공부/C,C++,MFC 2018. 6. 2. 궁금점, 파일을 읽을때 NULL 문자를 읽을까? NULL 문자!? 0x00 최근에 계속 프로젝트를 하다가 상사분의 조언을 들었다. 프로젝트의 특정 부분에 관한 말씀이셨는데, 파일을 Read하는 부분이었다. MFC에서 CFile을 이용해서 읽던 중 항상 읽어드리는 데이터를 저장하는 버퍼를 크기보다 'nLen+1' 하나 더 크게 항상 생성하였다. 이 부분에 의문의 두시고 질문은 하신 것이다. 나는 당연히 항상 기존문자열의 길이+1을 하여 저장을 하였기에 생각을 못했지만 실무자의 눈에는 썩 좋은 코드로 생각이 되지 않으셨던 것이다. 물론 유동적으로 사용하는 버퍼이면 NULL은 넣는것은 당연하지만 한번 읽는데 사용하는 버퍼의 경우에는 굳이 한바이트 더 넣어줄 이유는 없다는 것이다. 나의 경우에는 직접 경험하고 봐야지 기억을 하는 타입이라서 곧바로 나름 실험에.. 훈, IT 공부/C,C++,MFC 2018. 5. 31. [MFC] WM_MOUSEHOVER, WM_MOUSELEAVE 메시지 이용방법 MFC 마우스관련 메시지 핸들러 헷갈리는 부분 정리해봅니다. WM_MOUSEHOVER, WM_MOUSELEAVE WM_MOUSEHOVER, WM_MOUSELEAVE 메시지는 일반 메시지 처럼 메시지 함수를 추가한다고 해서 메시지를 처리하는 것이 아니라. WM_MOUSEMOVE 메시지 핸들러 안에서 TrackMouseEvent()함수를 이용하여 약간의 특별한 설정을 해주어야만 메시지가 발생하는 구조를 갖는다고 합니다. TrackMouseEvent()함수는 아래와 같이 4가지 메시지를 발생시킵니다. WM_NCMOUSEHOVER, WN_NCMOUSELEAVE, WM_MOUSEHOVER, WM_MOUSELEAVE 그러므로 WM_MOUSEMOVE 메시지를 처리하는 클래스에서 TrackMouseEvent()함수를 .. 훈, IT 공부/C,C++,MFC 2018. 5. 7. 이전 1 2 3 4 5 6 7 다음 반응형