<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>No sweat, no sweet.</title>
    <description>Lynn의 개발 로그
</description>
    <link>https://lynnbaek.github.io//</link>
    <atom:link href="https://lynnbaek.github.io//rss" rel="self" type="application/rss+xml"/>
    <pubDate>Sun, 26 Jun 2022 00:35:14 +0900</pubDate>
    <lastBuildDate>Sun, 26 Jun 2022 00:35:14 +0900</lastBuildDate>
    <generator>Jekyll v3.9.2</generator>
    
      <item>
        <title>오늘의 IT 뉴스 (19년 4월 4일)</title>
        <description>&lt;h1 id=&quot;오늘의-뉴스-19년-4월-4일&quot;&gt;오늘의 뉴스 (19년 4월 4일)&lt;/h1&gt;

&lt;h2 id=&quot;1-보안&quot;&gt;1. 보안&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.boannews.com/media/view.asp?idx=78256&quot;&gt;한국 대형 포털에 가짜 로그인 페이지가? 워터링 홀 비상&lt;/a&gt; (보안뉴스)&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.boannews.com/media/view.asp?idx=78285&quot;&gt;영국, 화웨이 장비 분석 후 “도저히 믿을 수 없다” 비판&lt;/a&gt; (보안뉴스)&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.boannews.com/media/view.asp?idx=78254&quot;&gt;야놀자펜션앱 개인정보 7만여 건 유출! 숙박앱 수난시대&lt;/a&gt; (보안뉴스)&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;2-it-시사&quot;&gt;2. IT 시사&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.etnews.com/20190404000337?mc=em_002_00001&quot;&gt;[단독]카카오, 準대기업→대기업 등극한다…벤처 ICT 첫 사례&lt;/a&gt; (전자신문)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;3-에너지&quot;&gt;3. 에너지&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.etnews.com/20190404000212?mc=em_006_00002&quot;&gt;정부, 재생에너지 ‘탄소인증제·최저효율제’ 도입&lt;/a&gt; (전자신문)&lt;/li&gt;
&lt;/ul&gt;

</description>
        <pubDate>Thu, 04 Apr 2019 09:11:00 +0900</pubDate>
        <link>https://lynnbaek.github.io//2019/04/04/%EC%98%A4%EB%8A%98%EC%9D%98%EB%89%B4%EC%8A%A4/</link>
        <guid isPermaLink="true">https://lynnbaek.github.io//2019/04/04/%EC%98%A4%EB%8A%98%EC%9D%98%EB%89%B4%EC%8A%A4/</guid>
        
        <category>IT News</category>
        
        
      </item>
    
      <item>
        <title>오늘의 IT 뉴스 (19년 3월 19일)</title>
        <description>&lt;h1 id=&quot;오늘의-뉴스-19년-3월-19일&quot;&gt;오늘의 뉴스 (19년 3월 19일)&lt;/h1&gt;

&lt;h3 id=&quot;보안&quot;&gt;보안&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.mk.co.kr/news/view/it/2019/03/162437/&quot;&gt;“이 전화는 보이스피싱이 의심됩니다” 보이스피싱 방지 앱 나온다&lt;/a&gt; (매일경제)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;ai&quot;&gt;AI&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.mk.co.kr/news/view/business/2019/03/162677/&quot;&gt;현대차 신형 쏘나타에 카카오 ‘AI 비서’ 태운다&lt;/a&gt; (매일경제)&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.mk.co.kr/news/view/society/2019/03/143409/&quot;&gt;택시기사님 종로에 손님 많아요… AI가 알려주네&lt;/a&gt; (매일경제)&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;코딩교육&quot;&gt;코딩교육&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.mk.co.kr/news/view/business/2019/03/161665/&quot;&gt;아두이노스토리, 8분 코딩 입문 ‘코딩 어레이’ 스타터 키트 출시&lt;/a&gt; (매일경제)&lt;/li&gt;
&lt;/ul&gt;

</description>
        <pubDate>Tue, 19 Mar 2019 23:00:00 +0900</pubDate>
        <link>https://lynnbaek.github.io//2019/03/19/%EC%98%A4%EB%8A%98%EC%9D%98%EB%89%B4%EC%8A%A4/</link>
        <guid isPermaLink="true">https://lynnbaek.github.io//2019/03/19/%EC%98%A4%EB%8A%98%EC%9D%98%EB%89%B4%EC%8A%A4/</guid>
        
        <category>IT News</category>
        
        
      </item>
    
      <item>
        <title>Visual Studio 2008 프로젝트 Visual Studio 2005에서 열기</title>
        <description>&lt;p&gt;Visual Studio 2008 프로젝트를 Visual Studio 2005에서 열고 싶다면,
다음과 같이 2008 프로젝트의 .proj 파일과 .sln 파일을 수정해주면 됩니다.&lt;/p&gt;

&lt;h2 id=&quot;1-proj-파일의-version을-변경한다&quot;&gt;1. .proj 파일의 Version을 변경한다.&lt;/h2&gt;
&lt;hr /&gt;

&lt;h3 id=&quot;변경-전&quot;&gt;변경 전&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;/files/1-49ccb77c-2587-4159-a1af-ddf669cef449.PNG&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;h3 id=&quot;변경-후&quot;&gt;변경 후&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;/files/2-eb35ef18-cda6-42d4-952a-65252a8811cd.PNG&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;2-sln-파일의-version을-변경한다&quot;&gt;2. .sln 파일의 Version을 변경한다.&lt;/h2&gt;
&lt;hr /&gt;

&lt;h3 id=&quot;변경-전-1&quot;&gt;변경 전&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;/files/3-ee7064cc-5136-4f19-adac-edb88f1c0a5d.PNG&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;h3 id=&quot;변경-후-1&quot;&gt;변경 후&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;/files/4-bb0bdaf4-e4ae-4c5b-a3a3-ff4757ab6025.PNG&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
</description>
        <pubDate>Wed, 19 Dec 2018 09:34:00 +0900</pubDate>
        <link>https://lynnbaek.github.io//2018/12/19/VS-2008-PROJ-TO-VS-2005/</link>
        <guid isPermaLink="true">https://lynnbaek.github.io//2018/12/19/VS-2008-PROJ-TO-VS-2005/</guid>
        
        <category>Visual Studio</category>
        
        
      </item>
    
      <item>
        <title>Credential Provider 자동 로그인(AutoLogon) 구현</title>
        <description>&lt;p&gt;MS에서 Windows 로그인 화면을 사용자가 Customizing 할 수 있는 Credential Provider라는 dll을 제공하고 있습니다.&lt;/p&gt;

&lt;p&gt;저는 &lt;a href=&quot;https://code.msdn.microsoft.com/windowsapps/V2-Credential-Provider-7549a730&quot;&gt;V2 Credential Provider Sample&lt;/a&gt;을 사용하였고, 이는 MS에서 제공하는 Credential Provider의 샘플입니다.&lt;/p&gt;

&lt;p&gt;V2 Credential Provider Sample은 Windows8 이상의 OS부터 사용가능하고, 이전 버전의 Windows에서 사용할 Credential Provider를 구현하시려면, V2가 붙지 않은 Credential Provider Sample을 사용하시면 됩니다.&lt;/p&gt;

&lt;p&gt;AutoLogon 부분 관련해서는 &lt;a href=&quot;https://social.msdn.microsoft.com/Forums/windowsdesktop/en-US/496a9c88-4a5a-4e62-83b1-0035d1166297/does-credential-provider-have-auto-logon-possibility?forum=windowssecurity&quot;&gt;Windows Dev Center에 올라와 있는 글&lt;/a&gt;을 보고 도움을 많이 받았습니다.&lt;/p&gt;

&lt;h4 id=&quot;자동-로그인autologon-테스트는-꼭-vm환경에서-해주세요&quot;&gt;&lt;u&gt;자동 로그인(AutoLogon) 테스트는 꼭 VM환경에서 해주세요!&lt;/u&gt;&lt;/h4&gt;

&lt;p&gt;잘못하다가 영영 로그인 화면에서 넘어갈 수 없을지도 모릅니다….ㅋㅋ&lt;/p&gt;

&lt;h1 id=&quot;csamplecredentialcpp-수정&quot;&gt;CSampleCredential.cpp 수정&lt;/h1&gt;
&lt;hr /&gt;
&lt;p&gt;pbAutoLogon 플래그를 TRUE로 변경해준다.&lt;/p&gt;

&lt;div class=&quot;language-c++ highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;n&quot;&gt;HRESULT&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;CSampleCredential&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;SetSelected&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;_Out_&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;BOOL&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;pbAutoLogon&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;o&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;pbAutoLogon&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;TRUE&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;//FALSE를 TRUE로 바꿔준다.&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;S_OK&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;GetSerialization은 submit 버튼이 눌리고 호출되는 함수이다. 여기서 submit 버튼이 눌리고 나서의 처리를 해주면 된다. user계정에 패스워드가 존재한다면, 패스워드를 ProtectIfNecessaryAndCopyPassword 함수에서 첫 번째 파라미터로 해당 user계정의 올바른 패스워드 들어가야만 자동 로그인에 성공한다.&lt;/p&gt;

&lt;div class=&quot;language-c++ highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;n&quot;&gt;HRESULT&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;CSampleCredential&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;GetSerialization&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;_Out_&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;CREDENTIAL_PROVIDER_GET_SERIALIZATION_RESPONSE&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;pcpgsr&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
                                            &lt;span class=&quot;n&quot;&gt;_Out_&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;CREDENTIAL_PROVIDER_CREDENTIAL_SERIALIZATION&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;pcpcs&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
                                            &lt;span class=&quot;n&quot;&gt;_Outptr_result_maybenull_&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;PWSTR&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;ppwszOptionalStatusText&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
                                            &lt;span class=&quot;n&quot;&gt;_Out_&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;CREDENTIAL_PROVIDER_STATUS_ICON&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;pcpsiOptionalStatusIcon&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;HRESULT&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;hr&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;E_UNEXPECTED&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;o&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;pcpgsr&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;CPGSR_NO_CREDENTIAL_NOT_FINISHED&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;o&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;ppwszOptionalStatusText&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;nullptr&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;o&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;pcpsiOptionalStatusIcon&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;CPSI_NONE&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;ZeroMemory&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;pcpcs&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;sizeof&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;pcpcs&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;));&lt;/span&gt;

    &lt;span class=&quot;c1&quot;&gt;// For local user, the domain and user name can be split from _pszQualifiedUserName (domain\username).&lt;/span&gt;
    &lt;span class=&quot;c1&quot;&gt;// CredPackAuthenticationBuffer() cannot be used because it won't work with unlock scenario.&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;_fIsLocalUser&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;n&quot;&gt;PWSTR&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;pwzProtectedPassword&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;n&quot;&gt;hr&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;ProtectIfNecessaryAndCopyPassword&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;_rgFieldStrings&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;SFI_PASSWORD&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;],&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;_cpus&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;pwzProtectedPassword&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;//첫 번째 필드에서 패스워드를 바꿔주면 된다.(패스워드가 있을 때) 패스워드를 어떻게 가져올지는 알아서....&lt;/span&gt;
        &lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;SUCCEEDED&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;hr&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;))&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;n&quot;&gt;PWSTR&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;pszDomain&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
            &lt;span class=&quot;n&quot;&gt;PWSTR&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;pszUsername&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
            &lt;span class=&quot;n&quot;&gt;hr&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;SplitDomainAndUsername&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;_pszQualifiedUserName&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;pszDomain&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;pszUsername&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
            &lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;SUCCEEDED&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;hr&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;))&lt;/span&gt;
            &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
                &lt;span class=&quot;n&quot;&gt;KERB_INTERACTIVE_UNLOCK_LOGON&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;kiul&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
                &lt;span class=&quot;n&quot;&gt;hr&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;KerbInteractiveUnlockLogonInit&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;pszDomain&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;pszUsername&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;pwzProtectedPassword&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;_cpus&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;kiul&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
                &lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;SUCCEEDED&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;hr&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;))&lt;/span&gt;
                &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
                    &lt;span class=&quot;c1&quot;&gt;// We use KERB_INTERACTIVE_UNLOCK_LOGON in both unlock and logon scenarios.  It contains a&lt;/span&gt;
                    &lt;span class=&quot;c1&quot;&gt;// KERB_INTERACTIVE_LOGON to hold the creds plus a LUID that is filled in for us by Winlogon&lt;/span&gt;
                    &lt;span class=&quot;c1&quot;&gt;// as necessary.&lt;/span&gt;
                    &lt;span class=&quot;n&quot;&gt;hr&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;KerbInteractiveUnlockLogonPack&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;kiul&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;pcpcs&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;rgbSerialization&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;pcpcs&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;cbSerialization&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
                    &lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;SUCCEEDED&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;hr&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;))&lt;/span&gt;
                    &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
                        &lt;span class=&quot;n&quot;&gt;ULONG&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;ulAuthPackage&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
                        &lt;span class=&quot;n&quot;&gt;hr&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;RetrieveNegotiateAuthPackage&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;ulAuthPackage&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
                        &lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;SUCCEEDED&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;hr&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;))&lt;/span&gt;
                        &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
                            &lt;span class=&quot;n&quot;&gt;pcpcs&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;ulAuthenticationPackage&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;ulAuthPackage&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
                            &lt;span class=&quot;n&quot;&gt;pcpcs&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;clsidCredentialProvider&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;CLSID_CSample&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
                            &lt;span class=&quot;c1&quot;&gt;// At this point the credential has created the serialized credential used for logon&lt;/span&gt;
                            &lt;span class=&quot;c1&quot;&gt;// By setting this to CPGSR_RETURN_CREDENTIAL_FINISHED we are letting logonUI know&lt;/span&gt;
                            &lt;span class=&quot;c1&quot;&gt;// that we have all the information we need and it should attempt to submit the&lt;/span&gt;
                            &lt;span class=&quot;c1&quot;&gt;// serialized credential.&lt;/span&gt;
                            &lt;span class=&quot;o&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;pcpgsr&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;CPGSR_RETURN_CREDENTIAL_FINISHED&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
                        &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
                    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
                &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
                &lt;span class=&quot;n&quot;&gt;CoTaskMemFree&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;pszDomain&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
                &lt;span class=&quot;n&quot;&gt;CoTaskMemFree&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;pszUsername&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
            &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
            &lt;span class=&quot;n&quot;&gt;CoTaskMemFree&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;pwzProtectedPassword&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;else&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;n&quot;&gt;DWORD&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;dwAuthFlags&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;CRED_PACK_PROTECTED_CREDENTIALS&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;CRED_PACK_ID_PROVIDER_CREDENTIALS&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

        &lt;span class=&quot;c1&quot;&gt;// First get the size of the authentication buffer to allocate&lt;/span&gt;
        &lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;!&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;CredPackAuthenticationBuffer&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;dwAuthFlags&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;_pszQualifiedUserName&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;const_cast&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;PWSTR&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;_rgFieldStrings&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;SFI_PASSWORD&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]),&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;nullptr&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;pcpcs&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;cbSerialization&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt;
            &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;GetLastError&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;==&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;ERROR_INSUFFICIENT_BUFFER&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;))&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;n&quot;&gt;pcpcs&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;rgbSerialization&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;static_cast&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;byte&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;*&amp;gt;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;CoTaskMemAlloc&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;pcpcs&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;cbSerialization&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;));&lt;/span&gt;
            &lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;pcpcs&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;rgbSerialization&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;!=&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;nullptr&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
            &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
                &lt;span class=&quot;n&quot;&gt;hr&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;S_OK&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

                &lt;span class=&quot;c1&quot;&gt;// Retrieve the authentication buffer&lt;/span&gt;
                &lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;CredPackAuthenticationBuffer&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;dwAuthFlags&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;_pszQualifiedUserName&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;const_cast&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;PWSTR&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;_rgFieldStrings&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;SFI_PASSWORD&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]),&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;pcpcs&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;rgbSerialization&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;pcpcs&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;cbSerialization&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;))&lt;/span&gt;
                &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
                    &lt;span class=&quot;n&quot;&gt;ULONG&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;ulAuthPackage&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
                    &lt;span class=&quot;n&quot;&gt;hr&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;RetrieveNegotiateAuthPackage&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;ulAuthPackage&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
                    &lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;SUCCEEDED&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;hr&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;))&lt;/span&gt;
                    &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
                        &lt;span class=&quot;n&quot;&gt;pcpcs&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;ulAuthenticationPackage&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;ulAuthPackage&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
                        &lt;span class=&quot;n&quot;&gt;pcpcs&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;clsidCredentialProvider&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;CLSID_CSample&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

                        &lt;span class=&quot;c1&quot;&gt;// At this point the credential has created the serialized credential used for logon&lt;/span&gt;
                        &lt;span class=&quot;c1&quot;&gt;// By setting this to CPGSR_RETURN_CREDENTIAL_FINISHED we are letting logonUI know&lt;/span&gt;
                        &lt;span class=&quot;c1&quot;&gt;// that we have all the information we need and it should attempt to submit the&lt;/span&gt;
                        &lt;span class=&quot;c1&quot;&gt;// serialized credential.&lt;/span&gt;
                        &lt;span class=&quot;o&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;pcpgsr&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;CPGSR_RETURN_CREDENTIAL_FINISHED&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
                    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
                &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
                &lt;span class=&quot;k&quot;&gt;else&lt;/span&gt;
                &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
                    &lt;span class=&quot;n&quot;&gt;hr&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;HRESULT_FROM_WIN32&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;GetLastError&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;());&lt;/span&gt;
                    &lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;SUCCEEDED&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;hr&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;))&lt;/span&gt;
                    &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
                        &lt;span class=&quot;n&quot;&gt;hr&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;E_FAIL&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
                    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
                &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;

                &lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;FAILED&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;hr&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;))&lt;/span&gt;
                &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
                    &lt;span class=&quot;n&quot;&gt;CoTaskMemFree&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;pcpcs&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;rgbSerialization&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
                &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
            &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
            &lt;span class=&quot;k&quot;&gt;else&lt;/span&gt;
            &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
                &lt;span class=&quot;n&quot;&gt;hr&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;E_OUTOFMEMORY&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
            &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;hr&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;예를 들어 나의 user계정의 비밀번호가 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;qwer1234&lt;/code&gt;라면,  ProtectIfNecessaryAndCopyPassword 함수의 첫 번째 파라미터를 다음과 같이 변경해봅니다.&lt;/p&gt;

&lt;div class=&quot;language-c++ highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;n&quot;&gt;hr&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;ProtectIfNecessaryAndCopyPassword&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;qwer1234&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;_cpus&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;pwzProtectedPassword&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h1 id=&quot;결과-화면&quot;&gt;결과 화면&lt;/h1&gt;
&lt;hr /&gt;
&lt;p&gt;그럼 다음과 같이 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;패스워드 입력 필드&lt;/code&gt;가 사라지고 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;로그인&lt;/code&gt;버튼만 있는 화면이 나타나게 됩니다.&lt;/p&gt;

&lt;h2 id=&quot;변경-전&quot;&gt;변경 전&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;/files/window_login1.PNG&quot; alt=&quot;변경 전 window 로그인 화면&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;변경-후&quot;&gt;변경 후&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;/files/window_login2.PNG&quot; alt=&quot;변경 후 window 로그인 화면&quot; /&gt;&lt;/p&gt;

</description>
        <pubDate>Mon, 17 Dec 2018 11:22:00 +0900</pubDate>
        <link>https://lynnbaek.github.io//2018/12/17/credential-provider-auto-logon/</link>
        <guid isPermaLink="true">https://lynnbaek.github.io//2018/12/17/credential-provider-auto-logon/</guid>
        
        <category>Windows</category>
        
        <category>Credential Provider</category>
        
        
      </item>
    
      <item>
        <title>NW.js(node-webkit) 설치 방법</title>
        <description>&lt;h1 id=&quot;설치하기&quot;&gt;설치하기&lt;/h1&gt;
&lt;hr /&gt;

&lt;ol&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/rogerwang/node-webkit#downloads&quot;&gt;https://github.com/rogerwang/node-webkit#downloads&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;다운받은 파일을 압축 해제한 후, 폴더 내의 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;nw.exe&lt;/code&gt;를 실행한다.&lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;다음과 같이 크로미움 기반의 웹뷰 화면이 나오게 됩니다.&lt;/p&gt;

    &lt;p&gt;&lt;img src=&quot;/files/Untitled-f2278f80-5419-41fe-a287-23205c5074ea.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
  &lt;/li&gt;
&lt;/ol&gt;

&lt;h1 id=&quot;hello-world-띄워보기&quot;&gt;Hello World 띄워보기&lt;/h1&gt;
&lt;hr /&gt;

&lt;ol&gt;
  &lt;li&gt;임의의 폴더를 하나 생성한다. ex) app&lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;index.html 만들기&lt;/p&gt;

    &lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt; &amp;lt;!DOCTYPE html&amp;gt;
 &amp;lt;html&amp;gt;
   &amp;lt;head&amp;gt;
     &amp;lt;title&amp;gt;Hello World!&amp;lt;/title&amp;gt;
   &amp;lt;/head&amp;gt;
   &amp;lt;body&amp;gt;
     &amp;lt;h1&amp;gt;Hello World!&amp;lt;/h1&amp;gt;
     We are using node.js &amp;lt;script&amp;gt;document.write(process.version)&amp;lt;/script&amp;gt;.
   &amp;lt;/body&amp;gt;
 &amp;lt;/html&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;package..json 만들기&lt;/p&gt;

    &lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt; {
   &quot;name&quot;: &quot;nw-demo&quot;,
   &quot;version&quot;: &quot;0.0.1&quot;,
   &quot;main&quot;: &quot;index.html&quot;
 }
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;아까 생성한 폴더(app)에 index.html과 package.json을 넣는다.&lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;폴더를 통째로 nw.exe로 드래그&lt;/p&gt;

    &lt;p&gt;&lt;img src=&quot;/files/Untitled-8751c279-c1d0-4e72-82f8-9cc2e7d2db17.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;다음과 같이 nw.js가 열리면서 Hello Wolrd!를 출력하게 된다.&lt;/p&gt;

    &lt;p&gt;&lt;img src=&quot;/files/Untitled-f7d51f00-c1b6-43b3-be99-7cd23bc2fb56.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
  &lt;/li&gt;
&lt;/ol&gt;

&lt;h1 id=&quot;독립된-설치-패키지-만들기&quot;&gt;독립된 설치 패키지 만들기&lt;/h1&gt;
&lt;hr /&gt;

&lt;ol&gt;
  &lt;li&gt;
    &lt;p&gt;index.html과 package.json 파일이 들어있는 폴더(app)를 압축시킨다.&lt;/p&gt;

    &lt;p&gt;&lt;img src=&quot;/files/Untitled-84573717-89ca-4e7d-84f0-14accb5c3dcb.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;확장자 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.zip&lt;/code&gt;을 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.nw&lt;/code&gt;로 변경한다.&lt;/p&gt;

    &lt;p&gt;&lt;img src=&quot;/files/Untitled-b3828d03-2b36-4310-89ff-a10f18aff5a5.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;명령프롬프트(&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cmd&lt;/code&gt;) 창에서 nw.exe가 있는 폴더로 이동한다.&lt;/p&gt;

    &lt;p&gt;&lt;img src=&quot;/files/Untitled-64bccbbe-589b-4722-b64d-79ab920213f9.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;다음 명령어를 실행한다.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;copy /b nw.exe+app.nw app.exe&lt;/code&gt;&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;app.exe&lt;/code&gt;라는 실행파일이 생성된다.&lt;/p&gt;

    &lt;p&gt;&lt;img src=&quot;/files/Untitled-1a258f4f-d0e1-4ddf-9909-493f1c021d1c.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;app.exe&lt;/code&gt; 를 실행시키면 다음과 같이 stand-alone 형태로 실행되게 된다.&lt;/p&gt;

    &lt;p&gt;&lt;img src=&quot;/files/Untitled-ad174626-7f80-4067-8ccd-04fdbbe95d0b.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
  &lt;/li&gt;
&lt;/ol&gt;
</description>
        <pubDate>Mon, 17 Dec 2018 10:56:00 +0900</pubDate>
        <link>https://lynnbaek.github.io//2018/12/17/nw-js-install/</link>
        <guid isPermaLink="true">https://lynnbaek.github.io//2018/12/17/nw-js-install/</guid>
        
        <category>cross-platform</category>
        
        <category>node-webkit</category>
        
        <category>nw.js</category>
        
        
      </item>
    
      <item>
        <title>Ubuntu run 파일 설치 방법</title>
        <description>&lt;p&gt;우분투에서 확장자가 run인 파일을 설치하는 방법입니다.&lt;/p&gt;

&lt;h2 id=&quot;run-파일-설치-방법&quot;&gt;run 파일 설치 방법&lt;/h2&gt;

&lt;div class=&quot;language-shell highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nb&quot;&gt;chmod &lt;/span&gt;a+x test.run
./test.run
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

</description>
        <pubDate>Thu, 01 Nov 2018 17:15:00 +0900</pubDate>
        <link>https://lynnbaek.github.io//2018/11/01/ubuntu-run-install/</link>
        <guid isPermaLink="true">https://lynnbaek.github.io//2018/11/01/ubuntu-run-install/</guid>
        
        <category>Ubuntu</category>
        
        
      </item>
    
      <item>
        <title>Ubuntu 한글 설치 방법</title>
        <description>&lt;p&gt;우분투를 처음 설치했을 때, 한글은 기본으로 설치되어 있지 않아서, 한글을 사용하기 위해서는 별도의 설치 과정이 필요합니다.&lt;/p&gt;

&lt;h2 id=&quot;우분투-한글-설치-방법&quot;&gt;우분투 한글 설치 방법&lt;/h2&gt;

&lt;ol&gt;
  &lt;li&gt;
    &lt;p&gt;한글 설치&lt;/p&gt;

    &lt;div class=&quot;language-shell highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nb&quot;&gt;sudo &lt;/span&gt;apt-get &lt;span class=&quot;nb&quot;&gt;install &lt;/span&gt;fcitx-hangul
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Language Support&lt;/code&gt; &amp;gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Install/Remove Languages&lt;/code&gt; &amp;gt; Korean 체크 &amp;gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Apply&lt;/code&gt; 버튼 클릭&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;설치 후 Language for menus and windows 항목에 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;한국어&lt;/code&gt;가 있는 지 확인&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;한국어&lt;/code&gt;가 보이지 않는다면 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Language Support&lt;/code&gt; &amp;gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Install/Remove Languages&lt;/code&gt; &amp;gt; Korean 체크 해제 &amp;gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Apply&lt;/code&gt; 버튼 클릭 (Korean 제거)&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;2번 항목 반복 (Korean 다시 설치)&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;한국어&lt;/code&gt;보이면 터미널 열어서 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ibus-setup&lt;/code&gt; 커맨드 입력&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;IBus Preferences 창이 열린다.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Input Method&lt;/code&gt; 탭 &amp;gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Add&lt;/code&gt; 버튼 클릭&amp;gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Korean&lt;/code&gt;클릭 &amp;gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Hangul&lt;/code&gt;클릭 &amp;gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Add&lt;/code&gt; 버튼 클릭&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Settings&lt;/code&gt; 열기 &amp;gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Region &amp;amp; Language&lt;/code&gt; 탭 &amp;gt; Language를 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;한국어&lt;/code&gt;로 변경 &amp;gt; Input Sources에 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Korean(Hangul)&lt;/code&gt; 추가&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;재부팅&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;shift + space로 한/영 전환 가능해짐&lt;/p&gt;
  &lt;/li&gt;
&lt;/ol&gt;
</description>
        <pubDate>Thu, 01 Nov 2018 14:21:00 +0900</pubDate>
        <link>https://lynnbaek.github.io//2018/11/01/ubuntu-hangul-install/</link>
        <guid isPermaLink="true">https://lynnbaek.github.io//2018/11/01/ubuntu-hangul-install/</guid>
        
        <category>Ubuntu</category>
        
        
      </item>
    
      <item>
        <title>Ubuntu SVN cleanup 안될 때</title>
        <description>&lt;p&gt;Ubuntu에서 svn 사용 중에 간혹 cleanup이 안될 때가 있습니다.&lt;/p&gt;

&lt;p&gt;그럴 땐 다음과 같은 방법을 사용해보세요.&lt;/p&gt;

&lt;h2 id=&quot;ubuntu-cleanup-에러-해결-방법&quot;&gt;Ubuntu Cleanup 에러 해결 방법&lt;/h2&gt;

&lt;ol&gt;
  &lt;li&gt;
    &lt;p&gt;문제가 생긴 svn 폴더(checkout한 root 경로)로 이동&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;숨김폴더로 되어있는 ./svn 폴더로 이동&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;wc.db 파일있는지 확인&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;sqlite3 browser 설치(GUI 형태, CUI에서 나는 안되는 증상이 있었다.)&lt;/p&gt;

    &lt;div class=&quot;language-shell highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nb&quot;&gt;sudo &lt;/span&gt;add-apt-repository ppa:linuxgndu/sqlitebrowser-testing
   
&lt;span class=&quot;nb&quot;&gt;sudo &lt;/span&gt;apt-get update &lt;span class=&quot;o&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;sudo &lt;/span&gt;apt-get &lt;span class=&quot;nb&quot;&gt;install &lt;/span&gt;sqlitebrowser
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;데이터베이스 열기&lt;/code&gt; 버튼 클릭하여 wc.db 파일 열기&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;SQL 실행(Execute SQL)&lt;/code&gt; 탭에서 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;delete from work_queue&lt;/code&gt; 이라는 SQL문 작성.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;위에 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;▶&lt;/code&gt; 버튼 클릭.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;변경사항 저장하기&lt;/code&gt; 버튼 클릭&lt;/p&gt;

    &lt;p&gt;&lt;img src=&quot;/files/write SQL.PNG&quot; alt=&quot;SQL문 작성&quot; /&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;SVN Cleanup을 다시 시도 해본다.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;cleanup이 정상적으로 수행 됨.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ol&gt;

</description>
        <pubDate>Wed, 17 Oct 2018 17:59:00 +0900</pubDate>
        <link>https://lynnbaek.github.io//2018/10/17/svn-not-execute-cleanup/</link>
        <guid isPermaLink="true">https://lynnbaek.github.io//2018/10/17/svn-not-execute-cleanup/</guid>
        
        <category>Ubuntu</category>
        
        <category>SVN</category>
        
        
      </item>
    
      <item>
        <title> Ubuntu SVN 추천 :: RabbitVCS 설치하기</title>
        <description>&lt;p&gt;기존에 Ubuntu 환경에서 svn으로 &lt;a href=&quot;https://rapidsvn.org/&quot;&gt;rapidSVN&lt;/a&gt;을 사용하고 있었습니다.&lt;/p&gt;

&lt;p&gt;그런데 폴더나 파일에 직접 우클릭하여(tortoiseSVN 처럼) update나 commit등을 할 수 없기도 하고,&lt;/p&gt;

&lt;p&gt;자꾸 svn이 꼬이는(?) 증상이 발생하여 svn을 다른 툴로 변경해보기로 했습니다.&lt;/p&gt;

&lt;p&gt;그래서 찾아보던 중, RabbitVCS라는 svn이 tortoiseSVN와 비슷한 UI를 제공한다길래 사용해보았습니다.&lt;/p&gt;

&lt;p&gt;아직 설치하고 checkout만 해본 상태인데, 확실히 rapidSVN보다는 편한 것 같습니다.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/files/rabbitvcs-nautilus-integration.png&quot; alt=&quot;rabbitvcs-nautilus-integration&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;ubuntu에서-rabbitvcs-설치&quot;&gt;Ubuntu에서 RabbitVCS 설치&lt;/h2&gt;

&lt;p&gt;다운로드 페이지 : http://wiki.rabbitvcs.org/wiki/download&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;우선 update를 한 번 진행해줍니다.&lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;language-shell highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nb&quot;&gt;sudo &lt;/span&gt;apt-get update
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;ul&gt;
  &lt;li&gt;RabbitVCS를 설치합니다.&lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;language-shell highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nb&quot;&gt;sudo &lt;/span&gt;apt-get &lt;span class=&quot;nb&quot;&gt;install &lt;/span&gt;rabbitvcs-nautilus
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;language-shell highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;nautilus &lt;span class=&quot;nt&quot;&gt;-q&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;div class=&quot;language-shell highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;nautilus &amp;amp;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;적용이 됐는지 확인하고 재부팅합니다.&lt;/p&gt;
</description>
        <pubDate>Thu, 11 Oct 2018 11:41:00 +0900</pubDate>
        <link>https://lynnbaek.github.io//2018/10/11/ubuntu-rabbitvcs/</link>
        <guid isPermaLink="true">https://lynnbaek.github.io//2018/10/11/ubuntu-rabbitvcs/</guid>
        
        <category>Ubuntu</category>
        
        
      </item>
    
      <item>
        <title>C/C++ 배열의 요소 개수 구하기</title>
        <description>&lt;p&gt;C/C++에서 배열의 요소 개수를 구하기 위해서 다음과 같은 매크로를 선언하여 사용할 수 있습니다.&lt;/p&gt;

&lt;div class=&quot;language-c++ highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;cp&quot;&gt;#define _countof(_array)  sizeof(_array) / sizeof(_array[0])
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

</description>
        <pubDate>Tue, 14 Aug 2018 14:59:00 +0900</pubDate>
        <link>https://lynnbaek.github.io//2018/08/14/c-array-element-count/</link>
        <guid isPermaLink="true">https://lynnbaek.github.io//2018/08/14/c-array-element-count/</guid>
        
        <category>C</category>
        
        <category>C++</category>
        
        
      </item>
    
  </channel>
</rss>
