<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:atom="https://www.w3.org/2005/Atom" xmlns:sy="https://purl.org/rss/1.0/modules/syndication/" xmlns:dc="https://purl.org/dc/elements/1.1/" xmlns:content="https://purl.org/rss/1.0/modules/content/" xmlns:wfw="https://wellformedweb.org/CommentAPI/" xmlns:slash="https://purl.org/rss/1.0/modules/slash/"
  version="2.0">
  <channel>
    <title>Noenemy's Code Foolosophy</title>
    <atom:link
      href="https://docs.microsoft.com/archive/blogs/noenemy/feed.xml"
      rel="self"
      type="application/rss+xml" />
    <link>https://docs.microsoft.com/archive/blogs/noenemy/feed.xml</link>
    <description />
    <lastBuildDate>Wed, 17 Apr 2019 04:05:42 GMT</lastBuildDate>
    <language>en-US</language>
    <sy:updatePeriod>hourly</sy:updatePeriod>
    <sy:updateFrequency>1</sy:updateFrequency>
    <item>
      <title>WP7 개발 관련 자료 모음</title>
      <link>https://docs.microsoft.com/archive/blogs/noenemy/wp7</link>
      <pubDate>Fri, 02 Apr 2010 00:32:55 GMT</pubDate>
      <dc:creator><![CDATA[soonkkim@microsoft.com]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/noenemy/2010/04/02/wp7/</guid>
      <description><![CDATA[WP7 개발시에 필요한 개발 도구들입니다.  먼저 Visual Studio 2010 Express 버전 및 Silverlight, XNA 4.0, 그리고 WP7...]]></description>
      <content:encoded><![CDATA[<p>WP7 개발시에 필요한 개발 도구들입니다.</p>  <p>먼저 Visual Studio 2010 Express 버전 및 Silverlight, XNA 4.0, 그리고 WP7 emulator입니다. MIX10 행사에 공개되었죠.</p>  <p><strong>Windows Phone Developer Tools CTP (VS2010 Express + Emulator + Silverlight + XNA 4.0 for Phone)     <br /></strong><a title="https://www.microsoft.com/downloads/details.aspx?FamilyId=2338b5d1-79d8-46af-b828-380b0f854203&amp;displaylang=en" href="https://www.microsoft.com/downloads/details.aspx?FamilyId=2338b5d1-79d8-46af-b828-380b0f854203&amp;displaylang=en">https://www.microsoft.com/downloads/details.aspx?FamilyId=2338b5d1-79d8-46af-b828-380b0f854203&amp;displaylang=en</a></p>  <p>   <br />다음은 Silverlight 애플리케이션을 디자인하는데 최적화된 도구인 Expression Blend 4 beta for Windows Phone 입니다.</p>  <p><strong>Microsoft Expression Blend 4 Beta</strong>    <br /><a title="https://www.microsoft.com/downloads/details.aspx?FamilyID=6f014e07-0053-4aca-84a7-cd82f9aa989f&amp;displaylang=en" href="https://www.microsoft.com/downloads/details.aspx?FamilyID=6f014e07-0053-4aca-84a7-cd82f9aa989f&amp;displaylang=en">https://www.microsoft.com/downloads/details.aspx?FamilyID=6f014e07-0053-4aca-84a7-cd82f9aa989f&amp;displaylang=en</a></p>  <p><strong>Microsoft Expression Blend Add-in Preview for Windows Phone     <br /></strong><a title="https://www.microsoft.com/downloads/details.aspx?FamilyID=47f5c718-9dec-4557-9687-619c0fdd3d4f&amp;displaylang=en" href="https://www.microsoft.com/downloads/details.aspx?FamilyID=47f5c718-9dec-4557-9687-619c0fdd3d4f&amp;displaylang=en">https://www.microsoft.com/downloads/details.aspx?FamilyID=47f5c718-9dec-4557-9687-619c0fdd3d4f&amp;displaylang=en</a></p>  <p><strong>Microsoft Expression Blend SDK Preview for Windows Phone     <br /></strong><a title="https://www.microsoft.com/downloads/details.aspx?FamilyID=86370108-4c14-42ee-8855-226e5dd9b85b&amp;displaylang=en" href="https://www.microsoft.com/downloads/details.aspx?FamilyID=86370108-4c14-42ee-8855-226e5dd9b85b&amp;displaylang=en">https://www.microsoft.com/downloads/details.aspx?FamilyID=86370108-4c14-42ee-8855-226e5dd9b85b&amp;displaylang=en</a></p>  <p>   <br />Preview에 Beta 버전이다 보니 실행 중에 비정상 종료되거나 오동작을 하는 경우가 좀 있습니다. 그리고 현재 공개되어 있는 SDK도 앞으로 계속 변경되거나 추가될 가능성이 있습니다만, WP7가 어떤 모습으로 출시될지, 그리고 어떠한 방법으로 애플리케이션을 개발해야 될지를 먼저 볼 수 있는 좋은 기회이므로 관심 있는 분들은 설치해서 둘러 보시기 바랍니다.</p>  <p>   <br />그리고 다음은 관련 자료를 얻을 수 있는 사이트들입니다.</p>  <p><strong>Windows Phone 7 시리즈 공식 사이트</strong>    <br /><a title="https://www.windowsphone7series.com/" href="https://www.windowsphone7series.com/">https://www.windowsphone7series.com/</a></p>  <p><strong>Expression 공식 사이트     <br /></strong><a title="https://www.microsoft.com/expression" href="https://www.microsoft.com/expression">https://www.microsoft.com/expression</a></p>  <p><strong>Silverlight 공식 사이트</strong>    <br /><a title="https://www.silverlight.net/" href="https://www.silverlight.net/">https://www.silverlight.net/</a></p>  <p><strong>XNA Developer Center</strong>    <br /><a title="https://msdn.microsoft.com/en-us/aa937791.aspx" href="https://msdn.microsoft.com/en-us/aa937791.aspx">https://msdn.microsoft.com/en-us/aa937791.aspx</a></p>  <p><strong>XNA Creators Club Online</strong>    <br /><a title="https://creators.xna.com/en-US/" href="https://creators.xna.com/en-US/">https://creators.xna.com/en-US/</a></p>  <p><strong>Charles Petzolds’s Programming WP7 Series free ebook</strong>    <br /><a title="https://www.charlespetzold.com/phone/index.html" href="https://www.charlespetzold.com/phone/index.html">https://www.charlespetzold.com/phone/index.html</a></p>]]></content:encoded>
    </item>
    <item>
      <title>Windows Phone 7 App 개발 개요</title>
      <link>https://docs.microsoft.com/archive/blogs/noenemy/windows-phone-7-app</link>
      <pubDate>Thu, 01 Apr 2010 19:51:44 GMT</pubDate>
      <dc:creator><![CDATA[soonkkim@microsoft.com]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/noenemy/2010/04/01/windows-phone-7-app/</guid>
      <description><![CDATA[지난 3월에 Las Vegas에서 있었던 MIX10 컨퍼런스(https://live.visitmix.com/)에서 화두는 그동안 베일에 가려져 있던 Windows Phone 7에...]]></description>
      <content:encoded><![CDATA[<p>지난 3월에 Las Vegas에서 있었던 MIX10 컨퍼런스(<a title="https://live.visitmix.com/" href="https://live.visitmix.com/">https://live.visitmix.com/</a>)에서 화두는 그동안 베일에 가려져 있던 Windows Phone 7에 대한 것이었습니다. 그 만큼이나 Windows Phone 7 App 개발에 대한 많은 세션이 진행되었고 참석자들의 관심도 매우 많았다고 합니다.</p>  <p>실제 제품은 빠르면 북미 시장에 올해 가을 정도에 출시될 것으로 보입니다. MIX10 행사장에서는 3개의 prototype 단말기가 선보였다고 하죠. </p>  <p>Windows Phone 7은 시작화면부터 현재 6.5 버전까지 나와있는 Windows Mobile과 전혀 다릅니다. 기존의 Windows Mobile이 Windows PC 환경을 모바일 장치에서 구현하려는 컨셉이었던 것에 반해 Windows Phone 7은 일반 사용자에게 친숙하게 개발하기 위해 출발점부터 다르게 시작했다고 할 수 있습니다. </p>  <p>기존 Windows Mobile과의 하위 호환성을 과감히 버리면서 까지 full change를 하게 된 것은 아이폰의 보급화에 따른 IT 환경의 변화, 사용자들의 요구사항이 변화한 것을 기존의 Windows Mobile 컨셉으로는 더 이상 충족시킬 수 없다는 위기감을 느꼈기 때문이라고 생각됩니다.</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/noenemy/WindowsLiveWriter/WindowsPhone7App_A6C8/image_4.png" original-url="https://blogs.msdn.com/blogfiles/noenemy/WindowsLiveWriter/WindowsPhone7App_A6C8/image_4.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/noenemy/WindowsLiveWriter/WindowsPhone7App_A6C8/image_thumb_1.png" original-url="https://blogs.msdn.com/blogfiles/noenemy/WindowsLiveWriter/WindowsPhone7App_A6C8/image_thumb_1.png" width="204" height="384" /></a> </p>  <p>[그림] Windows Phone 7의 시작 화면</p>  <p>운영체제의 변경과 함께 Windows Phone 7에서 실행되는 애플리케이션의 환경도 완전히 달라졌습니다. 가장 큰 특징은 Managed Code만 실행된다는 것입니다. 즉, Windows Phone 7용 애플리케이션을 개발하려면 VC++과 같은 unmanaged code가 아니라 C#과 같은 managed code를 이용해서 작성해야 한다는 의미입니다.</p>  <p>현재 CTP 버전으로 공개된 Visual Studio 2010 CTP for Windows Phone이나 Expression Blend Beta 4에서는 C# 언어만 지원하고 있습니다. 향후에는 VB.NET 과 같은 다른 .NET 언어도 지원될 것으로 예상됩니다.</p>  <p>Windows Phone 7용 애플리케이션은 다음과 같이 Silverlight과 XNA라는 큰 두 개의 축으로 구분됩니다. </p>  <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/noenemy/WindowsLiveWriter/WindowsPhone7App_A6C8/image_2.png" original-url="https://blogs.msdn.com/blogfiles/noenemy/WindowsLiveWriter/WindowsPhone7App_A6C8/image_2.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/noenemy/WindowsLiveWriter/WindowsPhone7App_A6C8/image_thumb.png" original-url="https://blogs.msdn.com/blogfiles/noenemy/WindowsLiveWriter/WindowsPhone7App_A6C8/image_thumb.png" width="598" height="305" /></a> </p>  <p>[그림] Windows Phone App Platform</p>  <p></p>  <p>Application을 개발하려면 이 둘 중에서 어떠한 기술을 이용해서 개발할 것인지를 먼저 선택해야 합니다. 이 둘은 다음과 같은 차이점을 가지고 있습니다.</p>  <p><strong>Silverlight</strong> – 일반 애플리케이션을 위한 개발 모델. 기존에 Win Form application을 개발하는 방법과 동일하게 개발이 가능합니다. Windows Phone App을 위해 제공되는 기본 컨트롤(TextBox, Button, ProgressBar 등)을 이용해서 빠른 개발이 가능하며, Event Driven 방식으로 동작합니다.</p>  <p><strong>XNA</strong> - XBOX와 Windows 게임 개발을 위한 플랫폼입니다. 기존의 DirectX를 이용한 개발 방법의 연장선에 있습니다. Silverlight이 event driven 방식이라면, XNA는 화면 frame에 기반한 개발방법입니다. 즉 예를 들어 30fps라면 1초에 30장의 이미지가 연속적으로 보여지는 것을 의미하는데, XNA는 각 시점에 보여질 프레임 이미지를 직접 구성할 수 있습니다. </p>  <p>즉, 일반 애플리케이션을 개발하려면 Silverlight을 이용해서 개발하고, 게임 개발을 하려면 XNA를 이용하시면 됩니다. </p>  <p>기존에 WPF나 Silverlight 개발에 익숙하신 분들은 바로 Windows Phone 7 애플리케이션 개발을 시작하실 수 있습니다. XNA를 이용해서 게임 개발을 하셨던 분들도 Windows Phone 7 게임을 만드시는데 어려움이 없을 겁니다. </p>  <p>현재 IT 업계들이 각자 3 스크린 모델(TV, PC, Mobile에서 모두 동일한 사용자 경험을 제공)을 구축하려고 노력하고 있습니다. Windows Phone 7에서 Silverlight과 XNA를 중심 축으로 선택했다는 것은 향후 TV와 PC 환경에서도 동일한 방향으로 나아가지 않을까라고 조심스럽게 예상 해볼 수 있습니다.</p>]]></content:encoded>
    </item>
    <item>
      <title>Zune HD 개발환경 구축하기</title>
      <link>https://docs.microsoft.com/archive/blogs/noenemy/zune-hd</link>
      <pubDate>Wed, 03 Feb 2010 00:17:42 GMT</pubDate>
      <dc:creator><![CDATA[soonkkim@microsoft.com]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/noenemy/2010/02/03/zune-hd/</guid>
      <description><![CDATA[Zune HD는 애플 IPod touch에 대항하기 위해서 2009년 가을에 출시된 마이크로소프트의 full touch multi media player 입니다.   XNA...]]></description>
      <content:encoded><![CDATA[<p>Zune HD는 애플 IPod touch에 대항하기 위해서 2009년 가을에 출시된 마이크로소프트의 full touch multi media player 입니다. </p>  <p>XNA game studio 3.0 버전부터 Zune 용 소프트웨어를 XNA를 이용해서 개발 할 수 있게 되었는데, 최근에 출시된 Zune HD용 애플리케이션을 작성하려면 XNA 3.1 버전을 설치해야 합니다.</p>  <p>여기서는 Zune HD용 애플리케이션을 개발하기 위한 환경을 구축하는 과정을 간략히 정리하고자 합니다.</p>  <p>우선 XNA 애플리케이션을 개발하기 위해서 필요한 개발 시스템의 최소 요구 사항은 다음과 같습니다.</p>  <p>   <br /><b>개발 시스템 요구 사항</b></p>  <ul>   <li>운영 체제: Windows Vista 서비스 팩 1, Windows XP 서비스 팩 3 </li>    <li>개발 도구: Visual C# 2008 Express Edition 또는 Visual Studio 2008(본 문서는 Visual Studio 2008을 기준으로 작성됨) </li>    <li>하드웨어: DirectX 9.0c와 Shader 모델 1.1을 지원하는 그래픽 카드(Shader 모델 2.0 권장), Zune HD 장치 (펌웨어 3.0 이상)</li> </ul>  <p>위와 같은 장비에 다음과 같은 순서로 필요한 개발 환경을 구축합니다.</p>  <ul>   <li>XNA Game Studio 3.1 버전 설치하기     <br /><a title="https://www.microsoft.com/downloads/details.aspx?FamilyID=80782277-D584-42D2-8024-893FCD9D3E82&amp;displaylang=en" href="https://www.microsoft.com/downloads/details.aspx?FamilyID=80782277-D584-42D2-8024-893FCD9D3E82&amp;displaylang=en">https://www.microsoft.com/downloads/details.aspx?FamilyID=80782277-D584-42D2-8024-893FCD9D3E82&amp;displaylang=en</a></li>    <li>XNA Game Studio 3.1 Zune Extensions 설치하기<a title="https://www.microsoft.com/downloads/details.aspx?FamilyID=48f7ba37-8ba7-4d16-8873-0b7f83ef77f9&amp;displaylang=en" href="https://www.microsoft.com/downloads/details.aspx?FamilyID=48f7ba37-8ba7-4d16-8873-0b7f83ef77f9&amp;displaylang=en">       <br />https://www.microsoft.com/downloads/details.aspx?FamilyID=48f7ba37-8ba7-4d16-8873-0b7f83ef77f9&amp;displaylang=en</a></li>    <li>위 과정을 마쳤으면 설치된 폴더에서 XNA Game Studio Device Center를 실행합니다.</li>    <li>Add Device를 선택하고, 개발용 Zune HD 장치를 추가합니다.</li>    <li>만약 Zune Software가 실행 중이라면 이를 종료합니다.</li>    <li>Visual Studio 2008에서 XNA용 애플리케이션을 개발하고 F5 키를 누르면, Zune HD 장치로 배포되고 라이브 디버깅이 가능합니다.</li> </ul>  <p>아마 향후 펌웨어가 업데이트 되면 Zune HD에서 Silverlight으로 개발한 애플리케이션도 지원하지 않을까라는 추측을 해봅니다만, 아직 이에 대한 공식적인 발표가 없는 상태입니다. 어쨌든 현재로서는 Zune HD용 애플리케이션을 개발하려면 XNA와 C#을 이용해서 개발할 수 밖에 없는 상황입니다.</p>]]></content:encoded>
    </item>
    <item>
      <title>Windows policy에서 사용하는 registry 항목</title>
      <link>https://docs.microsoft.com/archive/blogs/noenemy/windows-policy-registry</link>
      <pubDate>Tue, 02 Feb 2010 00:29:23 GMT</pubDate>
      <dc:creator><![CDATA[soonkkim@microsoft.com]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/noenemy/2010/02/02/windows-policy-registry/</guid>
      <description><![CDATA[그룹 정책 편집기(Gpedit.msc)를 이용하면 컴퓨터와 사용자의 작업 환경에 대한 여러가지 설정이 가능합니다.   예를 들면 패스워드의 길이나 복잡도, 변경 주기 같은 내용을...]]></description>
      <content:encoded><![CDATA[<p>그룹 정책 편집기(Gpedit.msc)를 이용하면 컴퓨터와 사용자의 작업 환경에 대한 여러가지 설정이 가능합니다. </p>  <p>예를 들면 패스워드의 길이나 복잡도, 변경 주기 같은 내용을 설정함으로써 보다 사용자가 보안 등급이 높은 패스워드를 사용할 수 있도록 할 수 있습니다. 또는 특정 사용자가 제어판에서 정해진 항목 외에 설정을 변경함으로써 발생할 수 있는 문제를 방지하기 위해서 특정 제어판 항목을 비활성화 시킨다든지 등의 수많은 Windows policy가 제공되고 있습니다. </p>  <p>이는 주로 네트워크 관리자에 의해서 해당 망 내에 존재하는 컴퓨터들의 유지 보수 및 관리를 쉽게 하기 위해서 Active Directory와 연동되어 관리 목적으로 많이 사용됩니다.</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/noenemy/WindowsLiveWriter/Windowspolicyregistry_F5EF/image_2.png" original-url="https://blogs.msdn.com/blogfiles/noenemy/WindowsLiveWriter/Windowspolicyregistry_F5EF/image_2.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/noenemy/WindowsLiveWriter/Windowspolicyregistry_F5EF/image_thumb.png" original-url="https://blogs.msdn.com/blogfiles/noenemy/WindowsLiveWriter/Windowspolicyregistry_F5EF/image_thumb.png" width="644" height="368" /></a> </p>  <p>[그림] gpedit.msc 실행화면</p>  <p>가끔 gpedit.msc로 설정되는 windows policy가 해당 시스템의 어떠한 registry 설정과 관련이 있는지 확인할 필요가 있습니다. </p>  <p>주로 ProcMon 같은 툴을 이용해서 policy 변경시에 어떠한 registry 항목이 변경되는지 모니터링을 해서 찾았었는데, 다음 문서에서 이에 대한 내용이 정리되어 있음을 확인할 수 있었습니다. 아래 다운로드 페이지에서 확인하고 싶은 운영체제의 버전에 해당하는 엑셀 파일을 다운로드 하셔서 policy 항목을 찾으면 이에 대한 정보를 확인할 수 있습니다.</p>  <p><strong>Group Policy Settings Reference for Windows and Windows Server     <br /></strong><a href="https://aps.mail.microsoft.com/redir.aspx?C=d2c2e2d54d2d4b0096370c003582096c&amp;URL=http%3a%2f%2fwww.microsoft.com%2fdownloads%2fdetails.aspx%3fFamilyID%3d18c90c80-8b0a-4906-a4f5-ff24cc2030fb%26displaylang%3den">https://www.microsoft.com/downloads/details.aspx?FamilyID=18c90c80-8b0a-4906-a4f5-ff24cc2030fb&amp;displaylang=en</a></p>]]></content:encoded>
    </item>
    <item>
      <title>XNA 개발 프레임워크</title>
      <link>https://docs.microsoft.com/archive/blogs/noenemy/xna</link>
      <pubDate>Sun, 03 Jan 2010 23:20:53 GMT</pubDate>
      <dc:creator><![CDATA[soonkkim@microsoft.com]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/noenemy/2010/01/03/xna/</guid>
      <description><![CDATA[&#160;  XNA는 XBOX와 Windows용 게임 애플리케이션을 .net 기반으로 통합해서 개발할 수 있도록 제공되는 framework 입니다. 2008년 10월에...]]></description>
      <content:encoded><![CDATA[<p>&#160;</p>  <p>XNA는 XBOX와 Windows용 게임 애플리케이션을 .net 기반으로 통합해서 개발할 수 있도록 제공되는 framework 입니다. 2008년 10월에 Version 3.0이 출시되면서 휴대용 멀티미디어 장치인 Zune 용 애플리케이션도 XNA를 이용해서 개발 할 수 있게 되었습니다. </p>  <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/noenemy/WindowsLiveWriter/XNA_E5E0/xna_2.jpg" original-url="https://blogs.msdn.com/blogfiles/noenemy/WindowsLiveWriter/XNA_E5E0/xna_2.jpg"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="xna" border="0" alt="xna" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/noenemy/WindowsLiveWriter/XNA_E5E0/xna_thumb.jpg" original-url="https://blogs.msdn.com/blogfiles/noenemy/WindowsLiveWriter/XNA_E5E0/xna_thumb.jpg" width="384" height="484" /></a></p>  <p>이를 이용해서 개발된 애플리케이션은 XBOX Live Marketplace에 업로드해서 유료로 일반 사용자에게 판매할 수 있고, 이를 통해 수익을 올릴 수 있습니다. (Apple의 AppStore와 유사한 개념입니다.) </p>  <p>가장 최근에 출시된 3.1 버전의 경우 Avartar, Video Playback 등의 추가 기능을 포함하고 있으며, 3.1 extension for Zune HD를 설치하면 Visual Studio 2008을 이용해서 Zune HD용 애플리케이션도 개발이 가능합니다. 앞으로 계속해서 새로운 기능들이 추가될 예정으로 있다고 합니다.   <br />    <br />다음은 GDC(Game Developer Conference) 2009에서 소개된 세션 자료입니다. 참고하시기 바랍니다.</p>  <p>GDC 2009 : XNA Game Studio Program Overview   <br /><a title="https://www.microsoft.com/downloads/details.aspx?displaylang=en&amp;FamilyID=ced54340-d2ad-44bd-8a77-22339ed86e08" href="https://www.microsoft.com/downloads/details.aspx?displaylang=en&amp;FamilyID=ced54340-d2ad-44bd-8a77-22339ed86e08">https://www.microsoft.com/downloads/details.aspx?displaylang=en&amp;FamilyID=ced54340-d2ad-44bd-8a77-22339ed86e08</a></p>  <p>GDC 2009: XNA Game Studio XDK Extensions, Certification, and You   <br /><a title="https://www.microsoft.com/downloads/details.aspx?FamilyID=964F0247-9202-4CC0-893D-5519F30C1CCB&amp;displayLang=en" href="https://www.microsoft.com/downloads/details.aspx?FamilyID=964F0247-9202-4CC0-893D-5519F30C1CCB&amp;displayLang=en">https://www.microsoft.com/downloads/details.aspx?FamilyID=964F0247-9202-4CC0-893D-5519F30C1CCB&amp;displayLang=en</a></p>  <p>그리고, 다음은 XNA 개발자 센터 사이트입니다. 관련 커뮤니티나 블로그에서 정보를 얻을 수 있습니다.</p>  <p>XNA Developer Center   <br /><a title="https://msdn.microsoft.com/en-us/aa937791.aspx" href="https://msdn.microsoft.com/en-us/aa937791.aspx">https://msdn.microsoft.com/en-us/aa937791.aspx</a></p>]]></content:encoded>
    </item>
    <item>
      <title>Thread Scheduling 유형</title>
      <link>https://docs.microsoft.com/archive/blogs/noenemy/thread-scheduling</link>
      <pubDate>Mon, 07 Dec 2009 00:32:18 GMT</pubDate>
      <dc:creator><![CDATA[soonkkim@microsoft.com]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/noenemy/2009/12/07/thread-scheduling/</guid>
      <description><![CDATA[&#160;  Windows 운영체제는 thread라는 최소 실행단위에 의해서 프로그램이 실행되는데, 여러 개의 thread가 각각 교대로 CPU에 의해서 매우 빠른 속도로...]]></description>
      <content:encoded><![CDATA[<p>&#160;</p>  <p>Windows 운영체제는 thread라는 최소 실행단위에 의해서 프로그램이 실행되는데, 여러 개의 thread가 각각 교대로 CPU에 의해서 매우 빠른 속도로 실행되면서 마치 동시에 여러 응용 프로그램이 함께 실행되는 것과 같은 결과를 보여주고 있습니다. Thread Scheduling이란 이렇게 시스템에서 실행 중인 여러 개의 thread 간에 어떠한 thread를 실행할 지, 그리고 다음에는 어떠한 thread를 실행할 지에 대해서 결정하는 매카니즘입니다. 오늘은 thread scheduling이 발생하는 유형에 대해서 간단히 알아보도록 하겠습니다.</p>  <p> (원래 내용은 Windows Internals 6장의 내용을 바탕으로 작성되었으며 그림은<a title="https://www.microsoft.com/mspress/books/sampchap/4354c.aspx" href="https://www.microsoft.com/mspress/books/sampchap/4354c.aspx">https://www.microsoft.com/mspress/books/sampchap/4354c.aspx</a>에서 발췌하였습니다.)</p>  <p><strong></strong></p>  <p><strong>1. Voluntary Switch (자발적인 교체)</strong></p>  <p>아래 그림처럼 현재 Priority 19로 running 상태에 있던 thread가 스스로 wait 상태로 들어가면서 Priority 17에서 ready 상태에 있던 thread로 교체되는 시나리오를 생각해 볼 수 있습니다. WaitForSingleObject나 WaitForMultipleObjects와 같은 함수를 호출하면서 어떠한 object의 상태가 변경될 때까지 wait 상태로 들어감으로써 다른 thread에게 실행 권한을 넘겨주는 경우입니다.</p>  <p><img src="https://www.microsoft.com/mspress/books/sampchap/4354/0735610215-18.JPG" /> </p>  <p>&#160;</p>  <p><strong>2. Preemption (선점)</strong></p>  <p>이는 현재 running 상태에 있던 thread가 다른 thread에 의해서 밀려나는 것을 의미합니다. 더 높은 우선순위를 가지고 Wait 상태에 있던 thread가 깨어나거나, 다른 thread의 우선 순위가 오르거나 또는 현재 thread의 우선순위가 낮아짐으로써 다른 thread에게 선점 당하는 경우에 해당합니다.</p>  <p>아래 그림은 Priority 16으로 실행 중이던 thread가 Wait 상태에서 깨어난 Priority 18의 thread에게 실행 제어권을 넘겨주고 다시 waiting queue에 들어가는 경우를 보여주고 있습니다.</p>  <p><img src="https://www.microsoft.com/mspress/books/sampchap/4354/0735610215-19.JPG" /> </p>  <p>&#160;</p>  <p><strong>3. Quantum End (퀀텀 만료)</strong></p>  <p>Quantum이란 한 thread가 running 상태로 실행될 수 있는 기간으로 일정 시간 동안 CPU에 의해서 실행이 되면 다른 thread가 실행될 수 있도록 스스로 제어권을 물려주게 됩니다. </p>  <p>이 Quantum의 길이는 운영체제마다 다릅니다. 예를 들어 Winodws 2000 Pro와 Windows XP는 기본값으로 2 clock을, Windows Server system에서는 12 clock을 부여합니다. 이는 서버 장비의 경우 Quantum을 조금 더 길게 부여함으로써 실행 중이던 서비스를 처리할 수 있는 시간을 충분히 주고 성능을 높이려는 의도입니다. 대신 일반 사용자 PC의 경우 사용자와 키보드, 마우스를 이용해서 interaction이 많으므로 보다 짧은 quantum을 부여합니다.</p>  <p><img src="https://www.microsoft.com/mspress/books/sampchap/4354/0735610215-20.JPG" /> </p>  <p></p>  <p><strong>4. Termination (종료)</strong></p>  <p>ExitThread가 호출되거나 TerminateThread에 의해서 강제로 종료되는 경우에 해당합니다.</p>]]></content:encoded>
    </item>
    <item>
      <title>Win7의 부팅속도 향상</title>
      <link>https://docs.microsoft.com/archive/blogs/noenemy/win7</link>
      <pubDate>Wed, 04 Nov 2009 00:06:00 GMT</pubDate>
      <dc:creator><![CDATA[soonkkim@microsoft.com]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/noenemy/2009/11/04/win7/</guid>
      <description><![CDATA[지난 주 전 세계적으로 Windows 7이 정식 출시됨에 따라 기존의 Windows Vista 출시와는 달리 시장에서 좋은 평가를 받고 있고, IT 전반적으로 큰 이슈가 되고 있는...]]></description>
      <content:encoded><![CDATA[<P>지난 주 전 세계적으로 Windows 7이 정식 출시됨에 따라 기존의 Windows Vista 출시와는 달리 시장에서 좋은 평가를 받고 있고, IT 전반적으로 큰 이슈가 되고 있는 것 같습니다. 이에 따라 인터넷 상에서 연일 Windows 7에 대한 각종 정보를 쉽게 찾아볼 수 있게 되었습니다. </P>
<P>그 중에 UCC 동영상 중에 관심을 끄는 것이 Windows 7의 부팅 속도가 얼마나 빠른지에 대해서 보여주는 것이었습니다. 자세한 시스템 사양은 모르겠지만 시스템의 전원버튼을 누른 후에 10 여 초 내에 부팅이 완료되는 모습이었습니다. 물론 운영체제를 설치한 후에 이런 저런 프로그램이나 서비스가 등록되면 조금씩 부팅 속도가 늦어지겠지만 기존 운영체제에 비해서 부팅 속도가 눈에 띄게 빨라진 것이 사실입니다.</P>
<P>요즘은 가전제품들도 전원을 키면 실제 기능이 동작하는데 시간이 많이 걸리는 경우가 있는데, 하드웨어와 운영체제의 발달에 따라 컴퓨터의 부팅 속도가&nbsp;곧 가전제품 만큼이나 빨라질지도 모르겠습니다.</P>
<P>Windows 7에서는 기존 운영체제와 비교했을 때 부팅 속도를 향상 시키기 위해 다음과 같이 크게 3가지 부분을 변경한 것으로 알려져 있습니다. </P>
<P><STRONG>1. parallelizing device enumeration</STRONG></P>
<P>부팅 시점에 많은 시간이 소요되는 부분이 시스템에 부착되어 있는 device들을 enumeration하고 이에 대한 device tree를 구성하는 과정입니다. 그런데 이러한 장치들이 시스템 부팅 과정에 있어서는 그만큼의 시간을 소요할 정도로 중요한 부분이 아닙니다. 이러한 enumeration 작업은&nbsp;PnP의 queue에 담겨진 후에 수행되는데, 이때 이 작업을 비동기(asynchronous) 처리하도록 속성을 지정함으로써 다른 작업과 병렬로 처리될 수 있도록 변경되었습니다.</P>
<P><STRONG>2. driver re-initialization</STRONG></P>
<P>드라이버 파일이 메모리에 로드되면 해당 드라이버의 시작지점인 DriverEntry 함수가 호출됩니다. 이 함수 내에서는 PnP manager에 IRP_MJ_CREATE, IRP_MJ_CLOSE, IRP_MJ_READ 등과 같은 처리를 수행할 함수를 등록하는 작업을 주로 수행합니다. 문제는 이러한 작업이 부팅을 수행하는 중에는 상대적으로 우선순위가 낮다는 것입니다. 이러한 이유로 Windows 7에서는 DriverEntry 함수가 호출되는 시점이 system device의 enumeratin이 완료된 이후에 callback 되도록 queuing 되도록 변경되었습니다.</P>
<P><STRONG>3. Session 0 initialization</STRONG></P>
<P>Windows Vista에서부터 Service 프로그램은 session 0라는 별도의 세션으로 분리하여 악성코드에 의해서 SYSTEM 권한을 hijacking 당하는 것을 막고 보안 위험성을 줄이게 되었습니다.&nbsp;시스템에&nbsp;등록된 여러 서비스들은 Services.exe에 의해서 서비스 프로그램 간의 종속성을 확인한 다음에&nbsp;어떠한 순서로 &nbsp;실행될 지가 결정되게 됩니다. 즉, 특정 서비스가 먼저 실행된 후에야 실행될 수 있는 종속성이 있기 때문에 이로 인해서 부팅 속도에 어느 정도 영향을 미치게 됩니다. Windows 7에서는 서비스들이 모두&nbsp;시작 완료되는 시간을 단축시키기 위해서 Session 0의 초기화 과정을 조금 일찍 시작합니다. Windows Vista에서는 device tree가 만들어진 이후에 이 과정이 시작되지만, Windows 7에서는 그 이전에 실행되어 device enumeration과 병렬로 작업이 진행됩니다.</P>
<P>이상 Windows 7에서 부팅 속도를 빠르게 하기 위해서 변경된 주요 3가지 내용을 알아보았습니다. 전체적으로 큰 변화보다는 부팅 속도를 빠르게 하기 위해서 각 부팅 단계별로 어느 작업이 가장 중요한지 우선순위를 정하고 중점적으로 진행해야 하는 작업을 정하고 해당 작업에 집중할 수 있도록 조절하였다고 보시면 되겠습니다.</P>]]></content:encoded>
    </item>
    <item>
      <title>Windows 7의 바탕화면 슬라이드쇼</title>
      <link>https://docs.microsoft.com/archive/blogs/noenemy/windows-7</link>
      <pubDate>Thu, 29 Oct 2009 18:55:50 GMT</pubDate>
      <dc:creator><![CDATA[soonkkim@microsoft.com]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/noenemy/2009/10/29/windows-7/</guid>
      <description><![CDATA[Windows 7에서 사용자 UI 관련해서 많은 부분들이 개선되거나 추가 되었는데, 그 중에 하나가 바탕화면 이미지가 일정 시간 단위로 계속 변경되는 슬라이드 쇼 기능입니다....]]></description>
      <content:encoded><![CDATA[<p>Windows 7에서 사용자 UI 관련해서 많은 부분들이 개선되거나 추가 되었는데, 그 중에 하나가 바탕화면 이미지가 일정 시간 단위로 계속 변경되는 슬라이드 쇼 기능입니다. 바탕화면은 사용자가 컴퓨터를 사용할 때 가장 자주 접하게 되는 화면으로 각자 좋아하는 이미지를 이용해서 바탕화면을 꾸며서 사용하는 경우가 많습니다. 하지만 매번 보는 바탕화면이 지겨울 수도 있기 때문에 슬라이드쇼 기능을 이용해서 다양하게 변화하는 바탕화면을 즐길 수 있게 되었습니다.</p>  <p>이 기술은 기존에 바탕화면 테마에 추가된 기능으로서 테마 파일(.theme)에 <b>[Slideshow]</b>라는 섹션에 관련 정보를 추가함으로써 간단히 구현할 수 있습니다.</p>  <p>자세한 내용은 아래 문서를 참고하시기 바랍니다.</p>  <p><b>Creating and Installing Theme Files</b></p>  <p><a href="https://msdn.microsoft.com/en-us/library/bb773190(VS.85).aspx">https://msdn.microsoft.com/en-us/library/bb773190(VS.85).aspx</a></p>  <p><b>1. </b><b>Slideshow section</b><b>의 주요 내용</b></p>  <p>다음은 [Slideshow] section의 세부 속성에 대한 내용입니다.</p>  <h5>[Slideshow] Section</h5>  <p><strong>Windows 7 and later.</strong></p>  <p><strong>Note</strong>&#160; This section is optional. If you do not include this section in your .theme file, the system uses the desktop background image specified in the [Control Panel\Desktop] section. If you include this section, you must specify slide show settings here.</p>  <p>Your theme's background can be a slide show either of images stored locally or of images served by an RSS feed. The [Slideshow] section of the file contains the following attributes:   <table border="1" cellpadding="0"><tbody>       <tr>         <td valign="bottom">           <p><b>Attribute</b></p>         </td>          <td valign="bottom">           <p><b>Description</b></p>         </td>       </tr>        <tr>         <td valign="top">           <p>Interval=number of milliseconds</p>         </td>          <td valign="top">           <p>Required. Interval is a number that determines how often the background changes. It is measured in milliseconds.</p>         </td>       </tr>        <tr>         <td valign="top">           <p>Shuffle=0 or 1</p>         </td>          <td valign="top">           <p>Required. Shuffle identifies whether the background shuffles.              <br />0 = Disabled              <br />1 = Enabled</p>         </td>       </tr>        <tr>         <td valign="top">           <p>RSSFeed=URL to RSS feed</p>         </td>          <td valign="top">           <p>Required if ImagesRootPath is not specified. RSSFeed specifies an RSS feed to use as the background slide show. For the feed to work, you need to reference high-resolution images adhering to the &quot;enclosures&quot; standard used by the <a href="https://go.microsoft.com/fwlink/?LinkId=148762">Windows RSS Platform</a>. Because of this limitation, .theme files that include an RSS feed must be created manually. </p>            <p><strong>Note</strong>&#160; You cannot specify both an RSSFeed and ImagesRootPath.</p>         </td>       </tr>        <tr>         <td valign="top">           <p>ImagesRootPath=path to image folder</p>         </td>          <td valign="top">           <p>Required if RSSFeed is not specified. ImagesRootPath specifies a path to a set of images you want to use as the background slide show. Images in subfolders are not included in the slide show.             <br />ImagesRootPath supports Environment Variable substitutions in the path.</p>            <p><strong>Note</strong>&#160; You cannot specify both an RSSFeed and ImagesRootPath.</p>         </td>       </tr>        <tr>         <td valign="top">           <p>Item<em>N</em>Path=path(s) to specific image(s)</p>         </td>          <td valign="top">           <p>For use with ImagesRootPath. Item<em>N</em>Path specifies paths to specific images, so that you can limit the slide show to particular images instead of all images in a folder. If no paths are specified, all images in the ImagesRootPath path are used in the slide show, including images added after creating and installing the theme.              <br />Item<em>N</em>Path supports Environment Variable substitutions in the path. <em>N</em> is 0, 1, 2, and so on. </p>         </td>       </tr>     </tbody></table> </p>  <p>The following examples show how a .theme file specifies the slide show to include a set of images stored locally.</p>  <p><b>Ex1) </b><b>특정 폴더 내의 모든 이미지를 슬라이드 쇼 하는 방법에 대한 예</b></p>  <pre>[Slideshow]<br />Interval=1800000<br />Shuffle=1<br />ImagesRootPath=%SystemRoot%\Web\Wallpaper</pre>

<p><b>Ex2) </b><b>특정 폴더 내에서 특정 이미지 리스트에 대해서 슬라이드 쇼 하는 방법에 대한 예</b></p>

<pre>[Slideshow]<br />Interval=1800000<br />Shuffle=1<br />ImagesRootPath=%ProgramFiles%\fabrikam\wallpaper<br />Item0Path=%ProgramFiles%\fabrikam\wallpaper\ocean.jpg<br />Item1Path=%ProgramFiles%\fabrikam\wallpaper\mountain.jpg<br />Item2Path=%ProgramFiles%\fabrikam\wallpaper\river.jpg</pre>

<p><b>2. </b><b>RSS feed </b><b>이용하기</b></p>

<p>특히 로컬디스크에 있는 이미지 뿐만 아니라 RSS feed를 이용해서 웹 상에서 존재하는 이미지를 슬라이드 쇼에 이용할 수 있습니다.</p>

<p>다음은 슬라이드 쇼에 사용할 수 있는 RSS feed의 한 예입니다.</p>

<p>RSS feed : <a href="https://specials.msn.com/RSSFeed.aspx?cp-documentid=5484790">https://specials.msn.com/RSSFeed.aspx?cp-documentid=5484790</a>

  <table border="0" cellspacing="0" cellpadding="0"><tbody>
      <tr>
        <td valign="top" width="916">
          <p>&lt;rss version=&quot;2.0&quot;&gt;
            <br />&lt;channel xmlns:media=&quot;<a href="https://search.yahoo.com/mrss/">https://search.yahoo.com/mrss/</a>&quot;&gt;

            <br />&lt;title&gt;RSS Test Page - &lt;/title&gt;

            <br />&lt;link&gt;<a href="https://specials.msn.com/slideshow.aspx%3c/link">https://specials.msn.com/slideshow.aspx&lt;/link</a>&gt;

            <br />&lt;description&gt;This page has amateur drawings&lt;/description&gt;

            <br />&lt;copyright&gt;msn.com&lt;/copyright&gt;

            <br />&lt;language&gt;en-us&lt;/language&gt;

            <br />&lt;ttl&gt;30&lt;/ttl&gt;

            <br />&lt;category&gt;slideshow&lt;/category&gt;

            <br />&lt;item&gt;

            <br />&lt;media:content medium=&quot;image&quot; url=&quot;<b><a href="https://blstb.msn.com/i/C1/10A4634A93728CB27487271CBC3.jpg">https://blstb.msn.com/i/C1/10A4634A93728CB27487271CBC3.jpg</a></b>&quot; width=&quot;80&quot; height=&quot;80&quot; fileSize=&quot;2458&quot;&gt;&lt;/media:content&gt;

            <br />&lt;pubDate&gt;Tue, 02 Oct 2007 17:43:00 GMT&lt;/pubDate&gt;

            <br />&lt;link&gt;<a href="https://specials.msn.com/slideshow.aspx?cp-documentid=5484790&amp;amp;imageindex=1%3c/link">https://specials.msn.com/slideshow.aspx?cp-documentid=5484790&amp;amp;imageindex=1&lt;/link</a>&gt;

            <br />&lt;/item&gt;

            <br />&lt;item&gt;

            <br />&lt;media:content medium=&quot;image&quot; url=&quot;<b><a href="https://blstb.msn.com/i/B5/1126AC9B2AE0AAD62D66DA96E3A87.jpg">https://blstb.msn.com/i/B5/1126AC9B2AE0AAD62D66DA96E3A87.jpg</a></b>&quot; width=&quot;80&quot; height=&quot;80&quot; fileSize=&quot;3207&quot;&gt;&lt;/media:content&gt;

            <br />&lt;pubDate&gt;Tue, 02 Oct 2007 17:43:00 GMT&lt;/pubDate&gt;

            <br />&lt;link&gt;<a href="https://specials.msn.com/slideshow.aspx?cp-documentid=5484790&amp;amp;imageindex=2&lt;/link">https://specials.msn.com/slideshow.aspx?cp-documentid=5484790&amp;amp;imageindex=2&lt;/link</a>&gt;

            <br />&lt;/item&gt;

            <br />&lt;/channel&gt;

            <br />&lt;/rss&gt;</p>
        </td>
      </tr>
    </tbody></table>
</p>

<p><b>Ex3) RSS feed</b><b>를 이용해서 background image를 변경하는 테마를 만드는 방법에 대한 예</b></p>

<p>The following example is a template for a .theme file that creates a desktop background slide show using images from an RSS feed. Follow these steps to customize the template: </p>

<p>1. Copy the following example and paste it into a text editor. </p>

<p>2. Replace {themename} with the name you want to appear in the Personalization Control Panel themes gallery. </p>

<p>3. Replace {rssfeedurl} with the full path to a compatible RSS feed. </p>

<p>4. Save the changes as a file with the &quot;.theme&quot; extension.</p>

<pre>[Theme]<br />DisplayName={themename}<br /><br />[Slideshow]<br />Interval=1800000<br />Shuffle=1<br />RssFeed={rssfeedurl}<br />// 이하 생략</pre>

<pre>원래 바탕화면 배경이미지에 대한 것은 HKCU\Control Panel\Desktop의 wallpaper(REG_SZ) 항목에 이미지파일의 경로를 저장하도록</pre>

<p>되어 있습니다. 슬라이드쇼 기능은 새로 보여줄 이미지 파일을 로컬 디스크에 임의의 경로로 저장하고 이 레지스트리 키 값을 해당 이미지 파일로 변경합니다. 그리고 일정 시간이 되면 다른 이미지 파일로 이를 교체함으로써 슬라이드쇼의 기능을 구현하도록 되어 있습니다.</p>

<p>특히 RSS feed 기능을 이용하면 로컬에 있는 이미지 파일이 아니라 바탕화면 이미지를 배포하는 웹 서버를 통해서 늘 새로운 바탕화면을 구독할 수 있는 기능도 사용할 수 있습니다.</p>]]></content:encoded>
    </item>
    <item>
      <title>OS Kernel 함수들의 Prefix</title>
      <link>https://docs.microsoft.com/archive/blogs/noenemy/os-kernel-prefix</link>
      <pubDate>Wed, 14 Oct 2009 02:56:00 GMT</pubDate>
      <dc:creator><![CDATA[soonkkim@microsoft.com]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/noenemy/2009/10/14/os-kernel-prefix/</guid>
      <description><![CDATA[이전에도 소개 드린 바 있지만 Windows 운영체제의 커널은 여러 구성요소로 구성되어 있습니다. 그러다 보니 내부를 구성하는 함수의 종류도 많고 그 양도 많습니다. 운영체제를...]]></description>
      <content:encoded><![CDATA[<p>이전에도 소개 드린 바 있지만 Windows 운영체제의 커널은 여러 구성요소로 구성되어 있습니다. 그러다 보니 내부를 구성하는 함수의 종류도 많고 그 양도 많습니다. 운영체제를 위해 구현된 많은 함수들은 어느 구성요소에 속하는 함수인지를 구분하기 위해서 함수명 앞에 Prefix를 사용하고 있습니다. </p>  <p>커널 함수들의 Prefix를 간단히 정리하면 다음과 같습니다.</p>  <p>Io_ : I/O Manager   <br />Ps_ : Process Structure Module    <br />Mm_ : Memory manager    <br />Ex_ : Executive (heap 관리, 동기화 처리 등)    <br />Ob_ : Object Manager    <br />Se_ : Security Reference Monitor    <br />Rtl_ : Runtime Library Component (자주 사용되는 utility function들)    <br />Zw_ : Kernel-mode에서 호출되는 Native API들    <br />Ke_ : thread나 processor 사이의 low level 동기화를 위한 함수    <br />Hal_ : HAL(Hardware Abstraction Layer)    </p>]]></content:encoded>
    </item>
    <item>
      <title>DriverEntry 함수</title>
      <link>https://docs.microsoft.com/archive/blogs/noenemy/driverentry</link>
      <pubDate>Fri, 11 Sep 2009 05:03:00 GMT</pubDate>
      <dc:creator><![CDATA[soonkkim@microsoft.com]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/noenemy/2009/09/11/driverentry/</guid>
      <description><![CDATA[C 언어를 이용해서 프로그램을 개발해 본 분이 있다면 main() 함수가 entry function의 역할을 한다는 것을 알고 있을 것입니다. 작성한 응용 프로그램이 실행된 후에...]]></description>
      <content:encoded><![CDATA[<p>C 언어를 이용해서 프로그램을 개발해 본 분이 있다면 main() 함수가 entry function의 역할을 한다는 것을 알고 있을 것입니다. 작성한 응용 프로그램이 실행된 후에 처음으로 불려지는 함수가 됩니다. 실제로는 C runtime library가 먼저 초기화 작업을 한 후에 개발자가 작성한 main() 함수를 호출하는 형태입니다. 아무튼 개발자가 작성하는 코드 중에서는 가장 먼저 실행되는 현관문과 같은 역할을 수행합니다.</p>  <p>이와 유사하게 Windows 응용 프로그램을 위해서는 WinMain()이라는 함수를 구현하도록 되어 있고, 다른 프로세스에 의해서 실행 시점에 로딩되어 사용되는 DLL 파일의 경우에는 DllMain()이라는 entry function을 구현하도록 되어 있습니다.</p>  <p>동일한 개념으로 device driver를 개발할 때 entry function이 되는 것이 바로 DriverEntry() 라는 함수입니다. 이 함수는 작성한 driver file이 메모리에 로드 되는 시점에 system thread(I/O manager)에 의해서 불려지는 함수입니다. 따라서 작성된 driver에서 초기화 작업을 진행할 것이 있으면 이 함수 내에서 구현하는 것이 좋습니다. 주의할 것은 DriverEntry() 함수는 driver module이 메모리에 로드 될 때 한 번만 호출 되는 것으로 해당 driver file이 이미 로드 되어 있는 상황에서 device를 새로 추가했다고 해서 다시 호출되는 것이 아닙니다. 이 점을 고려해서 DriverEntry() 함수에 포함되어야 할 코드인지를 주의하셔서 초기화 작업을 진행하시기 바랍니다.</p>  <p>다음은 MSDN 사이트에서 확인한 DriverEntry 함수에 대한 내용입니다. (<a title="https://msdn.microsoft.com/en-us/library/ms795702.aspx" href="https://msdn.microsoft.com/en-us/library/ms795702.aspx" mce_href="https://msdn.microsoft.com/en-us/library/ms795702.aspx">https://msdn.microsoft.com/en-us/library/ms795702.aspx</a> 참고)</p>  <table border="0" cellspacing="0" cellpadding="2" width="514"><tbody>     <tr>       <td valign="top" width="512">         <p><strong>DRIVER_INITIALIZE </strong><em>DriverEntry</em><strong>;</strong>             <br /><strong>NTSTATUS </strong>            <br /><strong></strong><em>DriverEntry</em><strong>( </strong>            <br /><strong>&#160;&#160;&#160; __in struct _DRIVER_OBJECT&#160; *</strong><em>DriverObject</em><strong>,</strong>             <br /><strong>&#160;&#160;&#160; __in PUNICODE_STRING&#160; </strong><em>RegistryPath</em><strong> </strong>            <br /><strong>&#160;&#160;&#160; )</strong>             <br /><strong>&#160; {...} </strong></p>          <p><em><strong>DriverObject</strong>               <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; </em>Caller-supplied pointer to a <a href="https://msdn.microsoft.com/en-us/library/dd852039.aspx" mce_href="https://msdn.microsoft.com/en-us/library/dd852039.aspx">DRIVER_OBJECT</a> structure. This is the driver's driver object. </p>         <dt><em><strong>RegistryPath</strong></em> </dt><dd>Pointer to a counted Unicode string specifying the path to the driver's registry key.</dd></td>     </tr>   </tbody></table>  <p>DriverEntry가 호출 될 때 전달되는 첫 번째 인자로 I/O manager가 생성한 Driver Object의 주소를 넘겨받는데, driver 실행에 필요한 기본적인 값들에 대해서 이 구조체의 초기값을 설정해야 줘야 합니다. 예를 들면 IRP_MJ_CREATE, IRP_MJ_CLOSE, IRP_MJ_READ 등에 대한 처리를 어느 함수에서 처리할 것인지를 I/O manager에 알려줘야 해당 요청이 있을 때 적절한 dispatch handler routine이 호출됩니다.</p>  <p>예를 들면 다음과 같은 코드 작성이 가능합니다.</p>  <p>pDriverObject-&gt;MajorFunction[IRP_MJ_CREATE] = MyCreateFunction;    <br />pDriverObject-&gt;MajorFunction[IRP_MJ_CLOSE] = MyCloseFunction;     <br />pDriverObject-&gt;MajorFunction[IRP_MJ_READ] = MyReadFunction;    <br />pDriverObject-&gt;MajorFunction[IRP_MJ_POWER] = MyPowerFunction;    <br />pDriverObject-&gt;DriverExtension-&gt;AddDevice = MyAddDeviceFunction;</p>  <p>그리고 driver 내부에서 사용되는 object나 type, resource 등에 대한 초기화 작업을 진행하면 됩니다. 이 과정에서 동적으로 생성한 메모리가 있으면 적절한 해제 작업을 하고 리턴해야 합니다.</p>  <p>초기화 작업에 완료했으면 리턴 값으로 STATUS_SUCCESS를 리턴 합니다. 만약 어떤 이유로 초기화가 제대로 진행되지 못했다면 <a title="https://msdn.microsoft.com/en-us/library/aa489610.aspx" href="https://msdn.microsoft.com/en-us/library/aa489610.aspx">https://msdn.microsoft.com/en-us/library/aa489610.aspx</a> 문서를 참고하셔서 관련 내용이 이벤트 로그에 남겨질 수 있도록 적절한 NTSTATUS 값을 리턴하시기 바랍니다. NTSTATUS 값은 <a title="https://msdn.microsoft.com/en-us/library/aa489585.aspx" href="https://msdn.microsoft.com/en-us/library/aa489585.aspx">https://msdn.microsoft.com/en-us/library/aa489585.aspx</a>에서 확인할 수 있습니다.</p>  <p>다음에는 WDM에서 사용되는 주요 함수 중에서 AddDevice 함수에 대해서 간단히 정리해보도록 하겠습니다.</p>]]></content:encoded>
    </item>
  </channel>
</rss>