Windows 자동 실행 위치  

DiamondCS 에서 제공하는 Autostart Guard, Autostart Viewer 프로그램이 모니터링하는 Windows 자동 실행 위치의 리스트 입니다.

웜, 바이러스 등에 감염되었을 때 한번쯤 살펴봐야 할 곳들이죠.


Autostart Locations are listed in no particular order.


Registry Autostart Locations

HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run\
All values in this key are executed.

HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunOnce\
All values in this key are executed, and then their autostart reference is deleted.

HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunServices\
All values in this key are executed as services.

HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunServicesOnce\
All values in this key are executed as services, and then their autostart reference is deleted.

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run\
All values in this key are executed.

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunOnce\
All values in this key are executed, and then their autostart reference is deleted.

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunOnce\Setup\
Used only by Setup. Displays a progress dialog box as the keys are run one at a time.

HKEY_USERS\.Default\Software\Microsoft\Windows\CurrentVersion\Run\
Similar to the Run key from HKEY_CURRENT_USER.

HKEY_USERS\.Default\Software\Microsoft\Windows\CurrentVersion\RunOnce\
Similar to the RunOnce key from HKEY_CURRENT_USER.

HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Winlogon
The "Shell" value is monitored. This value is executed after you log in.

HKEY_LOCAL_MACHINE\Software\Microsoft\Active Setup\Installed Components\
All subkeys are monitored, with special attention paid to the "StubPath" value in each subkey.

HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\VxD\
All subkeys are monitored, with special attention paid to the "StaticVXD" value in each subkey.

HKEY_CURRENT_USER\Control Panel\Desktop
The "SCRNSAVE.EXE" value is monitored. This value is launched when your screen saver activates.

HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager
The "BootExecute" value is monitored. Files listed here are Native Applications that are executed before Windows starts.

HKEY_CLASSES_ROOT\vbsfile\shell\open\command\
Executed whenever a .VBS file (Visual Basic Script)  is run.

HKEY_CLASSES_ROOT\vbefile\shell\open\command\
Executed whenever a .VBE file (Encoded Visual Basic Script) is run.

HKEY_CLASSES_ROOT\jsfile\shell\open\command\
Executed whenever a .JS file (Javascript) is run.

HKEY_CLASSES_ROOT\jsefile\shell\open\command\
Executed whenever a .JSE file (Encoded Javascript) is run.

HKEY_CLASSES_ROOT\wshfile\shell\open\command\
Executed whenever a .WSH file (Windows Scripting Host) is run.

HKEY_CLASSES_ROOT\wsffile\shell\open\command\
Executed whenever a .WSF file (Windows Scripting File) is run.

HKEY_CLASSES_ROOT\exefile\shell\open\command\
Executed whenever a .EXE file (Executable) is run.

HKEY_CLASSES_ROOT\comfile\shell\open\command\
Executed whenever a .COM file (Command) is run.

HKEY_CLASSES_ROOT\batfile\shell\open\command\
Executed whenever a .BAT file (Batch Command) is run.

HKEY_CLASSES_ROOT\scrfile\shell\open\command\
Executed whenever a .SCR file (Screen Saver) is run.

HKEY_CLASSES_ROOT\piffile\shell\open\command\
Executed whenever a .PIF file (Portable Interchange Format) is run.

HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\
Services marked to startup automatically are executed before user login.

HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Winsock2\Parameters\Protocol_Catalog\Catalog_Entries\
Layered Service Providers, executed before user login.

HKEY_LOCAL_MACHINE\System\Control\WOW\cmdline
Executed when a 16-bit Windows executable is executed.

HKEY_LOCAL_MACHINE\System\Control\WOW\wowcmdline
Executed when a 16-bit DOS application is executed.

HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Winlogon\Userinit
Executed when a user logs in.

HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\ShellServiceObjectDelayLoad\
Executed by explorer.exe as soon as it has loaded.

HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Windows\run
Executed when the user logs in.

HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Windows\load
Executed when the user logs in.

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\run\
Subvalues are executed when Explorer initialises.

HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\run\
Subvalues are executed when Explorer initialises.


Folder Autostart Locations

windir\Start Menu\Programs\Startup\
User\Startup\
All Users\Startup\
windir\system\iosubsys\
windir\system\vmm32\
windir\Tasks\

File Autostart Locations

c:\explorer.exe  
c:\autoexec.bat
c:\config.sys
windir\wininit.ini
windir\winstart.bat
windir\win.ini - [windows] "load"
windir\win.ini - [windows] "run"
windir\system.ini - [boot] "shell"
windir\system.ini - [boot] "scrnsave.exe"
windir\dosstart.bat
windir\system\autoexec.nt
windir\system\config.nt

'컴퓨터' 카테고리의 다른 글

아파치 재시작  (0) 2011.12.14
콘솔 리다이렉션  (0) 2011.12.09
리눅스 하위 폴더 용량 확인  (0) 2010.12.17
hosts파일 [ 윈도우 내부 DNS -> IP ]  (0) 2010.12.15
리눅스 커널 버전확인  (0) 2010.06.27


특정 도메인의 IP를 조작한다

C:\WINDOWS\system32\drivers\etc\hosts

안에

xxx.xxx.xxx.xxx dns.dns.dns

127.0.0.1       activate.adobea.com
74.208.101.249 gs.applea.com

위와같이 필요한것들을 적어준다

라고 적어주심 ㅇㅋ

'컴퓨터' 카테고리의 다른 글

아파치 재시작  (0) 2011.12.14
콘솔 리다이렉션  (0) 2011.12.09
리눅스 하위 폴더 용량 확인  (0) 2010.12.17
Windows 자동 실행 위치  (0) 2010.12.15
리눅스 커널 버전확인  (0) 2010.06.27


컴파일러 옵션 범주별 목록

다음은 범주별로 나열한 포괄적인 컴파일러 옵션 목록입니다. 사전순으로 나열된 목록을 보려면 컴파일러 옵션 사전순 목록을 참조하십시오.

최적화

옵션 용도
/O1 작은 코드를 만듭니다.
/O2 빠른 코드를 만듭니다.
/Oa 별칭 없음으로 가정합니다.
/Ob 인라인 확장을 제어합니다.
/Od 최적화를 사용하지 않습니다.
/Og 전역 최적화를 사용합니다.
/Oi 내장 함수를 생성합니다.
/Op 부동 소수점 일치를 향상시킵니다.
/Os 코드 크기를 우선으로 합니다.
/Ot 코드 속도를 우선으로 합니다.
/Ow 함수 호출에 별칭을 가정합니다.
/Ox 최대 최적화(/Ob1gity /Gs)를 사용합니다.
/Oy 프레임 포인터를 생략합니다.

코드 생성

옵션 용도
/arch 코드 생성 시 SSE 또는 SSE2 명령을 사용합니다.
/clr Managed Extensions for C++를 사용하고 공용 언어 런타임에서 실행할 출력 파일을 생성합니다.
/EH 예외 처리 모델을 지정합니다.
/G3 386 프로세서에 맞게 코드를 최적화합니다. Visual C++ 5.0에서 사용하면 컴파일러가 이 옵션을 무시합니다.
/G4 486 프로세서에 맞게 코드를 최적화합니다. Visual C++ 5.0에서 사용하면 컴파일러가 이 옵션을 무시합니다.
/G5 Pentium에 맞게 코드를 최적화합니다.
/G6 Pentium Pro, Pentium II 및 Pentium III 프로세서에 맞게 코드를 최적화합니다.
/G7 Pentium 4 또는 Athlon 프로세서에 맞게 코드를 최적화합니다.
/GB /G6와 동일하며 _M_IX86 값을 600으로 설정합니다.
/Gd __cdecl 호출 규칙을 사용합니다.
/Ge 스택 조사를 활성화합니다.
/GF
/Gf
문자열 풀링을 사용합니다.
/Gh 후크 함수 _penter를 호출합니다.
/GH 후크 함수 _pexit을 호출합니다.
/GL 전체 프로그램 최적화를 사용합니다.
/Gm 최소 재빌드를 사용합니다.
/GR RTTI(런타임 형식 정보)를 사용합니다.
/Gr __fastcall 호출 규칙을 사용합니다.
/Gs 스택 조사를 제어합니다.
/GT 정적 스레드 로컬 저장소를 사용하여 할당한 데이터의 파이버 안전을 지원합니다.
/GX 동기 예외 처리를 사용합니다.
/Gy 함수 수준 링크를 사용합니다.
/Gz __stdcall 호출 규칙을 사용합니다.
/MD MSVCRT.lib를 사용하여 다중 스레드 DLL을 만듭니다.
/MDd MSVCRTD.lib를 사용하여 디버그 다중 스레드 DLL을 만듭니다.
/ML LIBC.lib를 사용하여 단일 스레드 실행 파일을 만듭니다.
/MLd LIBCD.lib를 사용하여 디버그 단일 스레드 실행 파일을 만듭니다.
/MT LIBCMT.lib를 사용하여 다중 스레드 실행 파일을 만듭니다.
/MTd LIBCMTD.lib를 사용하여 디버그 다중 스레드 실행 파일을 만듭니다.

출력 파일

옵션 용도
/FA
/Fa
목록 파일을 만들고
목록 파일 이름을 설정합니다.
/Fd 프로그램 데이터베이스 파일 이름을 바꿉니다.
/Fe 실행 파일 이름을 바꿉니다.
/Fm 맵파일을 만듭니다.
/Fo 개체 파일을 만듭니다.
/Fp 미리 컴파일된 헤더 파일 이름을 지정합니다.
/FR
/Fr
브라우저 파일을 생성합니다.
/Fx 삽입된 코드와 소스 파일을 병합합니다.

디버깅

옵션 용도
/GS 보안 검사를 버퍼링합니다.
/GZ /RTC1과 동일합니다.
/RTC 런타임 오류 검사를 사용합니다.
/Wp64 64비트 이식성 문제를 검색합니다.
/Yd 모든 개체 파일에 완전한 디버깅 정보를 저장합니다.
/Yl 디버그 라이브러리를 만들 때 PCH 참조를 삽입합니다.
/Z7 C 7.0 호환 디버깅 정보를 생성합니다.
/Zd 줄 번호를 생성합니다.
/Zi 완전한 디버깅 정보를 생성합니다.

전처리기

옵션 용도
/AI #using 지시문에 전달된 파일 참조를 확인하기 위해 검색할 디렉터리를 지정합니다.
/C 전처리하는 동안 주석을 유지합니다.
/D 상수와 매크로를 정의합니다.
/E 전처리기 출력을 표준 출력에 복사합니다.
/EP 전처리기 출력을 표준 출력에 복사합니다.
/FI 지정된 포함 파일을 전처리합니다.
/FU 파일 이름이 #using 지시문에 전달된 것처럼 사용되도록 합니다.
/I 포함 파일의 디렉터리를 검색합니다.
/P 전처리기 출력을 파일에 씁니다.
/U 미리 정의된 매크로를 제거합니다.
/u 미리 정의된 모든 매크로를 제거합니다.
/X 표준 포함 디렉터리를 무시합니다.
/ZI 편집하며 계속하기와 호환되는 프로그램 데이터베이스에 디버깅 정보를 포함합니다.

언어

옵션 용도
/vd 숨겨진 vtordisp 클래스 멤버를 사용하거나 사용하지 않습니다.
/vmb 멤버의 포인터에 best case를 사용합니다.
/vmg 멤버의 포인터에 full generality를 사용합니다.
/vmm 다중 상속을 선언합니다.
/vms 단일 상속을 선언합니다.
/vmv 가상 상속을 선언합니다.
/Za 언어 확장을 사용하지 않습니다.
/Zc /Ze에서 표준 동작을 지정합니다.
/Ze 언어 확장을 사용합니다.
/Zg 함수 프로토타입을 생성합니다.
/Zl .obj 파일에서 기본 라이브러리 이름을 제거합니다.
/Zpn 구조체 멤버를 넣습니다.
/Zs 구문만 확인합니다.

링크

옵션 용도
/F 스택 크기를 설정합니다.
/LD DLL(동적 연결 라이브러리)을 만듭니다.
/LDd 디버그 DLL(동적 연결 라이브러리)을 만듭니다.
/link 지정된 옵션을 LINK에 전달합니다.
/MD MSVCRT.lib을 사용하여 컴파일함으로써 다중 스레드 DLL을 만듭니다.
/MDd MSVCRTD.lib로 컴파일하여 디버그 다중 스레드 DLL을 만듭니다.
/ML LIBC.lib를 사용하여 컴파일함으로써 단일 스레드 실행 파일을 만듭니다.
/MLd LIBCD.lib를 사용하여 컴파일함으로써 디버그 단일 스레드 실행 파일을 만듭니다.
/MT LIBCMT.lib를 사용하여 컴파일함으로써 다중 스레드 실행 파일을 만듭니다.
/MTd LIBCMTD.lib를 사용하여 컴파일함으로써 디버그 다중 스레드 실행 파일을 만듭니다.

미리 컴파일된 헤더

옵션 용도
/Y- 현재 빌드에서 미리 컴파일된 다른 모든 헤더 컴파일러 옵션을 무시합니다.
/Yc 미리 컴파일된 헤더 파일을 만듭니다.
/Yd 모든 개체 파일에 완전한 디버깅 정보를 저장합니다.
/Yu 빌드하는 동안 미리 컴파일된 헤더 파일을 사용합니다.
/YX 미리 컴파일된 헤더를 자동화합니다.

기타

옵션 용도
@ 지시 파일을 지정합니다.
/? 컴파일러 옵션을 나열합니다.
/c 링크하지 않고 컴파일합니다.
/H 외부 공개 이름의 길이를 제한합니다.
/HELP 컴파일러 옵션을 나열합니다.
/J 기본 char 형식을 변경합니다.
/nologo 초기 화면 배너를 표시하지 않습니다.
/QI0f Pentium 0F 명령에 문제가 없도록 합니다.
/QIfdiv 결함이 있는 FDIV, FPREM, FPTAN 및 FPATAN 명령을 가진 Intel Pentium 마이크로프로세서 문제를 해결합니다.
/QIfist 부동 소수점 형식에서 정수 계열 형식으로 변환해야 할 때 도우미 함수 _ftol가 호출되지 않도록 합니다.
/showIncludes 컴파일하는 동안 전체 포함 파일의 목록을 표시합니다.
/Tc
/TC
C 소스 파일을 지정합니다.
/Tp
/TP
C++ 소스 파일을 지정합니다.
/V 버전 문자열을 설정합니다.
/W 경고 수준을 설정합니다.
/w 모든 경고를 사용하지 않습니다.
/Wall 기본적으로 비활성화되는 경고를 포함하여 모든 경고를 활성화합니다.
/WL 명령줄에서 C++ 소스 코드를 컴파일할 때 오류 및 경고 메시지에 한 줄 진단을 사용합니다.
/Zm 미리 컴파일된 헤더 메모리의 할당 제한을 지정합니다.

 

 

/MP 컴파일시 멀티 코어사용

'프로그래밍' 카테고리의 다른 글

아무것도 안하는함수  (0) 2011.08.10
비주얼 스튜디오 링크 순서 보이기  (0) 2011.08.09
mutable  (0) 2010.10.20
explicit  (0) 2010.10.20
ms vs에서 포인터 변수에 들어가있는 값의 비밀  (0) 2010.08.18

mutable

프로그래밍 2010. 10. 20. 22:19


#include <Turboc.h>

 

class Position

{

private:

     int x,y;

     char ch;

     mutable char info[256];

 

public:

     Position(int ax, int ay, char ach) { x=ax;y=ay;ch=ach; }

     void OutPosition() const { gotoxy(x, y);putch(ch); }

     void MoveTo(int ax, int ay) { x=ax; y=ay; }

     void MakeInfo() const { sprintf(info,"x=%d, y=%d, ch=%c",x,y,ch); }

     void OutInfo() const { puts(info); }

};

 

void main()

{

     const Position Here(11,22,'Z');

     Here.MakeInfo();

     Here.OutInfo();

}

 

 

Const 효과를 없에는 특정 변수설정

'프로그래밍' 카테고리의 다른 글

비주얼 스튜디오 링크 순서 보이기  (0) 2011.08.09
VS2008 컴파일러 옵션  (1) 2010.10.21
explicit  (0) 2010.10.20
ms vs에서 포인터 변수에 들어가있는 값의 비밀  (0) 2010.08.18
API 파일 처리 유용함수  (0) 2010.08.10

explicit

프로그래밍 2010. 10. 20. 22:17


01.class TestClass
02.{
03.public:
04.    TestClass(int nParam = 1) : m_Num(nParam)
05.    {
06.        std::cout << "생성자 호출" << std::endl;
07.    }
08.    ~TestClass(){}
09.  
10.private:
11.    int m_Num;
12.};
13.  
14.void main()
15.{
16.    TestClass TestObj1 = TestClass(1);
17.    TestClass TestObj2 = 2;
18.    TestClass TestObj3(3);
19.    TestObj1 = 4;
20.}


결과가 어떤가요?
main()함수에서 클래스를 이용한 객체생성은 3번만 수행했으며 마지막 4번째 줄에서는 맨 처음 선언했던 객체에 직접 int형 정수를 넣어주고 있지만 VisualStudio2008 C++컴파일러의 입장에서는 아무런 오류없이 컴파일이 되고 실행또한 잘 됩니다. 하지만 특이한 점은 클래스로 생성한 객체는 3개지만, 실행해보면 "생성자 호출" 이라는 문자열이 4번 출력되죠. 이 부분으로 보면 분명히 생성자 함수는 4번 호출되었다는 것을 알 수 있습니다.

여기서 주목해야 할 부분은 main()함수의 2번째, 4번째 줄인

1.TestClass TestObj2 = 2;

2.TestObj1 = 4;

이 부분입니다.
TestClass라는 클래스는 생성자의 매개변수로 int형 데이터를 받아오는 클래스로써 int형과 상호호환은 염두해두고 있지 않는 클래스입니다. 연산자 오버로딩도 하지 않았구요. 이 부분에 있어서 VisualStudio2008 C++컴파일러는 사용자의 편의를 위해 묵시적으로 변환하여 임시 객체 생성 후 해당 객체에 대입하게 됩니다.

explicit 키워드는 이럴 경우에 사용하는 것으로 명시적으로 생성자를 호출해야만 하는 상황이 아니면 절대 생성자를 호출해주지 않도록 해주는 것입니다. 그렇다면 똑같은 소스코드에 이 키워드를 삽입하면 어떻게 되는지 살펴보도록 하겠습니다.

아래의 소스를 보세요.

01.class TestClass
02.{
03.public:
04.    explicit    TestClass(int nParam = 1) : m_Num(nParam)
05.    {
06.        std::cout << "생성자 호출" << std::endl;
07.    }
08.    ~TestClass(){}
09.  
10.private:
11.    int m_Num;
12.};
13.  
14.void main()
15.{
16.    TestClass TestObj1 = TestClass(1);
17.    TestClass TestObj2 = 2;
18.    TestClass TestObj3(3);
19.    TestObj1 = 4;
20.}


위 소스를 컴파일 해보면 오류가 두개 발생합니다.
첫번째 오류는 TestClass TestObj2 = 2; 에서 int형에서 TestClass형으로 변환할 수 없다는 것이고,
두번째 오류는 TestObj1 = 4; 에서 TestClass에 속한 "=" 연산자 중 우변에 int형을 받는 것을 찾을 수 없다는 것입니다.

main()함수의 첫번째 줄과 두번째 줄은 정상적인 방법을 통한 객체생성 및 생성자 호출조건임을 알 수 있죠.

아주 불편해보이죠?
굳이 편한 묵시적 변환기능을 놔두고 왜 굳이 8글자나 더 써가며 explicit이라는 키워드를 사용하고, 또 여기서 동반되는 소스코드의 수정을 왜 하는지...
이러한 묵시적인 기능이 대형 프로젝트에서는 심각하지만 찾기 매우매우 어려운 버그를 동반할 가능성이 농후하기 때문입니다. 특히나 4번째 줄에 있는 TestObj1 = 4; 이 부분은 정말 말로 설명할래야 하기도 싫은 명백한 오류임에도 우리의 컴파일러는 친절히 컴파일을 해줍니다.

이것이 explicit 키워드의 역할입니다.

'프로그래밍' 카테고리의 다른 글

VS2008 컴파일러 옵션  (1) 2010.10.21
mutable  (0) 2010.10.20
ms vs에서 포인터 변수에 들어가있는 값의 비밀  (0) 2010.08.18
API 파일 처리 유용함수  (0) 2010.08.10
릴리즈 디버깅시 최적화 하는것 막기  (0) 2010.08.04


MS의 매직 디버깅 숫자들의 의미...


ABABABAB HeapAlloc으로 메모리 할당 후 가드 바이트에 채워진 값 
CCCCCCCC 초기화 되지 않은 스택 메모리
CDCDCDCD 메모리 할당 후 초기화 되지 않은 힙 메모리
BAADF00D LocalAlloc(LMEM_FIXED)으로 메모리 할당된 후 초기화 되지 않은 값
FDFDFDFD 할당된 메모리의 전후 가드용 바이트에 채워지는 값
FEEEFEEE 힙 메모리를 해제한 후 채워지는 값

'프로그래밍' 카테고리의 다른 글

mutable  (0) 2010.10.20
explicit  (0) 2010.10.20
API 파일 처리 유용함수  (0) 2010.08.10
릴리즈 디버깅시 최적화 하는것 막기  (0) 2010.08.04
D3DFont  (0) 2010.07.21


참조: http://msdn.microsoft.com/en-us/library/bb773559(VS.85).aspx

윈도우의 Visual C++에서 파일 경로를 조작할 때 사용할 수 있는 유용한 API 함수들이다.
사용하기 위해 아래와 같이 선언한다.
#include <shlwapi.h>
#pragma comment(lib, "shlwapi")

PathAddBackslash - 경로에 백슬레시를 덧붙여준다. 백슬레시가 이미 붙어 있으면 변경하지 않는다.

"c:\abc" -> "c:\abc\"
"c:\abc\" -> "c:\abc\"

PathAddExtension - 파일 경로 뒤에 지정된 확장자를 덧붙여준다. 확장자가 이미 있다면 변경하지 않는다.
"c:\abc", ".bak" -> "c:\abc.bak"
"c:\abc.cpp", ".tmp" -> "c:\abc.cpp"

PathAppend - 두 개의 경로를 덧붙인다. 사이에 백슬레시가 없으면 자동으로 추가해 준다.
"c:\abc", "def" -> "c:\abc\def"
"c:\abc\", "def" -> "c:\abc\def"
"c:\abc", "\def" -> "c:\abc\def"
"c:\abc\", "\def" -> "c:\abc\def"

PathBuildRoot - 드라이브 식별번호를 드라이브 경로로 변경해 준다.
0 -> "A:\"
1 -> "B:\"
2 -> "C:\"

PathCanonicalize - 특별한 경로 문자열을 정리해 준다.
"c:\abc\def\..\ghi" -> "c:\abc\ghi"
"c:\abc\def\.\ghi" -> "c:\abc\def\ghi"

PathCombine - 두 개의 경로를 결합한다. 백슬레시도 검사해서 추가하고 ., ..과 같은 특별한 경로 문자열도 정리해 준다.
"c:\abc", "def.txt" -> "c:\abc\def.txt"
"c:\abc\", "..\def\ghi.txt" -> "c:\def\ghi.txt"

PathCommonPrefix -  공통된 경로를 골라낸다.
"c:\abc\def.txt", "c:\abc\ghi\" -> "c:\abc"
"c:\abc\def\jkl.txt", "c:\abc\def\..\jkl.txt" -> "c:\abc\def"

PathCompactPath -  경로를 dc와 pixel 폭 크기에 알맞게 적당히 줄여준다.
hDC, "c:\abc\def\ghi\jkl.txt", 100 -> "c:\abc\...\jkl.txt"

PathCompactPathEx - 경로를 최대 문자열 길이에 알맞게 적당히 줄여준다.
"c:\\abc\\def\\jkl.txt", 15 -> "c:\...\jkl.txt"

PathCreateFromUrl - URL로 쓰여진 파일명을 경로로 변환한다.
"file:///c:/abc/def.txt" -> "c:\abc\def.txt"

PathFileExists - 해당 경로나 파일이 실제로 존재하는지 검사한다.

PathFindExtension - 확장자의 위치를 찾아서 반환한다.
"c:\abc\def.txt" -> ".txt"

PathFindFileName - 파일 이름의 위치를 찾아서 반환한다.
"c:\abc\def.txt -> "def.txt"

PathFindNextComponent - 전체 경로 중 한 단계씩 하위로 내려간 경로를 반환한다.
"c:\abc\def.txt" -> "abc\def.txt"
"abc\def.txt" -> "def.txt"
"def.txt" -> ""

PathFindOnPath - 파일을 찾아서 완전한 경로를 반환한다. (목록이 NULL일 경우 실행 PATH에서 찾기)
"cmd.exe", NULL -> "C:\WINDOWS\system32\cmd.exe"
"iexplore.exe", { "c:\Windows", "c:\Program Files", "c:\Program Files\Internet Explorer", NULL } -> "c:\Program Files\Internet Explorer\iexplore.exe"
파일이 여러개라면 첫번째로 발견된 파일의 경로만 반환

PathFindSuffixArray - 지정된 접미사 목록에서 입력된 경로에 일치하는 것을 찾는다. (대소문자 구분)
"c:\abc\DEF.txt", { "def.txt", "DEF.txt", ".txt" }, 3 -> "DEF.txt"
"c:\abc\def\ghi.txt", { "def.txt", "DEF.txt", ".txt" }, 3 -> ".txt"

PathGetArgs - 전체 문자열에서 앞 단어를 무시한 입력 인자 위치를 찾아서 반환한다.
"test.exe temp.txt sample.doc" -> "temp.txt sample.doc"
"test.exe sample All 15" -> "sample All 15"
"test.exe" -> ""
"abc def ghi" -> "def ghi"

PathGetCharType - 문자가 경로에서 어떤 목적으로 쓰일 수 있는지 확인한다.
':' -> GCT_SEPARATOR
'.' -> GCT_LFNCHAR | GCT_SHORTCHAR
'\\' -> GCT_SEPARATOR
'/' -> GCT_INVALID
'\"' -> GCT_INVALID
'\'' -> GCT_LFNCHAR | GCT_SHORTCHAR
'\t' -> GCT_INVALID
'\n' -> GCT_INVALID
',' -> GCT_LFNCHAR
'*' -> GCT_WILD
'?' -> GCT_WILD
입력된 문자열을 검색하면서 리턴값을 조사하면 올바른 경로인지 미리 검사할 수 있다.

PathGetDriveNumber - 경로가 어느 드라이브에 있는지 번호를 확인한다.
"c:\abc\def.txt" -> 2
"d:" -> 3
"s:\test" -> 18

PathIsContentType - 파일 확장자가 콘텐츠 형식과 일치하는지 확인한다.
"c:\abc\def.txt", "text/plain" -> TRUE
".txt", "text/plain" -> TRUE
"txt", "text/plain" -> FALSE

PathIsDirectory - 실제로 존재하는 폴더인지 확인한다.
"c:\windows" -> TRUE
"c:\abc" -> FALSE

PathIsDirectoryEmpty - 폴더 내부가 비어있는지 확인한다.
"c:\windows" -> FALSE

PathIsFileSpec - 주어진 경로에 경로 문자들이 없는지 확인한다. 결과가 참이라도 올바른 파일명이 아닐 수 있다.
"c:\abc\def.txt" -> FALSE
"test.txt" -> TRUE
"*/wow." -> TRUE

PathIsHTMLFile - 콘텐츠 형식이 "text/html"인 확장자인지 확인한다.
"test.html" -> TRUE
"test.htm" -> TRUE
"test.xml" -> FALSE
"test.txt" -> FALSE

PathIsLFNFileSpec - 주어진 경로가 긴파일이름에 적합한지 확인한다.

PathIsNetworkPath - 주어진 경로가 네트워크 경로 형식인지 확인한다. (실제로 존재하는지 확인하지는 않음)
"c:\abc\def.txt" -> FALSE
"\\abc\def.txt" -> TRUE
"http://abc/def.txt" -> FALSE

PathIsPrefix - 경로가 주어진 위치에서 시작하는지 확인한다.
"c:\", "c:\abc" -> TRUE
"C:\", "c:\abc" -> TRUE
"c:", "c:\abc" -> FALSE
"..\abc", "..\abc\def" -> TRUE
"d:\abc", "d:\def" -> FALSE

PathIsRelative - 주어진 경로가 상대 경로인지 확인한다. (파일명만 있어도 상대 경로로 인정)
".\abc.txt" -> TRUE
"..\abc\def.txt" -> TRUE
"c:\abc\def.txt" -> FALSE
"c:\abc\..\def.txt" -> FALSE
"test.txt" -> TRUE

PathIsRoot - 주어진 경로가 드라이브 루트인지 검사한다.
"c:\" -> TRUE
"c:" -> FALSE
"c:\test.txt" -> FALSE

PathIsSameRoot - 주어진 경로가 같은 드라이브에 있는지 검사한다.
"c:\abc\def", "c:\test.txt" -> TRUE

PathIsSystemFolder - 시스템 속성을 가진 폴더인지 확인한다.
"c:\windows" -> FALSE
"c:\program files" -> TRUE
"C:\Documents and Settings" -> FALSE
"C:\Documents and Settings\All Users\Application Data" -> TRUE

PathIsUNC - 네트워크 공유 경로인지 확인한다. (실제로 존재하는지 확인하지는 않음)
"c:\abc\def" -> FALSE
"\\abc\def" -> TRUE
"\\192.168.0.1" -> TRUE
"\\abc\def.txt" -> TRUE
"\\" -> TRUE
"\\test.txt" -> TRUE

PathIsUNCServer - 네트워크 공유 서버인지 확인한다. (실제로 존재하는지 확인하지는 않음)
"c:\abc\def" -> FALSE
"\\abc\def" -> FALSE
"\\192.168.0.1" -> TRUE
"\\abc\def.txt" -> FALSE
"\\" -> TRUE
"\\test.txt" -> TRUE

PathIsUNCServerShare -  네트워크 공유 폴더인지 확인한다. (실제로 존재하는지 확인하지는 않음)
"c:\abc\def" -> FALSE
"\\abc\def" -> TRUE
"\\192.168.0.1" -> FALSE
"\\abc\def.txt" -> TRUE
"\\" -> FALSE
"\\test.txt" -> FALSE

PathIsURL - 주어진 경로가 URL 형식이 맞는지 확인한다.

PathMakePretty - 대문자로 만들어진 경로 문자열을 소문자로 변환한다. (소문자가 하나라도 있으면 실패)
"C:\ABC\DEF" -> TRUE, "C:\abc\def"
"c:\ABC\DEF" -> FALSE, "c:\ABC\DEF"
"C:\abc\DEF" -> FALSE, "C:\abc\DEF"

PathMakeSystemFolder - 지정된 폴더를 시스템 폴더로 만든다.

PathMatchSpec - 와일드카드 형식으로 파일명과 일치되는지 확인한다.
"test.txt", "*.txt" -> TRUE
"abc.txt", "ab?.*" -> TRUE
"c:\abc\def.txt", "*\???.txt" -> TRUE

PathParseIconLocation - 파일 경로와 아이콘 인덱스 번호를 분리한다.
"iexplore.exe, 1" -> 1, "iexplore.exe"

PathQuoteSpaces - 경로에 공백이 포함되어 있으면 큰따옴표로 묶어준다. 공백이 없으면 무시
c:\1. abc -> "c:\\1. abc"
c:\abc -> c:\abc

PathRelativePathTo - 한 경로에서 다른 경로로 가는 상대 경로를 추출한다. (같은 드라이브에서만 가능)
"c:\abc\def\ghi\jkl.txt", 0, "c:\abc\mno\pqr.txt", 0 -> TRUE, "..\..\mno\pqr.txt"
"c:\abc\def\ghi\jkl", FILE_ATTRIBUTE_DIRECTORY, "c:\abc\mno\pqr.txt", 0
-> TRUE, "..\..\..\mno\pqr.txt"
"c:\abc\def\ghi\jkl.txt", 0, "c:\abc\mno\pqr", FILE_ATTRIBUTE_DIRECTORY
-> TRUE, "..\..\mno\pqr"

PathRemoveArgs - 경로에 포함된 인자를 지운다.
"test.exe temp.txt sample.doc" -> "test.exe"
"test.exe sample All 15" -> "test.exe"
"test.exe" -> "test.exe"
"abc def ghi" -> "abc"

PathRemoveBackslash - 경로 끝에 백슬레시가 있으면 삭제한다.
"c:\abc\" -> "c:\abc"
"c:\abc" -> "c:\abc"

PathRemoveBlanks - 경로 앞뒤에 공백문자가 있으면 삭제한다.
"  c:\abc   " -> "c:\abc"

PathRemoveExtension - 확장자를 삭제한다.
"c:\abc\def.txt" -> "c:\abc\def"

PathRemoveFileSpec - 파일 이름을 삭제한다.
"c:\abc\def.txt" -> "c:\abc"
"c:\abc\def\" -> "c:\abc\def"

PathRenameExtension - 확장자를 교체한다.
"c:\abc\def.txt", ".bak" -> "c:\abc\def.bak"
"c:\abc\def", ".bak" -> "c:\abc\def.bak"
"c:\abc\def\", ".bak" -> "c:\abc\def\.bak"

PathSearchAndQualify - 주어진 경로의 오류를 바로잡고, 상대 경로도 정리하고, 환경 변수도 적용한다.
"C:\foo\." -> "C:\foo"
"C:\foo\baz\.." -> "C:\foo"
"C:\foo\\\baz" -> "C:\foo\baz"
"\\server\aa\..\bb" -> "\\server\aa\bb"
"notepad.exe" -> "C:\Windows\System32\notepad.exe"
"%SystemRoot%\System32\notepad.exe" -> "C:\Windows\System32\notepad.exe"
(XP에서는 환경변수 확장이 제대로 작동하지 않음)

PathSetDlgItemPath - 주어진 다이얼로그 아이템 윈도우의 크기에 알맞게 긴 경로를 적당히 줄여준다.

PathSkipRoot - 루트 경로를 제외한 첫번째 위치를 찾아서 반환한다.
"c:\abc\def" -> "abc\def"
"\\\\abc\\def\\ghi.txt" -> "ghi.txt"

PathStripPath - 가장 마지막 경로만 남기고 삭제한다.
"c:\abc\def.txt" -> "def.txt"
"c:\abc\def" -> "def"
"c:\abc\def\" -> "def\"

PathStripToRoot - 루트 경로만 남기고 삭제한다.
"c:\abc\def.txt" -> "c:\"
"c:\abc\def" -> "c:\"

PathUndecorate - 경로에서 임시 파일에 붙는 숫자를 삭제한다.
"C:\Path\File[5].txt" -> "C:\Path\File.txt"
"C:\Path\File[12]" -> "C:\Path\File"
"C:\Path\File.txt" -> "C:\Path\File.txt"
"C:\Path\[3].txt" -> "C:\Path\[3].txt"
인터넷으로 접근한 임시파일들은 [#]과 같은 식으로 번호가 뒤에 붙는데 그러한 임시 번호를 제거한다.

PathUnExpandEnvStrings - 경로에서 환경 변수에 해당하는 문자열을 환경 변수 이름으로 교체한다.
"c:\Windows\test.txt" -> "%SystemRoot%\test.txt"
"c:\program files\test.txt" -> "%ProgramFiles%\test.txt"
"c:\abc\def" -> "%SystemDrive%\abc\def"

PathUnmakeSystemFolder - 지정된 폴더의 시스템 속성을 해제한다.

PathUnquoteSpaces - 큰 따옴표로 감싸진 경로에서 따옴표를 제거한다.
"c:\abc\1 def" -> c:\abc\1 def
c:\abc\def -> c:\abc\def

'프로그래밍' 카테고리의 다른 글

explicit  (0) 2010.10.20
ms vs에서 포인터 변수에 들어가있는 값의 비밀  (0) 2010.08.18
릴리즈 디버깅시 최적화 하는것 막기  (0) 2010.08.04
D3DFont  (0) 2010.07.21
MFC 가 아닌경우 메모리 릭 검사  (0) 2010.06.25



릴리즈 디버깅시
#pragma optimize( "gpsy",off)
#pragma optimize( "gpsy",on)

이사이에 코드를 넣어주세요

D3DFont

프로그래밍 2010. 7. 21. 06:18


m_pd3dDevice->BeginScene();

 

폰트 객체 선언

ID3DXFont*   m_pFont;

ID3DXSprite*  m_pTextSprite;

 

폰트 생성

D3DXCreateFont( m_pd3dDevice, Height, Width, Weight, 1, FALSE, DEFAULT_CHARSET,
     OUT_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH | FF_DONTCARE,
     pFontName, &m_pFont );

 

스프라이트 객체 생성

D3DXCreateSprite( m_pd3dDevice, &m_pTextSprite );

 

스프라이트에 그리기 시작

if( m_pTextSprite )
  m_pTextSprite->Begin( D3DXSPRITE_ALPHABLEND | D3DXSPRITE_SORT_TEXTURE );

 

RECT rtPos = { 0, 0, 0, 0};

 

폰트 그리기

m_pFont->DrawText( m_pTextSprite, L"폰트내용", -1,
                             &rtPos, DT_NOCLIP, m_vecFont2D[i]->color );

 

스프라이트 그리기 종료

m_pTextSprite->End();

 

m_pd3dDevice->EndScene();

 

2005년 이후 SDK의 경우 DrawText의 첫번째 인자로 스프라이트 클래스 포인터를 받음으로써

2D화면 좌표로의 변환 없이 텍스트를 출력할 수 있다.



uname -a

'컴퓨터' 카테고리의 다른 글

아파치 재시작  (0) 2011.12.14
콘솔 리다이렉션  (0) 2011.12.09
리눅스 하위 폴더 용량 확인  (0) 2010.12.17
Windows 자동 실행 위치  (0) 2010.12.15
hosts파일 [ 윈도우 내부 DNS -> IP ]  (0) 2010.12.15