순전히 포맷하고 이리저리 찾아서 설치하는것이 귀찮아서....

1. DebugView....
2. InstDrv...
3. WinObj...

Posted by hazeyun
,

Dialog에서 상태바 표시하기...

Step1. Dialog base의 프로젝트 생성...

Step2. indicator를 위해 ResourceSymbol에 ID_INDICATOR_TEST1, ID_INDICATOR_TEST2를 추가하고, string table에 string을 설정해 준다. (참고로 string table은 4번째 스샷에 파란 부분을 더블클릭 해주면 된다.)


위와 같이 하면 리소스 부분은 완료다.

Step3. 이제 Dialog클래스에 멤버 변수로 CStatusBar타입의 변수 하나를 생성한다.

Step4. Dialog클래스의 OnInitDialog() function에 초기화 코드를 삽입해준다.


Step5. build 후 실행 .



아래에 소스코드 첨부...
Posted by hazeyun
,

DDK에서는 C/C++에서 유용하게 사용하던 sprintf, strcat, strcpy... 등을 지원하지 않는다. 하지만 이 함수들을 대체하기 위해 안정적인 함수(?)들을 지원해 준다.

DDK help문서를 찾아 보면... Using Safe String Function에 대체 할 함수들이 설명되어 있다.
RtlString으로 시작하는 함수들이다.
하지만 이함수들을 Import하기 위해 처리해줘야 할 부분이 있다. 이것땜에 고생했내..바로 밑에 있는걸 못찾고 ㅡ_ㅡ;

To use the library versions of the kernel-mode safe string functions
Define NTSTRSAFE_LIB before including the new header file, as shown.
1. #define NTSTRSAFE_LIB
2. #include <ntstrsafe.h>
In your project's sources file, add a
3. TARGETLIBS=$(DDK_LIB_PATH)\ntstrsafe.lib
라고 나와 있는데.. 간단히 소스코드에 1,2번을 추가 해주고 SOURCES파일에 3번을 추가 해주면된다.
그럼 문제 없이 돌아간다~!! Good!

Posted by hazeyun
,

Simples Answer!!

2009. 2. 9. 23:35

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.


OpenProcess함수는 프로세스에 할당된 가상메모리를 Read/WriteProcessMemory를 이용하여 조작하기 위하여  많은 사람들이 사용하는 함수일 것이다. 물론 악의적으로도, 보안을 위해서도 사용되어 질 수 있다.

.
.
.

XP에서 Read/Write를 위해서는 간단히
HANDLE hTarget = OpenProcess(PROCESS_ALL_ACCESS, FALSE, dwPID);
를 해주면 된다. 그렇게 되면 해당 프로세스의 가상메모리에 접근할 수 있게 된다. 이 얼마나 간단한가!

.
.
.

But!!!!

.
.
.

망할 Vista......!
저렇게 해주고 실행파일을 생성해서 실행시키면 간단히 OpenProcess함수가 ERROR_ACCESS_DENIED!! 토해 주신다.. 어처구니 짜장이다.. 분명히 XP에서는 잘 돌아 갔더랬다. 잘나신 Vista의 관리자 모드 때문이다.!
열받아서 UAC를 무시하겠다 라고 맘먹었으나...... 구글링에 삽질의 삽질끝에 이미 태생이 관리자 모드가 아닌 프로세스는 별의 별짓을 다해도 남의 프로세스를 열수가 없더라~!

그래서 ShellExecuteEx를 사용해서 관리자 권한을 유도 하는 방법으로 커버했다...젠장!
Posted by hazeyun
,

일반적인 프로그램들을 보면 프로그램이 실행되어 있을경우 다시 실행 시키면 하나더 생기지 않고 기존에 생성되 있는 프로그램으로 포커스가 가능 경우가 있다.
보통의 mfc프로그램을 작성하면 이런 기능은 없다. 하지만 추가도 쉽고 의외로 쓸모도 있을것 이다.
 
Posted by hazeyun
,
step9 - 31337157
Posted by hazeyun
,

퀵정렬은 이름만 듣기에는 정렬 알고리즘중에서 가장 빠를것 같다는 오해를 불러 일으킬 수 있다. 하지만 퀵정렬은 정렬알고리즘 가운데 가장 빠른 알고리즘은 아니다. 하지만 실용적인 속도는 보장한다. 그리고 전형적인 재귀 알고리즘이지만 비재귀로도 가능하기에 꽤나 괜찮은 알고리즘 중에 하나다.

특징적인 것은 Pivot을 두고 왼쪽은 Pivot보다 작은 데이타 오른쪽은 Pivot보다 큰 데이타 이런식으로 정렬 해나가는 알고리즘이다. 이것을 재귀적으로 수행해 나가며 최후에 분할된 데이터의 사이즈가 1이 될경우 종료된다.

퀵정렬의 구현은 아래와 같다. 참고 도서에는 피벗을 우측에 데이터로 해서 구현해 뒀는데 난 반대로 좌측에 두고 구현해 보았다.


<성능 테스트>
 데이터 갯수  수행시간
 10000  2
 20000  4


난수라서 다행히 스택 오버 플로우는 발생하지 않았다. 하지만 역순이라면 스택오버 플로우가 발생하게 된다. 이를 방지하기위해 비재귀로 바꿔줄 필요가 있다.
이는 추후에 추가를
Posted by hazeyun
,

쉘정렬은 삽입정렬의 취약점을 보완하고자 나온 정렬 알고리즘인데 변위를 하나 두어서 변위 간격의 요소들을 뽑아서 삽입정렬 변위를 줄이고 다시 삽입정렬.. 이렇게 해나가다 변위가 1이 되면 삽입정렬을 하고 종료한다.
이렇게 변위를 두기 때문에 삽입정렬에 루프가 두개나 더 추가된다.
하지만 여러가지 자료에는 삽입정렬보다 뛰어난 성능 이라고 설명되어있다. 그리고 돌려봤더니 왠걸 삽입정렬 보다 한참 느렸다.
.
.
한참 헤매다가 혹시나 해서 Release 버전으로 돌렸더니..
헉 삽입정렬 보다 빠르다는 사실..! 나를 당혹케 했다 ㅋ

아래는 구현이다.


<성능 테스트>
 데이터 갯수  수행 시간
 10000  492
 20000  1844

p.s. 위의 테스트는 Debug모드로 수행했기에 삽입정렬보다 느리게 측정되었다. Release모드시 0이다.
나중에 날잡아 Release로 모드 테스트 해봐야겠다.
Posted by hazeyun
,

커품 정렬은 배열의 인접요소를 비교하여 교환하는 방법의 알고리즘인데 이것이 마치 거품이 보글보글하는 모양이라고 해서 거품 정렬이라 한다.
공부하기로 거품정렬이 정렬알고리즘 중에서 가장 느리고 형편없는 알고리즘이다. 얼마나 느리고 형편없는지 아래 테스트 결과를 다른알고리즘과 비교해 보면 알 수 있을 것이다.

아래는 버블정렬의 구현이다.


<성능 테스트>
 데이터 갯수  수행 시간
 10000  383
 20000  1498
Posted by hazeyun
,