MSDN과 TechNet
2007/06/06 20:12
MSDN June 2007
http://msdn.microsoft.com/msdnmag/issues/07/06/default.aspx?loc=ko


  • Concurrency : Windows Vista에서 새로 추가된 동기화 기본형식
  • Concurrent Affairs : 비동기 장치 작업
  • { End Bracket } : 개발자로서의 자부심

TechNet June 2007
http://www.microsoft.com/technet/technetmag/default.aspx?loc=ko

  • BitLocker 드라이브 암호화를
  • 사용하여 데이터를 보호하기 위한 핵심 사항
  • 보안을 강화하는 Windows Vista의 새로운 ACL

책으로 받아봤으면 좋겠다라는 소망이...

이올린에 북마크하기(0) 이올린에 추천하기(0)
2007/06/06 20:12 2007/06/06 20:12
TAG
Trackback Address :: http://hongyver.pe.kr/ttblog/trackback/761

  • Woof 2007/06/07 21:02  댓글주소  수정/삭제  댓글쓰기
    저도 같은 생각. 요즘에 좋은 게 번역되서 많이 올라오더라구요.

  • Buildbot 과 Windows Power Shell
    2007/05/10 19:06

    Subversion과 TRAC 설치가 완료되고 이에 대한 개발팀과 기술지원팀에 대한 발표도 끝났다.
    사실 발표라고 해봐야 사용법 설명에 지나지 않지만...
    실제 운영하면서 발표하면서 논의되었던 충돌이라던가 branch나 tag에 대한 이해 이외에 대한 문제는 어떻게 대처해야할지 난감하다.
    (공식적으로 사용하기 이전에 나와 다른 동료 한명이 subversion을 사용하고 있었는데 commit 할때 log를 "ㅋㅋㅋ" 또는 "..." 등으로 남기곤 했다.)
    아무튼 시작했다는데 그 의의가 있지 않을까 싶다.

    시작하고 나니 또 다른 욕심이 생기는게...Daily Build...
    대략 아래 두가지 정도면 훌륭하게 꾸려 나갈수 있겠다는 생각.

    1. Buildbot
    http://buildbot.net/

    사용자 삽입 이미지

    2 Winodos Power Shell
    새로운 윈도우 shell
    http://www.microsoft.com/windowsserver2003/technologies/management/powershell/default.mspx
    예제 test run
    http://msdn.microsoft.com/msdnmag/issues/07/05/TestRun/Default.aspx?loc=ko
    사용자 삽입 이미지

    이올린에 북마크하기(0) 이올린에 추천하기(0)
    2007/05/10 19:06 2007/05/10 19:06
    Trackback Address :: http://hongyver.pe.kr/ttblog/trackback/760

  • Woof 2007/05/10 19:57  댓글주소  수정/삭제  댓글쓰기
    차곡차곡 밟아나가시는 것 같아요. :|
    실천이 중요한데. 대단하심.

  • 서브버전 및 TRAC 설치 가이드
    2007/04/29 21:08

    회사에서 형상관리 일환으로 운영할 버전관리와 버그관리를 위한 서브버전 및 TRAC의 설치가이드로 작성되었지만 기존 웹상에 좋은 많은 메뉴얼이 있지만 회사 내부에 맞도록 다시 작성한 문서.
    2007.4.30일 현재 TRAC은 0.10.4가 최신버전



    1. Apache 2.0.xx 버전 설치 (2.0.59 버전 설치 했음)
    아래 링크에서 아파치를 다운받아 설치 한다. httpd/binaries/win32/ 에서 받으면 된다. (apache_2.0.59-win32-x86-openssl-0.9.7j.msi)
    http://www.apache.org/dyn/closer.cgi
    2.0.xx 이상 버전(2.2.x)은 Window Subversion이 지원하지 못한다. 꼭 2.0.xx 버전대를 설치하도록 한다.
    (자세한 사항은 링크를 참조한다. http://subversion.tigris.org/project_packages.html)
    2007년 1월 25일 Apache 2.2.x 버전을 위한 Subversion 이 build됨. - 아직 테스트 해보지 못함.
    버전 또는 다른 사유로 Apache를 재설치 시 3-2. mod_python과 2. Subversion을 재설치하여야 한다.

    2. Subversion 최신버전 설치 (1.4.3 설치)
    아래의 링크에서 Window용 Subversion을 다운받아 설치한다. (svn-1.4.3-setup)
    http://subversion.tigris.org/servlets/ProjectDocumentList?folderID=91&expandFolder=91&folderID=8100
    Apache가 설치된후에 설치를 해야 httpd.conf 에 Subversion의 올바른 경로가 설정된다.

    3. Python 2.4 설치
    아래 링크에서 Python을 다운받아 설치한다.(Python 2.4.4)
    http://www.python.org/download/
    Python 2.5 버전은 지원하지 모듈이 있으므로 가급적 2.4 버전을 설치한다.(6)
    그래도 2.5 버전을 설치하고 싶다면  http://trac.edgewall.org/wiki/TracInstall 페이지를 참조한다.

    3-1. svn-win32-1.4.3_py2.4.exe 을 다운받아 설치
    아래의 링크에서 Subversion 1.4.3 Win32 Installer for the Python 2.4 bindings 을 다운받아 설치한다.
    http://subversion.tigris.org/servlets/ProjectDocumentList?folderID=91&expandFolder=91&folderID=8100 

    3-2. mod-python-3.3.1-py2.4 다운받아 설치
    Apache의 속도를 빠르게 하기 위해서 아래의 링크에서 mod_python을 다운받아 설치한다. (mod_python-3.3.1.win32-py2.4-Apache2.0.exe)
    http://httpd.apache.org/modules/python-download.cgi
    * Win32Binaries 라고 중간에 링크가 걸려있다.
    * Apache를 재설치할경우 mod_python은 다시 설치해 주어야 한다.

    3-3. Docutils 설치
    아래의 링크에서 docutils-0.4.tgz 를 다운받아 압축을 푼다음 $ python ./setup.py install 와 같이 실행하여 설치한다.
    http://docutils.sourceforge.net/

    3-4. PySQLite 설치
    아래의 링크에서 Python 버전(2.4)에 맞는 PySQLite를 다운받아 설치
    http://initd.org/tracker/pysqlite/wiki/pysqlite
    TRAC에서 MySQL을 지원하나 아직 테스트 단계이므로 PySQLite를 설치하도록 하자.

    3-5. ClearSilver 설치
    아래의 링크에서 Python 버전(2.4)에 맞는 ClearSilver를 다운받아 설치(clearsilver-0.9.14.win32-py2.4.exe) - Python2.5용 버전이 없다.
    http://www.clearsilver.net/downloads/

    4. TRAC 0.10.3.1 설치
    아래의 링크에서 윈도우용 인스톨러 TRAC을 다운받아 설치
    http://trac.edgewall.org/wiki/TracDownload

    이곳까지 설치를 완료했다면 Apache와 TRAC 그리고 Subversion 이 연동되도록 최소한 설치작업을 모든 마쳤다.
    테스트를 해보지는 않았지만 이 모두를 한꺼번에 설치하기위한 웹페이지가 있다.
    각 설치파일들의 버전도 가장 최신버전으로 설정되어 있다.
    아래의 링크를 참조한다.
    http://yeoupooh.us.to:8080/wiki/display/pu/TracOnWindows
     
    5. Subversion Repository 생성 및 TRAC의 DB생성
    Subversion의 Repository를 생성하는 방법으로 2가지가 있다.
    첫번째는 console을 사용하여 text로 생성하는 방법과 TortoiseSVN을 사용하여 생성하는 방법이 있다.
    생성하는 방법은 아래의 참고자료의 링크들을 참고하여 생성하도록 한다.
    TRAC의 DB는 Python환경에서 console에서 작성하여야 한다.
    자세한 방법은 아래의 링크를 참조한다.
    http://jongyeob.com/moniwiki/wiki.php/TracInstall

    TRAC의 DB와 Subversion의 Repository를 구성한 예시)

    d:\SVN  --+- TEST
                    +- PROJECTA
                   +- PROJECTB
    d:\TRAC --+- TEST
                  +- PROJECTA
                  +- PROJECTB
    * 디랙토리 구조는 어디까지 예시이다. 그러나 어떻게 구성할것인가 미리 검토하고 작성하는것이 두번일 안하는 비결이다.
    TRAC을 위해서는 Apache config 파일(httpd.conf)에 아래 내용들을 추가한다.

    LoadModule python_module modules/mod_python.so
    <Location /test>
       SetHandler mod_python
       PythonHandler trac.web.modpython_frontend
       PythonOption TracEnv d:\trac\test
    </Location>


    http://localhost/test 로 접근해서 TRAC의 첫페이지가 나오면 성공이다.
    Subversion의 Repository를 위해서는 아래의 내용을 추가한다.
    <Location /svn/test>
       DAV svn
       SVNPath d:\svn\test
    </Location>
    http://localhost/svn/test 로 접근해서 Repository revision 화면이 나오면 성공이다.

    6. login 설치 - 인증
    * .htaccess 파일을 생성해서 특정한 폴더에 두고 TRAC의 login시와 Subversion의 login시 같이 사용하도록 하면 계정관리하기도 수월하다.

    TRAC의 login을 위해서는 아래와 같은 내용을 httpd.conf에 추가한다.

    <Location /test/login>
      Authtype Basic
      AuthName "TEST"
      AuthUserFile d:\.htaccess
      Require valid-user
    </Location>

    .htaccess 는 Apache의 htpasswd.exe를 실행하여 생성한다.
    Subversion에 anonymous가 아닌 인증된 사람만 접근을 허용하려면 아래와 같은 내용을 추가한다.

    <Location /svn/test>
      DAV svn
      SVNPath d:\svn\test
     Authtype Basic
     AuthName "TEST"
     AuthUserFile d:\.htaccess
     Require valid-user

    </Location>
    7. Plugin 설치
    TRAC의 admin을 사용하여 관리하기 불편하다면 plugin을 설치하자.
    http://trac-hacks.org/wiki
    ez_setup.py 를 실행 설치후 python24/scripts/easy_install.exe 생성
    easy_install.exe ~.egg 로 설치
    trac.db/conf/trac.ini 파일에 [components] 에 webadmin.* = enabled 와 같이 추가하여 사용한다.
    trac-hacks 에 있는 Plugin등을 다운받지 않고 svn 경로명(http://test.co.kr/test/trunk/0.10)을 easy_install.exe 경로명 으로도 설치 가능하다.

    8. http이외의 보안을 위한 접속프로토콜

    https로 접속을 위한 SSL 설치

    8-1. ssl 설치
    LoadModule ssl_module modules/mod_ssl.so 주석(#)을 해제한다.
    Apache Service Monitor 를 열어서 아래에 보면 어떤 모듈이 지금 현재 동작중인지 나온다. 참고하자.
    Apache/2.0.59(win32) mod_ssl/2.0.59 OpenSSL/0.9.7.j SVN/1.4.3. DAV/2

    8-2 인증키 만들기
    OpenSSL.exe 를 사용하여 인증서를 만든다.
    openssl req -new -out filename.csr
    openssl rsa -in privkey.pem -out filename.key
    openssl req -new -x509 -days 365 -key filename.key -out filename.crt
    생성된 filename.key와 crt 파일을 Apache의 conf 디렉토리에 복사해 넣는다.

    8-3 httpd.conf 설정하기
    아래의 내용을 추가한다.

    Listen 443
    <VirtualHost *:443>
    SSLEngine on
    SSLCertificateFile "C:\Program Files\Apache Group\Apache2\conf\filename.crt"
    SSLCertificateKeyFile "C:\Program Files\Apache Group\Apache2\conf\filename.key"
    SSLProtocol all
    SSLCipherSuite HIGH:MEDIUM
    <Location /svn>
    DAV svn
    SVNPath d:\svn\test
    Authtype Basic
    AuthName "TEST"
    AuthUserFile d:\trac\.htaccess
    Require valid-user
    </Location>
    </VirtualHost>

    Svnserver로 접속을 위한 방법
    설치는 아래의 링크를 참조한다.
    http://serious-code.net/moin.cgi/SubversionSetup
    이재홍님의 SVNmanager를 실행하여 운영한다.
    주의할점은 Subversion 디렉토리와 Trac 디렉토리를 구분한다.
    TortoiseSVN으로 접속시 Multi Project로 작업이 가능하다.
    svn://test.co.kr/test
    svn://test.co.kr/projecta

    SVN+SSH
    Cygwin을 설치
    http://ist.uwaterloo.ca/~kscully/CygwinSSHD_W2K3.html
    환경변수에 Path=c:\cygwin 와 cygwin=ntsec tty 를 추가

    9. 한글화
    KLDP의 트랙 한글화 웹페이지를 참조
    http://kldp.net/projects/trac-ko/
    아래의 링크에서 최신트랙을 다운받아 설치한다.
    http://kldp.net/frs/?group_id=724

    tarball (tar.gz등 압축된 파일)을 다운받아서 압축을 푼다음 $ python ./setup.py install 와 같이 설치한다.
    윈도우용 TRAC이 설치되어 있는 경우 제대로 설치가 되지 않을수 있다. 프로그램 추가삭제에서 TRAC을 삭제후 재설치 해본다.


    참고사이트


    Subversion
    윈도우에 Subversion 설치 - 이재홍님
    http://www.pyrasis.com/main/SubversionServerForWindows

    SVN manger Utility - 이재홍님
    http://www.pyrasis.com/main/SVNSERVEManager

    TRAC
    Trac 설치 - 종엽님위키
    http://jongyeob.com/moniwiki/wiki.php/TracInstall

    윈도우XP에 TRAC, Subversion 및 Moniwiki 설치
    http://aslongas.pe.kr/tt/index.php?pl=11
    http://gaedol.org/resources/wiki/TracGuide

    TRAC의 도움말 부분 번역 페이지
    http://ai.uos.ac.kr/trac/ailab/wiki/TracInstall

    윈도우에 TRAC 설치하기 - TRAC 영문
    http://trac.edgewall.org/wiki/TracOnWindows

    TRAC에서 Plugin 설치하기 - TRAC 영문
    http://trac.edgewall.org/wiki/TracPlugins

    WebAdmin Pluging
    http://trac.edgewall.org/wiki/WebAdmin

    TRAC의 Plugin 이 있는곳 - TRAC Hack 영문
    http://trac-hacks.org/wiki

    Windows에서 TRAC(StandAlone)과 서브버전 설치 - 영문
    http://lazutkin.com/blog/2006/feb/18/setting-tools-windows/

    Trac Apache Subversion AllinOne - 모두를 한꺼번에 설치하기
    http://yeoupooh.us.to:8080/wiki/display/pu/TracOnWindows

    TRAC에서 문서작성을 편하게 하기위한 WikiExporter - CRIZIN님
    http://crizin.net/entry/TinyMCE-플러그인-WikiExporter

    Subversion과 TRAC연동
    Cygwin을 사용한 SVN+SSH 연동
    http://hankiya.com/tt/jhk8211/330

    Window 2003 server에서 Cygwin SSH daemon 설치 - 영문
    http://ist.uwaterloo.ca/~kscully/CygwinSSHD_W2K3.html

    SVN+SSH 연동
    http://wiki.kldp.org/wiki.php/SubversionTips
    http://kwon37xi.egloos.com/2521260

    SSH Howto(영문)
    http://www.logemann.org/day/archives/000099.html 

    서적

    서브버전을 이용한 실용적인 버전관리
    http://kangcom.com/common/bookinfo/bookinfo.asp?sku=200603080013

    보안을 위한 효율적인 방법 PKI
    http://kangcom.com/common/bookinfo/bookinfo.asp?sku=200309040006

    기타
    SSL이란?
    http://www.junjaewoo.com/kldp/SSL-Certificates-HOWTO/x70.html

    OpenSSL HOWTO 문서  - kldp
    http://wiki.kldp.org/wiki.php/DocbookSgml/SSL-Certificates-HOWTO
    http://wiki.kldp.org/wiki.php/LinuxdocSgml/ApacheSSL-KLDP
    http://wiki.kldp.org/wiki.php/DocbookSgml/SSL-RedHat-HOWTO

    tortoiseSVN 다운받기
    http://tortoisesvn.net/downloads
    tortoiseSVN Howto
    http://wiki.kldp.org/wiki.php/TortoiseSVN-USE

    이올린에 북마크하기(0) 이올린에 추천하기(0)
    2007/04/29 21:08 2007/04/29 21:08
    Trackback Address :: http://hongyver.pe.kr/ttblog/trackback/759

  • Woof 2007/04/29 22:07  댓글주소  수정/삭제  댓글쓰기
    후, 저는 회사에서는 안쓰고 그냥 개인적으로 거북이로 관리하는데. 서버 하나 두고 하고 싶은데. 정리 잘 하신 것 같아요.
    • hongyver 2007/04/29 22:53  댓글주소  수정/삭제
      이제 시작입니다.
      팀원에 적극적인 의지가 필요하더군요...아직까지는 많이 부정적이라...힘들어요...ㅜㅜ
  • maru.arisu.gen 2007/05/31 01:41  댓글주소  수정/삭제  댓글쓰기
    글 잘 보았습니다.
    근데 sqlite3은 설치하지 않은 건가요? 전 이거 달랑 .exe 파일만 있어서 어떻게 해야될지를 모르겠더군요...설명좀 해 주실 수 있나요?...
    저도 일단 좀 알고 나면 회사에서 사용을 해 볼까 하는데...회사 사람들이 영 관심이 없네요..
    • hongyver 2007/05/31 02:57  댓글주소  수정/삭제
      SQLite3.exe는 0.9 버전대에서 programfiles/SQLite 에 그냥 복사하는것으로 사용이 가능했는데...
      .10 버전대에 올라오면서 PySql로 대체한듯 합니다.
      고로 0.10버전대를 사용하시면 설치하지 않으셔도 됩니다.

  • DDK버전 과 Windows 버전 설정
    2007/03/20 00:54

    DDK 버전

    Windows Longhorn, WDK
    WLHBASE, D:\WINDDK\6000
    Windows XP, Server 2003 with SP1
    WXPBASE, D:\WINDDK\2600, D:\WINDDK\3790.1830
    Windows 2000
    W2KBASE, D:\Nt50DDK
    Windows NT
    NT4BASE, D:\NT4DDK
    1. DDK help 에서 windows 2003 이상을 지원할때 코딩시 정의는?
    MSDN을 보면
    Constant Operating system version
    NTDDI_WIN2K Windows 2000
    NTDDI_WIN2KSP1 Windows 2000 with Service Pack 1 (SP1)
    NTDDI_WIN2KSP2 Windows 2000 with Service Pack 2 (SP2)
    NTDDI_WIN2KSP3 Windows 2000 with Service Pack 3 (SP3)
    NTDDI_WIN2KSP4 Windows 2000 with Service Pack 4 (SP4)
    NTDDI_WINXP Windows XP
    NTDDI_WINXPSP1 Windows XP with SP1
    NTDDI_WINXPSP2 Windows XP with SP2
    NTDDI_WS03 Windows Server 2003
    NTDDI_WS03SP1 Windows Server 2003 with SP1
    NTDDI_LONGHORN Windows Vista

    코딩은 아래와 같이
    #if (NTDDI_VERSION >= NTDDI_WINXP)
    ...Window XP 이상에서 필요한 코드...
    #endif


    2.
    OSRonline에서 사용하는 DDKBUILD util 을 사용할때 xxxBASE 및 build 설정은?

    NET ddk를 사용하여 XP이상을 지원하는 드라이버를 작성하고 싶다면 WXPBASE=D:\WINDDK\3790.1830 와 같이 설정하고 build -WNETXP free -cez 라고 설정하면 된다.
    Longhorn DDK(WDK)를 사용하여 Server 2003 이상을 지원하는 드라이버를 작성하고 싶다면 WLHBASE=D:\WINDDK\6000  로 설정하고 build -WLHNET free -ceZ라고 설정하면 된다.

    x64 드라이버는 build -WLHNETX64 free -ceZ와 같이 하면 된다.
    이올린에 북마크하기(0) 이올린에 추천하기(0)
    2007/03/20 00:54 2007/03/20 00:54
    Trackback Address :: http://hongyver.pe.kr/ttblog/trackback/758

    1. Subject: 비주얼스튜디오에서 DDK build를...

      Tracked from 홍가일보 2007/03/20 00:55  삭제

      DriverStudio를 설치해서 VC6에서 DDK 빌드를 한다.비주얼스튜디오 IDE를 사용해서 편하긴 한데 웬지 모를 존재의 무거움(?)이랄까?매번 드라이버스튜디오를 설치해야하고 환경설정해야하고...가장 ..


    Verifier.exe로 bugcheck code를 좀더 명확하게
    2007/02/15 00:07

    작성중인 드라이버에서 blue screen이 뜬다.
    WinDBG를 연결해서 !analyze -v 를 해보니...
    bugcheck 0x19 : BAD_POOL_HEADER 가 발생한다.
    에러가 발생한곳은 return 하기전에 메모리를 해제하기 위해 ExFreePool을 호출하는 곳에서 발생한다.
    처음에는 아무리 들여다 보아도 문제 될게 없었다.
    ExAllocatePool로 메모리를 할당하고 ExFreePool로 해제하는 순서가 틀린것도 없고...
    HELP를 보니 에서 !pool 로 메모리 부분을 살펴보던지 Verifier를 실행시켜 보면 도움이 된다고 한다.
    !pool 을 해봤더니 중간에 메모리 링크가 깨졌다고 나오기는 하는데 어떻게 살펴봐야 할지 감이 안온다. (나중에 좀 살펴봐야겠다.)
    그래서 결국 Verifier를 실행시키려고 system32 폴더에 있는 verifier.exe, verifier.dll를 복사해서 실행시켰다.
    1. Create custome settings을 선택
    2. Select individual settings from a full list 선택
    3. 조사하고자 하는 task 선택 - Special pool/Pool tracking를 선택
    4. Select driver names from a list 선택
    5. 드라이버 선택후 마침후 재부팅
    WinDBG에 연결한뒤 bugcheck 코드를 살펴봤더니 0x19가 아니라 0xCD 로 변경되었다.
    에러가 발생한 곳도 보다 원천적인곳(?)을 가르키고 있었다.
    bugcheck 0xCD : PAGE_FAULT_BEYOND_END_OF_ALLOCATION
    에러 메세지에서 대략 감이 온다. 더구나 에러가 발생한 코드는 더욱더 확신을 준다.
    결국 ExAllocatPool에서 메모리를 충분히 할당하지 못했던게 원인.
    메모리를 충분히 할당하여 해결.

    (Language : c)
    1. ...
    2.     pFilterNameOfReg = ExAllocatePool( PagedPool, nLen)
    3. ...
    4.     wcscpy(pFilterNameOfReg, pRegValue)// bugcheck 0xcd
    5. ...
    6.      if(wcscmp(pFilterNameOfReg, filtername) == 0)
    7.      {
    8.             ExFreePool(pFilterNameOfReg);   // bugcheck 0x19
    9.             return;
    10.      }
    11.     ExFreePool(pFilterNameOfReg);
    12.     return FALSE;
    13.  

    다소 애매한 bugcheck code라면 verifier를 사용하면 확실히(?) 알수있다.
    -PREFAST 옵션과 더불어 verifier를 사용하면 어지간한 블루스크린을 방지할수 있겠다.

    관련링크
    Windows 2000에서 Driver Verifier를 사용하여 장치 드라이버 문제를 해결하는 방법

    이올린에 북마크하기(0) 이올린에 추천하기(0)
    2007/02/15 00:07 2007/02/15 00:07
    Trackback Address :: http://hongyver.pe.kr/ttblog/trackback/746


    VC6 에서 VS2005로 옮기기
    2007/02/12 22:54

    Vista도 그렇고 새로나온 SDK 때문에도 그렇고...
    딱히 VC6에서 개발 못할 것도 없지만서도 개발환경을 VS2005로 전부 converting 하여야 겠다고 마음먹고 작업을 하려고 보니...
    이것저것 쓰경쓰이는게 한두가지가 아니다.
    일단 VC6 프로젝트를 VS2005에서 자동으로 변환하지 않고...
    일일이 수작업으로 복사해서 붙여넣고 빌드했다...하는김에 /Wp64 옵션을 켜놓았더니 포인터에 대한 문제도 발생...
    나름대로 정리하자면...

    1. Secure Function
    수많은 warning C4996 : deprecated 경고
    일부 CRT 함수들이 보안이 강화된 함수(Secure Function)를 기존 함수를 대신하여 사용하라는 경고 문구...
    간단하게 _s 만을 붙이면 될듯하지만 그게 그렇지 않다.
    복사할 영역의 크기도 지정해주어야 하는데 이게 그렇게 간단하게 생각할 문제가 아니다.
    보다 자세한 내용은 아래 링크 참조하자.
    김명신님의 Secure Function에 관한 글 보러가기

    굳이 Secure Function을 사용하고 싶지 않다면 _CRT_SECURE_NO_DEPRECATE 옵션을 사용하여 빌드하면 된다. (명령줄에 /D _CRT_SECURE_NO_DEPRECATE 를 추가하면 된다)
    차후에 Secrue Function만을 지원할지 모르니 권장하지는 않는다. 그냥 VS2005로 변환후 빌드가 제대로 되는지 확인하는 차원에서만 사용하는게 좋을듯한다.

    2. 형변환 문제
    size_t를 DWORD로 형변환을 할때는 SizeTToDword와 같은 함수(intsafe.h, conversion 함수)를 사용하여 리턴값을 에러가 발생(64bit를 32bit로 변환함으로)하는것을 검사해서 별도의 에러처리를 수행하여야 한다.
    DWORD dwRegLen;HRESULT hrErr = SizeTToDWord((_tcslen(temp)+1)*sizeof(TCHAR),&dwRegLen);if(hrErr==INTSAFE_E_ARITHMETIC_OVERFLOW){  // 오버플로우 발생에 대한 에러 처리}

    3. 메모리 할당
    malloc와 같은 메모리 할당 함수는 char *로 메모리를 할당하기 때문에 유니코드 사용할때는 sizeof(TCHAR)의 크기를 곱해서 계산하여 한다.
    그래서 문제가 되는게 _tcscpy_s 와 같은 secure function은 strDst의 크기도 지정을 해주어야 하는데 유니코드로 계산된 크기보다 char * 계산된 문자열(_tcslen)의 크기가 크기 때문에 사실은 nLen/sizeof(TCHAR)를 해주어야 한다.

    (Language : c)
    1. size_t nLen = _tcslen(HubName)*sizeof(TCHAR) + sizeof(_T("test"));
    2. strDst= (LPTSTR)malloc(nLen);
    3. ...
    4. _tcscpy_s(strDst, nLen, _T("test"));
    5. _tcscpy_s(strDst+ _tcslen(_T("test")) , nLen, strSrc);




    4. DWORD_PTR, UINT_PTR
    timeSetEvent() 등 일부 함수에서 함수 포인터 인자를 이전 SDK에서는 DWORD 였으나 새로운 SDK에서는 DWORD_PTR로 변경.
    AppendMenu()과 같은 함수는 UINT에서 UINT_PTR로 변경되었다.


    바꾸어놓고 아직 테스트도 안해봤는데...
    심히 노가다에 가깝구나...
     
    이올린에 북마크하기(0) 이올린에 추천하기(0)
    2007/02/12 22:54 2007/02/12 22:54
    Trackback Address :: http://hongyver.pe.kr/ttblog/trackback/744

    1. Subject: timesetevent-으로 이어질 블로그링

      Tracked from blogring.org 2008/12/15 08:13  삭제

      timesetevent-에 관한블로그를 요약한 것입니다.

  • 크라이키스 2007/04/02 20:44  댓글주소  수정/삭제  댓글쓰기
    그나마 ATL 프로젝트는 변환하면 컴파일도 안된다는 비극이... ^^;;

  • 메니페스트(Manifest)와 어셈블리....
    2007/02/01 17:44

    Manifest는 응용 프로그램이나 어셈블리 안에 포함되거나 외부 XML 파일로 제공되는 XML 문서이다. Visual C++ 라이브러리의 헤더에는 어셈블리의 정보가 포함되어져 라이브러리를 응용 프로그램 코드에 포함하면 링커가 최종 이진 파일에 대한 매니페스트를 구성하는 데 이 어셈블리 정보가 사용된다.
    링커는 매니페스트 파일을 이진 파일 안에 포함하지 않으며 매니페스트를 외부 파일로만 생성할수도 있다.
    매니페스에는 버전정보나, 구성된 파일의 리스트등을 포함한다.

    그럼 어셈블리란?
    1. 어셈블리는 코드들의 논리적인 묶음이다.
    2. 어셈블리는 물리적으로 DLL또는 EXE로 존재한다.
    3. 한 개의 어셈블리는 한 개이상의 파일을 포함할 수 있다.
    4. 어셈블리안에는 어떤 형태의 파일도 포함될 수 있다(예: 텍스트 파일, 이미지파일등)
    5. 작성된 소스코드가 어셈블리로 묶여지지 않다면, 다른 어플리케이션에서는 이용할 수가 없다.
    6. 어셈블리파일엔 자체정보를 가지고 있는데 이를 어셈블리 메니페스트(Manifest)라 한다.

    프로그램의 언인스톨시 의존성있는 DLL 또는 다른 프로그램이 같이 사용하는 DLL의 의존성을 메타정보로 기록하여 그 의존성을 극복한다고 즉, DLL 지옥에서 벗어난다고는 하는데...
    뭐 더 복잡해진것도 같고...

    참고할만한 페이지
    http://msdn2.microsoft.com/ko-kr/library/1w45z383(VS.80).aspx
    http://www.hoonsbara.com/hoonsboard.aspx?table_name=cshaptip&board_idx=443278&page=5&keyword=&search=&boardmode=2

    이올린에 북마크하기(0) 이올린에 추천하기(0)
    2007/02/01 17:44 2007/02/01 17:44
    Trackback Address :: http://hongyver.pe.kr/ttblog/trackback/738


    Window Station과 Desktop 그리고 Session
    2007/01/28 18:25

    예전 프린터 드라이버를 개발하는 회사에서 일할때 잉크나 토너의 사용여부등을 알려주는 프린터 모니터 프로그램에서 대화상자를 올바르게 띄우지 못하는 버그가 발생했었다.
    윈도우 XP에 FastUserSwitching이란 기능이 있는데 이를 이용하여 두번째 logon 한 사용자는 프린터 모니터의 대화상자를 볼수없었다.
    디버깅을 해본 결과 FastUserSwitching은 터미널 서비스 세션을 이용하여 첫번째 logon 한 사람과 두번째 logon 사람의 Session이 각각 Session0과 Session1로 다르기 때문에 두번째 logon한 사람은 프린터 모니터의 대화상자를 볼수없고 엉뚱하게 첫번째 logon사람의 화면에 대화상자가 보여졌기 때문이다.
    오래되서 기억은 나지 않지만 꽤 번거로운 작업을 해서 해결했던 기억이...
    프린터 드라이버에서 모니터 프로그램을 CreateProcessAsUser로 실행했던가?!

    Window Station 과 Desktop

    윈도우는 User Interface, GDI 그리고 커널 메인 객체를 제공한다.
    커널은 안전하지만 UI, GDI는 그렇지 않기 때문에 추가적인 보안성을 제공하기 위해 윈도우는 stations와 desktops 을 사용한다.
    Station은 클립보드, desktop 등을 포함하는 프로세스와 관련이 있는 보안객체 이고 Desktop은 Station내에 존재하며 논리화면, 윈도우, 메뉴, 훅과 같은 User Interface를 포함하는 보안객체이다. 로그온 화면을 관리하는 winlogon desktop, 화면보호기를 담당하는 screen saver desktop, 평상시 윈도우 화면을 보여주는 interactive desktop의 3가지로 나눠진다.

    사용자가 logon을 하게 되면 WinSta0\Winlogon 에서  smss.exe(세션메니져), winlogon.exe, msgina.dll를 통해 일련의 logon 작업을 거쳐 최종적으로 Winsta0\default 라는 interacive window station을 생성한다.
    그러므로 사용자는 Winsta0 의 station에서만이 UI 및 키입력을 받을수 있다. (즉 서비스의 경우는 Service-0x0-3e7$\default 로 생성된다.)
    Winlogon 과 default desktop은 서로 메세지나 대화상자를 공유할수 없다. 자신의 desktop(winlogon, default)에서만 사용이 가능하다. 하지만 클립보드는 Station에서 관리되기 때문에 다른 desktop에서 사용이 가능하다.

    Service의 경우 LocalSystem 계정(administrator 계정보다 상위개념)으로 실행되어 Service-0x0-3e7$\default 와 같은 station을 생성하므로 UI 및 키입력을 받을수 없다. 그래서 서비스내에서 UI를 가진 프로그램을 실행시키기 위해서는 STARTUPINFO 구조체의 si.lpDesktop = "WinSta0\\Default"; 와 같이 설정하여 실행시켜야 한다. 서비스 프로그램중에서 mtask.exe와 같은 프로그램은 WinSta0을 사용한다.
    반면 서비스 프로그램을 UI 또는 키입력을 받기 위해서는 CreateService로 실행시 SERVICE_INTERACTIVE_PROCESS 옵션을 사용하거나 서비스 등록정보에서 로그온정보에 "데스크과 상호 작용" 을 설정하면 서비스도 UI 및 키입력을 받을수 있다.

    여기까지가 Station과 Desktop에 관한 이야기였고 맨위에서 말한바와 같이 우리가 알고 있어야 Session이라는 개념이 하나가 더있다.
    XP에서는 Session을 통해 사용자마다 다른 Session ID를 부여한다. 이러한 Session의 개념은 Teminal Service Session에서 이미 사용되어 졌다. (FastUserSwitching도 결국 Teminal Service Session을 이용한다.)
    결국 Session -> WindowStation -> Desktop 와 같은 구조를 이루는데 다른 Session에서는 같은 winsta0\default 를 가졌더라도 메세지 및 UI가 공유될수 없다. 즉 Session 1 에 logon 한 사용자가 실행시킨 프로그램에서 표시된 대화상자는 Session 2로 logon 사용자의 화면에는 나타나지 않는다는 이야기다. (당연한 이야기 아닌가?)

    단 XP에서는 첫번째 logon 사용자에게 Session 0 이 부여되는것(서비스도 마찬가지로 Session 0 이 주어진다.)과 달리 윈도우 Vista에서는 Session 0은 서비스에게만 주어지고 첫번째 logon 사용자는 Session 0 이외에 다른 Session ID가 부여되어진다.


    이올린에 북마크하기(0) 이올린에 추천하기(0)
    2007/01/28 18:25 2007/01/28 18:25
    Trackback Address :: http://hongyver.pe.kr/ttblog/trackback/727


    MSDN Magazine blog...
    2007/01/11 19:19
    RSS 구독을 하고 있는데...
    2007년 2월 MSDN 이 온라인상으로 발매...
    링크를 따라 가봤더니 한글로도...

    http://blogs.msdn.com/msdnmagazine/archive/2007/01/11/1451594.aspx



    이올린에 북마크하기(0) 이올린에 추천하기(0)
    2007/01/11 19:19 2007/01/11 19:19
    TAG ,
    Trackback Address :: http://hongyver.pe.kr/ttblog/trackback/720

  • TWEETY 2007/01/14 18:38  댓글주소  수정/삭제  댓글쓰기
    링크를 따라 가봤더니 영언데? -.-;

  • 프로그램의 시간(성능)측정
    2006/12/29 00:31

    C 표준함수 clock() 을 이용

    (Language : c)
    1. #include <stdio.h>
    2. #include <time.h>
    3.  
    4. void main()
    5. {
    6.      clock_t t1,t2;
    7.      int count=0;
    8.  
    9.      t1=clock();
    10.      for (;;) {
    11.           printf("기다리십시오. %d\n",count++);
    12.           t2=clock();
    13.           if (t2-t1 > 3*CLOCKS_PER_SEC) {
    14.               break;
    15.           }
    16.      }
    17.      printf("끝났습니다.\n");
    18. }

    Windows Mutimedia timer 의 timeGetTime() 함수 이용

    (Language : c)
    1. DWORD dwStartTime = timeGetTime();
    2. // 중간코드생략
    3. DWORD dwEndTime = timeGetTime();
    4. printf("%d ms", dwEndTime-dwStartTime);

    Windows Management 의
    QueryPerformanceFrequency/QueryPerformanceCounter() 함수이용


    (Language : c)
    1. #define CHECK_TIME_START  __int64 freq, start, end; if (QueryPerformanceFrequency((_LARGE_INTEGER*)&freq))  {QueryPerformanceCounter((_LARGE_INTEGER*)&start);
    2.  
    3. #define CHECK_TIME_END(a,b) QueryPerformanceCounter((_LARGE_INTEGER*)&end);  a=(float)((double)(end - start)/freq*1000); b=TRUE;                        } else b=FALSE;
    4.  
    5. ...
    6.  
    7. CHECK_TIME_START;
    8. // 중간코드 생략
    9. CHECK_TIME_END(Time, err);
    10.  
    11. printf("printf() 걸린 시간은.. %8.6f미리세컨입니다.",Time);

     

    VC++6 의 Profile 사용
    Project Setting 에서 Link 의 Enable profiling을 체크

    사용자 삽입 이미지

    Build의 Profile 선택
    사용자 삽입 이미지

    Profile 대화상자에서 원하는 Profile Type 선택 - 시간측정은 Function timing
    Function converage와 Line Coverage 의 분석을 통해 함수의 점유율을 알수 있다.
    점유율에 대한 이해는 아래 링크를...
    http://www.debuglab.com/knowledge/coverage.html

    사용자 삽입 이미지

    그러면 아래와 같은 profile 탭에 결과가 나온다.

    사용자 삽입 이미지


    VS.NET 의 Profile 사용(PGO)

    프로젝트 속성에서 C/C++ 탭에서 프로그램 데이타 베이스를 /Zi 이하로 설정
    /ZI 일경우 /GL 옵션과 충돌

    사용자 삽입 이미지

    최적화 옵션에서 최적화를 /O[x] 중 원하는 것 선택
    전체 프로그램 최적화에서 /GL 옵션 선택


    사용자 삽입 이미지

    코드생성 탭에서 기본 런타임 검사를 기본값으로 설정

    사용자 삽입 이미지

    링커탭에서 일반에 보면 증분링크 사용 안함(/INCREMENTAL:NO)

    사용자 삽입 이미지

    그러면 설정은 다 끝났다.
    이제 빌드를 해야하는데 PGO를 위한 빌드는 빌드창에 프로필 기반 최적화라는 항목이 보인다.
    이 항목중에 계측, 업데이트, 최적화, 계측된/최적화된 응용 프로그램 실행 이 있는데 이중 먼저 계측을 선택하여 PGD 파일을 생성한다.
    다음 계측된/최적화된 응용 프로그램 실행을 눌러 실제 프로그램을 테스트/연습을 수행한다.
    원하는 만큼 수행하여도 된다 이때 수행한 만큼 PGC 파일이 생성된다.
    다음 최적화를 눌러 생성된 PGC 파일을 통해 최종 PGD 파일이 생성된다.


    사용자 삽입 이미지

    최종적으로 pgomrg.exe test.pgd /summary 를 실행해보면 요약된 정보를 얻을수 있다.
    도스커맨드 창은 도구에 VisualStudio 2005 command Prompt를 이용하면 별도로 경로명을 지정하지 않아도 편리하게 이용할수 있다.

    사용자 삽입 이미지


    @CLK
    이 방법은 디버깅시 Watch 창에 @CLK 를 입력하여 측정하는 방법이다.
    간단하지만 요긴하게 써먹을수 있다.
    아래 그림처럼 측정하고자 하는 구간의 첫번째 브레이크 포인터에
    @CLK/1000,d 를 하면 초단위로 값을 볼수 있다.
    그리고 마지막 브레이크 포인터에 @CLK=0 을 입력한다.
    아래 그림을 보면 for문 수행하는 시간이 대략 548초 걸렸다.
    디버깅 모드이므로 참고 정도로만 사용할것.
    사용자 삽입 이미지




    이올린에 북마크하기(0) 이올린에 추천하기(0)
    2006/12/29 00:31 2006/12/29 00:31
    Trackback Address :: http://hongyver.pe.kr/ttblog/trackback/699

    1. Subject: 수행시간 측정

      Tracked from 냇가의 흐르는 물처럼... 2007/02/06 04:07  삭제

      1. clock() 이용 // 시작clock_t beginTime;clock_t endTime;beginTime = clock(); // 수행endTime = clock();수행 시간 = (double)(endTime - beginTime) / CLOCKS_PER_SEC 2. timeGetTime() 또는 GetTickCount()해더 파일 : mmsystem.h라이브러리 :..

  • seyool 2009/07/16 01:06  댓글주소  수정/삭제  댓글쓰기
    좋은 정보 감사합니다..
    pgomrg.exe가 오타인거 같네요..
    이거때문에 왜 2008에는 없는걸까 좌절했는데, pgomgr.exe였군요 ㅎㅎ
  • 비밀방문자 2010/03/27 03:50  댓글주소  수정/삭제  댓글쓰기
    관리자만 볼 수 있는 댓글입니다.