<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-3007272888468082271</id><updated>2012-02-16T20:33:59.257+09:00</updated><category term='InitializeObjectAttributes'/><category term='여행'/><category term='동기화'/><category term='사이버'/><category term='HANDLE'/><category term='웃어야해 울어야해'/><category term='뮤텍스'/><category term='사는 이야기'/><category term='수사요원'/><category term='memory mapped file'/><category term='DriverObject'/><category term='VMWARE 탐지 우회'/><category term='Kernel'/><category term='Tips'/><category term='Semaphore'/><category term='postmessage'/><category term='avast'/><category term='제설'/><category term='SendMessage'/><category term='Hook'/><category term='ObReferenceObjectByHandle'/><category term='2009 Japan'/><category term='중앙경찰학교'/><category term='REMOTE debuggeing'/><category term='프로세스 데이터'/><category term='Process Explorer'/><category term='춥다'/><category term='유니코드'/><category term='경찰'/><category term='mutex'/><category term='Object Name'/><category term='데이터 공유'/><category term='CreateProcess'/><category term='Windows Programming'/><category term='에러'/><category term='ObOpenObjectByName'/><category term='세마포어'/><category term='2009 Saipan'/><category term='네이트온 중복실행'/><category term='mmf'/><category term='귀여운 조카'/><category term='소소한 일상'/><category term='Basic'/><category term='PID'/><title type='text'>Impossible에 땀 한방울을 더 흘리면 I'm possible이 됩니다</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://saicong.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3007272888468082271/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://saicong.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Castlebay</name><uri>http://www.blogger.com/profile/09231852250158037381</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>35</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-3007272888468082271.post-341071386688811526</id><published>2010-06-15T21:37:00.000+09:00</published><updated>2011-01-29T22:24:33.768+09:00</updated><title type='text'>폭탄을 터트리자~</title><content type='html'>&lt;DIV&gt;리스테린 이벤트~ 덜덜덜&lt;/DIV&gt;&lt;DIV&gt;&lt;br /&gt;&lt;/DIV&gt;&lt;object classid='clsid:d27cdb6e-ae6d-11cf-96b8-444553540000' codebase='http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0' width='300' height='250' id='player' align='middle'&gt;&lt;param name='allowScriptAccess' value='always' /&gt;&lt;param name='allowFullScreen' value='false' /&gt;&lt;param name='movie' value='http://www.listerine.kr/Event/2010/Bomb/images/scrap_bomb.swf' /&gt;&lt;param name='quality' value='high' /&gt;&lt;param name='bgcolor' value='#ffffff' /&gt;&lt;embed src='http://www.listerine.kr/Event/2010/Bomb/images/scrap_bomb.swf' quality='high' bgcolor='#ffffff' width='300' height='250' name='player' align='middle' allowScriptAccess='always' allowFullScreen='false' type='application/x-shockwave-flash' pluginspage='http://www.macromedia.com/go/getflashplayer' /&gt;&lt;/object&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3007272888468082271-341071386688811526?l=saicong.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://saicong.blogspot.com/feeds/341071386688811526/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://saicong.blogspot.com/2010/06/%ED%8F%AD%ED%83%84%EC%9D%84-%ED%84%B0%ED%8A%B8%EB%A6%AC%EC%9E%90.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3007272888468082271/posts/default/341071386688811526'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3007272888468082271/posts/default/341071386688811526'/><link rel='alternate' type='text/html' href='http://saicong.blogspot.com/2010/06/%ED%8F%AD%ED%83%84%EC%9D%84-%ED%84%B0%ED%8A%B8%EB%A6%AC%EC%9E%90.html' title='폭탄을 터트리자~'/><author><name>Castlebay</name><uri>http://www.blogger.com/profile/09231852250158037381</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3007272888468082271.post-1723703834018339670</id><published>2010-06-09T18:24:00.000+09:00</published><updated>2011-01-29T22:24:33.688+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='소소한 일상'/><title type='text'>드디어 졸업</title><content type='html'>&lt;p&gt;대전 동부 경찰서 수사과 사이버범죄수사팀에 배명되었습니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;감사합니다.&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3007272888468082271-1723703834018339670?l=saicong.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://saicong.blogspot.com/feeds/1723703834018339670/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://saicong.blogspot.com/2010/06/%EB%93%9C%EB%94%94%EC%96%B4-%EC%A1%B8%EC%97%85.html#comment-form' title='3개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3007272888468082271/posts/default/1723703834018339670'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3007272888468082271/posts/default/1723703834018339670'/><link rel='alternate' type='text/html' href='http://saicong.blogspot.com/2010/06/%EB%93%9C%EB%94%94%EC%96%B4-%EC%A1%B8%EC%97%85.html' title='드디어 졸업'/><author><name>Castlebay</name><uri>http://www.blogger.com/profile/09231852250158037381</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3007272888468082271.post-5183036854605021316</id><published>2010-04-29T18:47:00.000+09:00</published><updated>2011-01-29T22:24:33.653+09:00</updated><title type='text'>^^</title><content type='html'>&lt;div style="text-align: center; clear: both;"&gt;&lt;object height="300" width="400" data="http://ss.textcube.com/blog/2/25883/attach/XAsykZQLjQ.swf" type="application/x-shockwave-flash"&gt;&lt;param value="http://ss.textcube.com/blog/2/25883/attach/XAsykZQLjQ.swf" name="movie" /&gt;&lt;/object&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3007272888468082271-5183036854605021316?l=saicong.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://saicong.blogspot.com/feeds/5183036854605021316/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://saicong.blogspot.com/2010/04/blog-post.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3007272888468082271/posts/default/5183036854605021316'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3007272888468082271/posts/default/5183036854605021316'/><link rel='alternate' type='text/html' href='http://saicong.blogspot.com/2010/04/blog-post.html' title='^^'/><author><name>Castlebay</name><uri>http://www.blogger.com/profile/09231852250158037381</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3007272888468082271.post-9075234005048296304</id><published>2010-03-27T12:29:00.000+09:00</published><updated>2011-01-29T22:24:33.564+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='중앙경찰학교'/><category scheme='http://www.blogger.com/atom/ns#' term='소소한 일상'/><category scheme='http://www.blogger.com/atom/ns#' term='사는 이야기'/><title type='text'>요즘 근황</title><content type='html'>&lt;script src='http://ss.textcube.com/service/blog/script/blogger.js' type='text/javascript'&gt;&lt;/script&gt;학교 생활이 이제 중반을 넘어서면서 적응해서 그런지 편안하네요 ㅋㅋ 몇몇 일들을 올려 봅니다~^^&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/2/25883/attach/XGYdCnDhpl.jpg" style="width:580px;height:773px;" alt="" onclick="TC$PRIV_open_img('http://ss.textcube.com/blog/2/25883/attach/XGYdCnDhpl.jpg')" /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;이 수업은 우리반이 가장 힘들어하는 과목 중 하나인 경찰작용법 수업입니다. 교수님의 무한 한자 신공에 당황스러울때가 종종 있죠. ㅠ.ㅠ 사진에는 한자가 없네요 큭&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/2/25883/attach/XEGRK8hGRm.jpg" style="width:580px;height:435px;" alt="" onclick="TC$PRIV_open_img('http://ss.textcube.com/blog/2/25883/attach/XEGRK8hGRm.jpg')" /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;수업중에는 외부인사분들을 초청한 특강도 있습니다. 이번에는 신바람 박사로 유명한 황수관 박사님이 오셔서 좋은 말씀을 많이 해 주시고 갔습니다.&lt;/div&gt;&lt;div&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/2/25883/attach/XO93FWUeL2.jpg" style="width:580px;height:773px;" alt="" onclick="TC$PRIV_open_img('http://ss.textcube.com/blog/2/25883/attach/XO93FWUeL2.jpg')" /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;저와 함께 화장실 청소 담당하는 행님들 입니다.. 큭큭&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/2/25883/attach/XZ6xZThEVA.jpg" style="width:580px;height:435px;" alt="" onclick="TC$PRIV_open_img('http://ss.textcube.com/blog/2/25883/attach/XZ6xZThEVA.jpg')" /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;몇일 전에는 KTV 에서 중앙경찰학교의 24시간을 담는 촬영을 나오셨습니다. 저희는 수업하는 모습이 찍히는 행운도 누렸고 누나는 인터뷰도 했네요 ~ ^^&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/2/25883/attach/XF4dtSgaDt.jpg" style="width:580px;height:435px;" alt="" onclick="TC$PRIV_open_img('http://ss.textcube.com/blog/2/25883/attach/XF4dtSgaDt.jpg')" /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;또 엄청난 폭설이 내리는 장면도 찍습니다. 이 때 저녁식사하러 갔는데 ㅎㄷㄷㄷ 하게 오더라구요&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3007272888468082271-9075234005048296304?l=saicong.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://saicong.blogspot.com/feeds/9075234005048296304/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://saicong.blogspot.com/2010/03/%EC%9A%94%EC%A6%98-%EA%B7%BC%ED%99%A9.html#comment-form' title='3개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3007272888468082271/posts/default/9075234005048296304'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3007272888468082271/posts/default/9075234005048296304'/><link rel='alternate' type='text/html' href='http://saicong.blogspot.com/2010/03/%EC%9A%94%EC%A6%98-%EA%B7%BC%ED%99%A9.html' title='요즘 근황'/><author><name>Castlebay</name><uri>http://www.blogger.com/profile/09231852250158037381</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3007272888468082271.post-1670159573940641951</id><published>2010-02-20T23:59:00.000+09:00</published><updated>2011-01-29T22:24:33.524+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='귀여운 조카'/><category scheme='http://www.blogger.com/atom/ns#' term='소소한 일상'/><title type='text'>귀여운 조카!</title><content type='html'>&lt;script src='http://ss.textcube.com/service/blog/script/blogger.js' type='text/javascript'&gt;&lt;/script&gt;&lt;P&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/2/25883/attach/XXsporVF2P.jpg" style="width:580px;height:871px;" alt="" onclick="TC$PRIV_open_img('http://ss.textcube.com/blog/2/25883/attach/XXsporVF2P.jpg')" /&gt;&lt;/div&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/2/25883/attach/XYKERognWj.jpg" style="width:580px;height:871px;" alt="" onclick="TC$PRIV_open_img('http://ss.textcube.com/blog/2/25883/attach/XYKERognWj.jpg')" /&gt;&lt;/div&gt;사진첩을 정리하다 나온 정혁이 사진~&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;사촌누나의 둘째 아들.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;너무 귀여워요 ^^&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3007272888468082271-1670159573940641951?l=saicong.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://saicong.blogspot.com/feeds/1670159573940641951/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://saicong.blogspot.com/2010/02/%EA%B7%80%EC%97%AC%EC%9A%B4-%EC%A1%B0%EC%B9%B4.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3007272888468082271/posts/default/1670159573940641951'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3007272888468082271/posts/default/1670159573940641951'/><link rel='alternate' type='text/html' href='http://saicong.blogspot.com/2010/02/%EA%B7%80%EC%97%AC%EC%9A%B4-%EC%A1%B0%EC%B9%B4.html' title='귀여운 조카!'/><author><name>Castlebay</name><uri>http://www.blogger.com/profile/09231852250158037381</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3007272888468082271.post-1377193161373452730</id><published>2010-02-20T22:52:00.000+09:00</published><updated>2011-01-29T22:24:33.480+09:00</updated><title type='text'>^^</title><content type='html'>&lt;script src='http://ss.textcube.com/service/blog/script/blogger.js' type='text/javascript'&gt;&lt;/script&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/2/25883/attach/XcE60PXqHN.jpg" style="width:580px;height:870px;" alt="" onclick="TC$PRIV_open_img('http://ss.textcube.com/blog/2/25883/attach/XcE60PXqHN.jpg')" /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3007272888468082271-1377193161373452730?l=saicong.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://saicong.blogspot.com/feeds/1377193161373452730/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://saicong.blogspot.com/2010/02/blog-post.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3007272888468082271/posts/default/1377193161373452730'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3007272888468082271/posts/default/1377193161373452730'/><link rel='alternate' type='text/html' href='http://saicong.blogspot.com/2010/02/blog-post.html' title='^^'/><author><name>Castlebay</name><uri>http://www.blogger.com/profile/09231852250158037381</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3007272888468082271.post-9208202133595532284</id><published>2010-02-13T03:16:00.000+09:00</published><updated>2011-01-29T22:24:33.442+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='소소한 일상'/><title type='text'>늘 감사하며 살아가자</title><content type='html'>&lt;script src='http://ss.textcube.com/service/blog/script/blogger.js' type='text/javascript'&gt;&lt;/script&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/2/25883/attach/XAOPDfAUCF.jpg" style="width:374px;height:260px;" alt=""  /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3007272888468082271-9208202133595532284?l=saicong.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://saicong.blogspot.com/feeds/9208202133595532284/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://saicong.blogspot.com/2010/02/%EB%8A%98-%EA%B0%90%EC%82%AC%ED%95%98%EB%A9%B0-%EC%82%B4%EC%95%84%EA%B0%80%EC%9E%90.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3007272888468082271/posts/default/9208202133595532284'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3007272888468082271/posts/default/9208202133595532284'/><link rel='alternate' type='text/html' href='http://saicong.blogspot.com/2010/02/%EB%8A%98-%EA%B0%90%EC%82%AC%ED%95%98%EB%A9%B0-%EC%82%B4%EC%95%84%EA%B0%80%EC%9E%90.html' title='늘 감사하며 살아가자'/><author><name>Castlebay</name><uri>http://www.blogger.com/profile/09231852250158037381</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3007272888468082271.post-3707153631520115396</id><published>2010-01-30T14:55:00.000+09:00</published><updated>2011-01-29T22:24:33.400+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='소소한 일상'/><title type='text'>훈련 중~!</title><content type='html'>&lt;script src='http://ss.textcube.com/service/blog/script/blogger.js' type='text/javascript'&gt;&lt;/script&gt;눈이 많이 온 다음에 훈련중이었습니다.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;꽤나 긴 코스를 쉬지않고 올라가는 중...&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/2/25883/attach/XJcvfn00rg.jpg" style="width:579px;height:387px;" alt=""  /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;사실, 시작할때 찍은 사진이라 쌩쌩합니다. ㅋㅋ&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;정상에 올라서 동기들과 찍은 사진 입니다.!!&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/2/25883/attach/XKbcDmw3D0.jpg" style="width:580px;height:386px;" alt=""  /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3007272888468082271-3707153631520115396?l=saicong.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://saicong.blogspot.com/feeds/3707153631520115396/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://saicong.blogspot.com/2010/01/%ED%9B%88%EB%A0%A8-%EC%A4%91.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3007272888468082271/posts/default/3707153631520115396'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3007272888468082271/posts/default/3707153631520115396'/><link rel='alternate' type='text/html' href='http://saicong.blogspot.com/2010/01/%ED%9B%88%EB%A0%A8-%EC%A4%91.html' title='훈련 중~!'/><author><name>Castlebay</name><uri>http://www.blogger.com/profile/09231852250158037381</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3007272888468082271.post-2314329156246259903</id><published>2010-01-24T14:03:00.000+09:00</published><updated>2011-01-29T22:24:33.356+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='소소한 일상'/><title type='text'>즐거운 저녁식사</title><content type='html'>&lt;script src='http://ss.textcube.com/service/blog/script/blogger.js' type='text/javascript'&gt;&lt;/script&gt;&lt;P&gt;밥 먹는 시간은 언제나 기분 좋습니다!&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/2/25883/attach/XKIVT7g6PY.jpg" style="width:580px;height:385px;" alt="" onclick="TC$PRIV_open_img('http://ss.textcube.com/blog/2/25883/attach/XKIVT7g6PY.jpg')" /&gt;&lt;/div&gt;&lt;/P&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3007272888468082271-2314329156246259903?l=saicong.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://saicong.blogspot.com/feeds/2314329156246259903/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://saicong.blogspot.com/2010/01/%EC%A6%90%EA%B1%B0%EC%9A%B4-%EC%A0%80%EB%85%81%EC%8B%9D%EC%82%AC.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3007272888468082271/posts/default/2314329156246259903'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3007272888468082271/posts/default/2314329156246259903'/><link rel='alternate' type='text/html' href='http://saicong.blogspot.com/2010/01/%EC%A6%90%EA%B1%B0%EC%9A%B4-%EC%A0%80%EB%85%81%EC%8B%9D%EC%82%AC.html' title='즐거운 저녁식사'/><author><name>Castlebay</name><uri>http://www.blogger.com/profile/09231852250158037381</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3007272888468082271.post-903081903068266751</id><published>2010-01-24T14:02:00.000+09:00</published><updated>2011-01-29T22:24:33.312+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='소소한 일상'/><title type='text'>수업끝나고 쉬는시간</title><content type='html'>&lt;script src='http://ss.textcube.com/service/blog/script/blogger.js' type='text/javascript'&gt;&lt;/script&gt;&lt;P&gt;아직 적응이 덜 된 건지, 쉬는 시간은 답이 없네요.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;형법 수업 쉬는 시간중...&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/2/25883/attach/XYIit5xTWX.jpg" style="width:580px;height:385px;" alt="" onclick="TC$PRIV_open_img('http://ss.textcube.com/blog/2/25883/attach/XYIit5xTWX.jpg')" /&gt;&lt;/div&gt;&lt;/P&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3007272888468082271-903081903068266751?l=saicong.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://saicong.blogspot.com/feeds/903081903068266751/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://saicong.blogspot.com/2010/01/%EC%88%98%EC%97%85%EB%81%9D%EB%82%98%EA%B3%A0-%EC%89%AC%EB%8A%94%EC%8B%9C%EA%B0%84.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3007272888468082271/posts/default/903081903068266751'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3007272888468082271/posts/default/903081903068266751'/><link rel='alternate' type='text/html' href='http://saicong.blogspot.com/2010/01/%EC%88%98%EC%97%85%EB%81%9D%EB%82%98%EA%B3%A0-%EC%89%AC%EB%8A%94%EC%8B%9C%EA%B0%84.html' title='수업끝나고 쉬는시간'/><author><name>Castlebay</name><uri>http://www.blogger.com/profile/09231852250158037381</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3007272888468082271.post-1150297399233755231</id><published>2010-01-10T01:13:00.000+09:00</published><updated>2011-01-29T22:24:33.267+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='춥다'/><category scheme='http://www.blogger.com/atom/ns#' term='제설'/><category scheme='http://www.blogger.com/atom/ns#' term='중앙경찰학교'/><category scheme='http://www.blogger.com/atom/ns#' term='소소한 일상'/><title type='text'>눈 그리고 날씨</title><content type='html'>&lt;script src='http://ss.textcube.com/service/blog/script/blogger.js' type='text/javascript'&gt;&lt;/script&gt;&lt;P&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/2/25883/attach/XVuwdZgNqW.jpg" style="width:580px;height:435px;" alt="" onclick="TC$PRIV_open_img('http://ss.textcube.com/blog/2/25883/attach/XVuwdZgNqW.jpg')" /&gt;&lt;/div&gt;충주도 눈 왔다하면 장난 아니게 오네요~ 사진으로 표현할 수 없을 정도..엄청난 제설작업&lt;/P&gt;&lt;P&gt;그리고 날씨는 얼마나 추운지..&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/2/25883/attach/XIVrPKT4l1.jpg" style="width:580px;height:773px;" alt="" onclick="TC$PRIV_open_img('http://ss.textcube.com/blog/2/25883/attach/XIVrPKT4l1.jpg')" /&gt;&lt;/div&gt;&lt;/P&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3007272888468082271-1150297399233755231?l=saicong.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://saicong.blogspot.com/feeds/1150297399233755231/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://saicong.blogspot.com/2010/01/%EB%88%88-%EA%B7%B8%EB%A6%AC%EA%B3%A0-%EB%82%A0%EC%94%A8.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3007272888468082271/posts/default/1150297399233755231'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3007272888468082271/posts/default/1150297399233755231'/><link rel='alternate' type='text/html' href='http://saicong.blogspot.com/2010/01/%EB%88%88-%EA%B7%B8%EB%A6%AC%EA%B3%A0-%EB%82%A0%EC%94%A8.html' title='눈 그리고 날씨'/><author><name>Castlebay</name><uri>http://www.blogger.com/profile/09231852250158037381</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3007272888468082271.post-644459362106201974</id><published>2010-01-02T11:17:00.000+09:00</published><updated>2011-01-29T22:24:33.150+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='소소한 일상'/><title type='text'>요즘 일상</title><content type='html'>&lt;script src='http://ss.textcube.com/service/blog/script/blogger.js' type='text/javascript'&gt;&lt;/script&gt;학교에서 교육 받고 있어요~&lt;div&gt;삼계탕이 점심으로 나와서 신나게 먹고 있는중 --;&lt;/div&gt;&lt;div&gt;제식 훈련 평가후라서 그런지 좀 빠졌네요 ㅋㅋ&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/2/25883/attach/XMa1EhFAby.jpg" style="width:450px;height:800px;" alt=""  /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3007272888468082271-644459362106201974?l=saicong.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://saicong.blogspot.com/feeds/644459362106201974/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://saicong.blogspot.com/2010/01/%EC%9A%94%EC%A6%98-%EC%9D%BC%EC%83%81.html#comment-form' title='6개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3007272888468082271/posts/default/644459362106201974'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3007272888468082271/posts/default/644459362106201974'/><link rel='alternate' type='text/html' href='http://saicong.blogspot.com/2010/01/%EC%9A%94%EC%A6%98-%EC%9D%BC%EC%83%81.html' title='요즘 일상'/><author><name>Castlebay</name><uri>http://www.blogger.com/profile/09231852250158037381</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3007272888468082271.post-7908925087975460509</id><published>2009-12-10T17:38:00.000+09:00</published><updated>2011-01-29T22:24:33.028+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='소소한 일상'/><title type='text'>퇴사 선물</title><content type='html'>&lt;script src='http://ss.textcube.com/service/blog/script/blogger.js' type='text/javascript'&gt;&lt;/script&gt;디자인 팀 김모 여인이 준 선물.&lt;br /&gt;&lt;br /&gt;최고의 선물 담배를..&lt;br /&gt;&lt;br /&gt;Thank You.&lt;br /&gt;&lt;br /&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/2/25883/attach/XbXdnNRo41.jpg" style="width:580px;height:435px;" alt="" onclick="TC$PRIV_open_img('http://ss.textcube.com/blog/2/25883/attach/XbXdnNRo41.jpg')" /&gt;&lt;/div&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/2/25883/attach/XETJlylJa8.jpg" style="width:580px;height:435px;" alt="" onclick="TC$PRIV_open_img('http://ss.textcube.com/blog/2/25883/attach/XETJlylJa8.jpg')" /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3007272888468082271-7908925087975460509?l=saicong.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://saicong.blogspot.com/feeds/7908925087975460509/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://saicong.blogspot.com/2009/12/%ED%87%B4%EC%82%AC-%EC%84%A0%EB%AC%BC.html#comment-form' title='1개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3007272888468082271/posts/default/7908925087975460509'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3007272888468082271/posts/default/7908925087975460509'/><link rel='alternate' type='text/html' href='http://saicong.blogspot.com/2009/12/%ED%87%B4%EC%82%AC-%EC%84%A0%EB%AC%BC.html' title='퇴사 선물'/><author><name>Castlebay</name><uri>http://www.blogger.com/profile/09231852250158037381</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3007272888468082271.post-8244982376114782885</id><published>2009-12-10T17:31:00.000+09:00</published><updated>2011-01-29T22:24:32.963+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='소소한 일상'/><title type='text'>3년간 내게 돈을 벌게 해준 책들</title><content type='html'>&lt;script src='http://ss.textcube.com/service/blog/script/blogger.js' type='text/javascript'&gt;&lt;/script&gt;다 찍지는 못했지만, 그동안 나에게 꼬박꼬박 월급을 받게 해준 고마운 책들.&lt;br /&gt;&lt;br /&gt;모든게 정리되면, 첫 페이지부터 차근차근 다시 읽어봐야겠다.&lt;br /&gt;&lt;br /&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/2/25883/attach/XW1Yc61kE7.jpg" style="width:580px;height:435px;" alt="" onclick="TC$PRIV_open_img('http://ss.textcube.com/blog/2/25883/attach/XW1Yc61kE7.jpg')" /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3007272888468082271-8244982376114782885?l=saicong.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://saicong.blogspot.com/feeds/8244982376114782885/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://saicong.blogspot.com/2009/12/3%EB%85%84%EA%B0%84-%EB%82%B4%EA%B2%8C-%EB%8F%88%EC%9D%84-%EB%B2%8C%EA%B2%8C-%ED%95%B4%EC%A4%80-%EC%B1%85%EB%93%A4.html#comment-form' title='1개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3007272888468082271/posts/default/8244982376114782885'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3007272888468082271/posts/default/8244982376114782885'/><link rel='alternate' type='text/html' href='http://saicong.blogspot.com/2009/12/3%EB%85%84%EA%B0%84-%EB%82%B4%EA%B2%8C-%EB%8F%88%EC%9D%84-%EB%B2%8C%EA%B2%8C-%ED%95%B4%EC%A4%80-%EC%B1%85%EB%93%A4.html' title='3년간 내게 돈을 벌게 해준 책들'/><author><name>Castlebay</name><uri>http://www.blogger.com/profile/09231852250158037381</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3007272888468082271.post-4345823111609460911</id><published>2009-12-10T17:24:00.000+09:00</published><updated>2011-01-29T22:24:32.919+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='소소한 일상'/><title type='text'>첫 직장을 그만두는 날</title><content type='html'>&lt;script src='http://ss.textcube.com/service/blog/script/blogger.js' type='text/javascript'&gt;&lt;/script&gt;이제 30분 뒤면 첫 직장인 이곳을 그만두게 되네요.&lt;br /&gt;&lt;br /&gt;대학교 4학년때 취직해서 3년 넘게 다닌 이 회사에서 많은 일들로 울고,웃고 지냈네요.&lt;br /&gt;&lt;br /&gt;평생의 반려자를 만나게끔 해준 박모 과장님도 만나고..&lt;br /&gt;&lt;br /&gt;좋은 행님.친구.동생들을 얻고 갑니다.&lt;br /&gt;&lt;br /&gt;모두들 하는 일 다 잘 되고 좋은 일만 있길 바랍니다.&lt;br /&gt;&lt;br /&gt;그동안 감사했습니다.&lt;br /&gt;&lt;br /&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/2/25883/attach/XeNgfGxYRf.jpg" style="width:580px;height:435px;" alt="" onclick="TC$PRIV_open_img('http://ss.textcube.com/blog/2/25883/attach/XeNgfGxYRf.jpg')" /&gt;&lt;/div&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/2/25883/attach/XHmu2Wktql.jpg" style="width:580px;height:435px;" alt="" onclick="TC$PRIV_open_img('http://ss.textcube.com/blog/2/25883/attach/XHmu2Wktql.jpg')" /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3007272888468082271-4345823111609460911?l=saicong.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://saicong.blogspot.com/feeds/4345823111609460911/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://saicong.blogspot.com/2009/12/%EC%B2%AB-%EC%A7%81%EC%9E%A5%EC%9D%84-%EA%B7%B8%EB%A7%8C%EB%91%90%EB%8A%94-%EB%82%A0.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3007272888468082271/posts/default/4345823111609460911'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3007272888468082271/posts/default/4345823111609460911'/><link rel='alternate' type='text/html' href='http://saicong.blogspot.com/2009/12/%EC%B2%AB-%EC%A7%81%EC%9E%A5%EC%9D%84-%EA%B7%B8%EB%A7%8C%EB%91%90%EB%8A%94-%EB%82%A0.html' title='첫 직장을 그만두는 날'/><author><name>Castlebay</name><uri>http://www.blogger.com/profile/09231852250158037381</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3007272888468082271.post-4895520804946917145</id><published>2009-12-09T10:24:00.000+09:00</published><updated>2011-01-29T22:24:32.844+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='수사요원'/><category scheme='http://www.blogger.com/atom/ns#' term='소소한 일상'/><category scheme='http://www.blogger.com/atom/ns#' term='사이버'/><category scheme='http://www.blogger.com/atom/ns#' term='경찰'/><title type='text'>사이버 수사 요원 합격!!!</title><content type='html'>&lt;script src='http://ss.textcube.com/service/blog/script/blogger.js' type='text/javascript'&gt;&lt;/script&gt;&lt;P&gt;긴 시간이 흐르고 드디어 발표..&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;앞으로 좋은 경찰이 되겠습니다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/2/25883/attach/XKMeHOReG3.jpg" style="width:580px;height:255px;" alt="" onclick="TC$PRIV_open_img('http://ss.textcube.com/blog/2/25883/attach/XKMeHOReG3.jpg')" /&gt;&lt;/div&gt;&lt;/P&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3007272888468082271-4895520804946917145?l=saicong.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://saicong.blogspot.com/feeds/4895520804946917145/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://saicong.blogspot.com/2009/12/%EC%82%AC%EC%9D%B4%EB%B2%84-%EC%88%98%EC%82%AC-%EC%9A%94%EC%9B%90-%ED%95%A9%EA%B2%A9.html#comment-form' title='2개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3007272888468082271/posts/default/4895520804946917145'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3007272888468082271/posts/default/4895520804946917145'/><link rel='alternate' type='text/html' href='http://saicong.blogspot.com/2009/12/%EC%82%AC%EC%9D%B4%EB%B2%84-%EC%88%98%EC%82%AC-%EC%9A%94%EC%9B%90-%ED%95%A9%EA%B2%A9.html' title='사이버 수사 요원 합격!!!'/><author><name>Castlebay</name><uri>http://www.blogger.com/profile/09231852250158037381</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3007272888468082271.post-785972704671368114</id><published>2009-11-19T16:10:00.000+09:00</published><updated>2011-01-29T22:24:32.798+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='세마포어'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='Tips'/><category scheme='http://www.blogger.com/atom/ns#' term='동기화'/><category scheme='http://www.blogger.com/atom/ns#' term='mutex'/><category scheme='http://www.blogger.com/atom/ns#' term='뮤텍스'/><category scheme='http://www.blogger.com/atom/ns#' term='Semaphore'/><title type='text'>Semaphore 와 Mutex 의 차이</title><content type='html'>&lt;P&gt;동기화 방식중 하나인 Semaphore, Mutex, Event 등 여러개가 있는데...사람들이 잘 모르는게 있다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;특히 신입사원 면접 볼때 내기 좋은 문제중 하나다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;* 신입사원 기술면접시 물어볼만한 거 2개&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;1. SendMessage 와 PostMessage 의 차이를 말해보시오.&lt;/P&gt;&lt;P&gt;2. 동기화 방식이 무엇이 있는지 설명하고 , Semaphore 와 Mutex 의 차이를 말해보시오.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;그런데 이런거 물어보면 은근히 대답 못하는 사람 많다..덜덜&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;각설하고, 2번 문제에서 Semaphore 와 Mutex 의 차이가 뭔고..하면 "객체에 대한 소유 권한이 틀리다" 정도로 말할 수 있다.&lt;/P&gt;&lt;P&gt;즉, Mutex 의 경우 , 오직 하나의 스레드에서만 소유가 가능하다. a스레드가 Mutex 를 소유하고 있는 상태라면, b스래드 c스래드는 a스래드가 소유한 Mutex 를 선점하지 못하고 대기해야 한다는 것이다.&lt;/P&gt;&lt;P&gt;그런데 Semaphore 는 다중 스래드의 소유가 가능하다. 어떻게 쓰는 것일까?&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;우선 Semaphore Object 를 생성하는 API 부터 살펴보자.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;HANDLE WINAPI CreateSemaphore(&lt;br /&gt;&amp;nbsp; __in &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; LPSECURITY_ATTRIBUTES &lt;I&gt;&lt;A class=synParam onclick=showTip(this) href=""&gt;lpSemaphoreAttributes&lt;/A&gt;&lt;/I&gt;,&lt;br /&gt;&amp;nbsp; __in &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; LONG &lt;I&gt;&lt;A class=synParam onclick=showTip(this) href=""&gt;lInitialCount&lt;/A&gt;&lt;/I&gt;,&lt;br /&gt;&amp;nbsp; __in &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; LONG &lt;I&gt;&lt;A class=synParam onclick=showTip(this) href=""&gt;lMaximumCount&lt;/A&gt;&lt;/I&gt;,&lt;br /&gt;&amp;nbsp; __in &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; LPCTSTR &lt;I&gt;&lt;A class=synParam onclick=showTip(this) href=""&gt;lpName&lt;/A&gt;&lt;/I&gt;&lt;br /&gt;);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;자..여기서 2번째 파라메터 lInitialCount 부분에 최대 몇 마리의 스래드가 동시에 소유 가능하도록 할 수 있게 할지 숫자를 정해준다. 만약 5개의 스레드에서 소유가 가능하도록 하자. 이 5라는 숫자는 세마포어가 생성되면 그것의 내부에서 참조 인자로 활용되어지며, 만약 10개의스레드가 이 세마포어 획득을 시도한다고 가정하자. 그럼 하나의 스레드가 세마포어를 획득할때마다 참조 인자는 5부터 4..3..2..1.. 결국 0까지 가게 되고 그 순간 10개의 스레드 중 나머지는 대기하게 된다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;그럼 5개의 스레드끼리의 동기화는 어떻게 해결해? 알아서 잘해야지..-_-&lt;br /&gt;&lt;/P&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3007272888468082271-785972704671368114?l=saicong.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://saicong.blogspot.com/feeds/785972704671368114/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://saicong.blogspot.com/2009/11/semaphore-%EC%99%80-mutex-%EC%9D%98-%EC%B0%A8%EC%9D%B4.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3007272888468082271/posts/default/785972704671368114'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3007272888468082271/posts/default/785972704671368114'/><link rel='alternate' type='text/html' href='http://saicong.blogspot.com/2009/11/semaphore-%EC%99%80-mutex-%EC%9D%98-%EC%B0%A8%EC%9D%B4.html' title='Semaphore 와 Mutex 의 차이'/><author><name>Castlebay</name><uri>http://www.blogger.com/profile/09231852250158037381</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3007272888468082271.post-1547863805341837301</id><published>2009-11-19T10:41:00.000+09:00</published><updated>2011-01-29T22:24:32.714+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='세마포어'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='네이트온 중복실행'/><category scheme='http://www.blogger.com/atom/ns#' term='Tips'/><category scheme='http://www.blogger.com/atom/ns#' term='동기화'/><category scheme='http://www.blogger.com/atom/ns#' term='Process Explorer'/><title type='text'>Process Explorer 가 무서운 점.</title><content type='html'>&lt;script src='http://ss.textcube.com/service/blog/script/blogger.js' type='text/javascript'&gt;&lt;/script&gt;&lt;P&gt;개발자나 바이러스 분석가 기타 보안에 관련된 모든일을 할때 가장 유용한 프로그램인 Process Explorer 의 편리함 &amp;amp; 위대함 &amp;amp; 무서움을 한번 써보겠습니다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;윈도우즈 프로그램들은 동일한 프로그램이 여러번 실행되는 걸 방지하기 위하여 여러 방식을 사용 합니다. 이벤트, 뮤텍스 , 세마포어 등등..&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;사실 그러한 오브젝트를 알아내서 종료시키는게 있어서 가장 쉬운 방법은 Process Explorer 를 이용하는 것 입니다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/2/25883/attach/XIAPHbQTtv.jpg" style="width:640px;height:400px;" alt="" onclick="TC$PRIV_open_img('http://ss.textcube.com/blog/2/25883/attach/XIAPHbQTtv.jpg')" /&gt;&lt;/div&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;위 그림에서 보듯이 네이트온이 3개씩 실행됩니다. 그 이유는 네이트온 프로그램은 자신의 중복실행방지를 위하여 세마포어 오브젝트를 이용한 중복 실행 방지 기법을 쓰기 때문입니다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/2/25883/attach/XIpcJmA2AU.jpg" style="width:580px;height:829px;" alt="" onclick="TC$PRIV_open_img('http://ss.textcube.com/blog/2/25883/attach/XIpcJmA2AU.jpg')" /&gt;&lt;/div&gt;&lt;/P&gt;&lt;P&gt;이처럼 Process Explorer 를 통하여 네이트온 프로세스의 세마포어 오브젝트 핸들을 close 하면 무궁무진하게 네이트온을 여러개 실행시킬 수 있습니다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/2/25883/attach/XIElxuHKnG.jpg" style="width:800px;height:18px;" alt="" onclick="TC$PRIV_open_img('http://ss.textcube.com/blog/2/25883/attach/XIElxuHKnG.jpg')" /&gt;&lt;/div&gt;&lt;/P&gt;&lt;P&gt;뭐 대단한 건 아닌데, 어떻게 보면 여러번 손 갈 수 있는 작업을 Process Explorer 하나면 다 해결할 수 있나는 걸 쓴거죠 -_-&lt;/P&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3007272888468082271-1547863805341837301?l=saicong.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://saicong.blogspot.com/feeds/1547863805341837301/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://saicong.blogspot.com/2009/11/process-explorer-%EA%B0%80-%EB%AC%B4%EC%84%9C%EC%9A%B4-%EC%A0%90.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3007272888468082271/posts/default/1547863805341837301'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3007272888468082271/posts/default/1547863805341837301'/><link rel='alternate' type='text/html' href='http://saicong.blogspot.com/2009/11/process-explorer-%EA%B0%80-%EB%AC%B4%EC%84%9C%EC%9A%B4-%EC%A0%90.html' title='Process Explorer 가 무서운 점.'/><author><name>Castlebay</name><uri>http://www.blogger.com/profile/09231852250158037381</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3007272888468082271.post-957550545495874938</id><published>2009-11-18T11:05:00.000+09:00</published><updated>2011-01-29T22:24:32.673+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='Kernel'/><title type='text'>What is KiFastSystemCallRet?</title><content type='html'>&lt;P&gt;This question was asked hundreds of times in 2007 and here is the short answer. This is a return function address for trap frames created for system calls on x86 post-W2K systems. &lt;/P&gt;&lt;P&gt;Since Pentium II Microsoft changed OS call dispatching from interrupt driven INT /IRETD mechanism used in Windows NT and Windows 2000 to faster optimized instruction sequence. This is SYSENTER / SYSEXIT pair on x86 32-bit Intel platforms and SYSCALL / SYSRET pair on x64 Intel and AMD platforms.&lt;/P&gt;&lt;P&gt;INT instruction saves a return address but SYSENTER doesn’t. Let’s look at a typical thread call stack from complete memory dump coming from x86 Windows 2003 system:&lt;/P&gt;&lt;P&gt;1: kd&amp;gt; kL&lt;br /&gt;ChildEBP RetAddr &lt;br /&gt;a5a2ac64 80502d26 nt!KiSwapContext+0x2f&lt;br /&gt;a5a2ac70 804faf20 nt!KiSwapThread+0x8a&lt;br /&gt;a5a2ac98 805a4d6c nt!KeWaitForSingleObject+0x1c2&lt;br /&gt;a5a2ad48 8054086c nt!NtReplyWaitReceivePortEx+0x3dc&lt;br /&gt;a5a2ad48 7c91eb94 nt!KiFastCallEntry+0xfc&lt;br /&gt;00a0fe18 7c91e399 ntdll!KiFastSystemCallRet&lt;br /&gt;00a0fe1c 77e56703 ntdll!NtReplyWaitReceivePortEx+0xc&lt;br /&gt;00a0ff80 77e56c22 RPCRT4!LRPC_ADDRESS::ReceiveLotsaCalls+0xf4&lt;br /&gt;00a0ff88 77e56a3b RPCRT4!RecvLotsaCallsWrapper+0xd&lt;br /&gt;00a0ffa8 77e56c0a RPCRT4!BaseCachedThreadRoutine+0×79&lt;br /&gt;00a0ffb4 7c80b683 RPCRT4!ThreadStartRoutine+0×1a&lt;br /&gt;00a0ffec 00000000 kernel32!BaseThreadStart+0×37&lt;/P&gt;&lt;P&gt;RPC module calls the native function to wait for a reply from an LPC port. Note that we disassemble the return address instead of the symbolic address because of OMAP Code Optimization:&lt;/P&gt;&lt;P&gt;1: kd&amp;gt; ub RPCRT4!LRPC_ADDRESS::ReceiveLotsaCalls+0xf4&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ^ Unable to find valid previous instruction for 'ub RPCRT4!LRPC_ADDRESS::ReceiveLotsaCalls+0xf4'&lt;/P&gt;&lt;P&gt;1: kd&amp;gt; ub 77e56703&lt;br /&gt;RPCRT4!LRPC_ADDRESS::ReceiveLotsaCalls+0xd9:&lt;br /&gt;77e566e8 e8edfeffff &amp;nbsp; &amp;nbsp;&amp;nbsp; call &amp;nbsp;&amp;nbsp; RPCRT4!RpcpPurgeEEInfoFromThreadIfNecessary (77e565da)&lt;br /&gt;77e566ed ff75ec &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; push &amp;nbsp;&amp;nbsp; dword ptr [ebp-14h]&lt;br /&gt;77e566f0 8d45f0 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; lea &amp;nbsp; &amp;nbsp; eax,[ebp-10h]&lt;br /&gt;77e566f3 ff75f4 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; push &amp;nbsp;&amp;nbsp; dword ptr [ebp-0Ch]&lt;br /&gt;77e566f6 ff75fc &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; push &amp;nbsp;&amp;nbsp; dword ptr [ebp-4]&lt;br /&gt;77e566f9 50 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; push &amp;nbsp;&amp;nbsp; eax&lt;br /&gt;77e566fa ff7658 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; push &amp;nbsp;&amp;nbsp; dword ptr [esi+58h]&lt;br /&gt;77e566fd ff15b010e577 &amp;nbsp;&amp;nbsp; call &amp;nbsp;&amp;nbsp; dword ptr [RPCRT4!_imp__NtReplyWaitReceivePortEx (77e510b0)]&lt;/P&gt;&lt;P&gt;1: kd&amp;gt; dps 77e510b0 l1&lt;br /&gt;77e510b0&amp;nbsp; 7c91e38d ntdll!ZwReplyWaitReceivePortEx&lt;/P&gt;&lt;P&gt;NTDLL stub for the native function is small and transitions to level 0 via shared SystemCallSub immediately:&lt;/P&gt;&lt;P&gt;1: kd&amp;gt; uf ntdll!NtReplyWaitReceivePortEx&lt;br /&gt;ntdll!ZwReplyWaitReceivePortEx:&lt;br /&gt;7c91e38d mov &amp;nbsp; &amp;nbsp; eax,0C4h&lt;br /&gt;7c91e392 mov &amp;nbsp; &amp;nbsp; edx,offset SharedUserData!SystemCallStub (7ffe0300)&lt;br /&gt;7c91e397 call &amp;nbsp;&amp;nbsp; dword ptr [edx]&lt;br /&gt;7c91e399 ret &amp;nbsp; &amp;nbsp; 14h&lt;/P&gt;&lt;P&gt;1: kd&amp;gt; dps 7ffe0300 l3&lt;br /&gt;7ffe0300&amp;nbsp; 7c91eb8b ntdll!KiFastSystemCall&lt;br /&gt;7ffe0304&amp;nbsp; 7c91eb94 ntdll!KiFastSystemCallRet&lt;br /&gt;7ffe0308&amp;nbsp; 00000000&lt;/P&gt;&lt;P&gt;1: kd&amp;gt; uf ntdll!KiFastSystemCall&lt;br /&gt;ntdll!KiFastSystemCall:&lt;br /&gt;7c91eb8b mov &amp;nbsp; &amp;nbsp; edx,esp&lt;br /&gt;7c91eb8d sysenter&lt;br /&gt;7c91eb8f nop&lt;br /&gt;7c91eb90 nop&lt;br /&gt;7c91eb91 nop&lt;br /&gt;7c91eb92 nop&lt;br /&gt;7c91eb93 nop&lt;br /&gt;7c91eb94 ret&lt;/P&gt;&lt;P&gt;Before executing SYSENTER ESP points to the following return address:&lt;/P&gt;&lt;P&gt;1: kd&amp;gt; u 7c91e399&lt;br /&gt;ntdll!NtReplyWaitReceivePortEx+0xc:&lt;br /&gt;7c91e399 ret &amp;nbsp; &amp;nbsp; 14h&lt;/P&gt;&lt;P&gt;SYSENTER instruction changes ESP and EIP to new values contained in machine-specific registers (MSR). As a result EIP points to nt!KiFastCallEntry. After saving a trap frame and checking parameters it calls nt!NtReplyWaitReceivePortEx address from system function table. When the latter function returns KiFastCallEntry proceeds to KiServiceExit and KiSystemCallExit2:&lt;/P&gt;&lt;P&gt;1: kd&amp;gt; ub 8054086c&lt;br /&gt;nt!KiFastCallEntry+0xe2:&lt;br /&gt;80540852 mov &amp;nbsp; &amp;nbsp; ebx,dword ptr [edi+eax*4]&lt;br /&gt;80540855 sub &amp;nbsp; &amp;nbsp; esp,ecx&lt;br /&gt;80540857 shr &amp;nbsp; &amp;nbsp; ecx,2&lt;br /&gt;8054085a mov &amp;nbsp; &amp;nbsp; edi,esp&lt;br /&gt;8054085c cmp &amp;nbsp; &amp;nbsp; esi,dword ptr [nt!MmUserProbeAddress (80561114)]&lt;br /&gt;80540862 jae &amp;nbsp; &amp;nbsp; nt!KiSystemCallExit2+0×9f (80540a10)&lt;br /&gt;80540868 rep movs dword ptr es:[edi],dword ptr [esi]&lt;br /&gt;8054086a call &amp;nbsp;&amp;nbsp; ebx&lt;/P&gt;&lt;P&gt;1: kd&amp;gt; u&lt;br /&gt;nt!KiFastCallEntry+0x105:&lt;br /&gt;80540875 mov &amp;nbsp; &amp;nbsp; edx,dword ptr [ebp+3Ch]&lt;br /&gt;80540878 mov &amp;nbsp; &amp;nbsp; dword ptr [ecx+134h],edx&lt;br /&gt;nt!KiServiceExit:&lt;br /&gt;8054087e cli&lt;br /&gt;8054087f test &amp;nbsp;&amp;nbsp; dword ptr [ebp+70h],20000h&lt;br /&gt;80540886 jne &amp;nbsp; &amp;nbsp; nt!KiServiceExit+0x10 (8054088e)&lt;br /&gt;80540888 test &amp;nbsp;&amp;nbsp; byte ptr [ebp+6Ch],1&lt;br /&gt;8054088c je &amp;nbsp; &amp;nbsp;&amp;nbsp; nt!KiServiceExit+0x66 (805408e4)&lt;br /&gt;8054088e mov &amp;nbsp; &amp;nbsp; ebx,dword ptr fs:[124h]&lt;/P&gt;&lt;P&gt;1: kd&amp;gt; u&lt;br /&gt;nt!KiSystemCallExit2+0x12:&lt;br /&gt;80540983 sti&lt;br /&gt;80540984 sysexit&lt;/P&gt;&lt;P&gt;Let’s inspect the trap frame:&lt;/P&gt;&lt;P&gt;1: kd&amp;gt; kv5&lt;br /&gt;ChildEBP RetAddr&amp;nbsp; Args to Child &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;br /&gt;a5a2ac64 80502d26 82ffc090 82ffc020 804faf20 nt!KiSwapContext+0x2f&lt;br /&gt;a5a2ac70 804faf20 e12424b0 8055c0a0 e12424b0 nt!KiSwapThread+0x8a&lt;br /&gt;a5a2ac98 805a4d6c 00000001 00000010 00000001 nt!KeWaitForSingleObject+0x1c2&lt;br /&gt;a5a2ad48 8054086c 000000c8 00a0ff70 00000000 nt!NtReplyWaitReceivePortEx+0x3dc&lt;br /&gt;a5a2ad48 7c91eb94 000000c8 00a0ff70 00000000 nt!KiFastCallEntry+0xfc (TrapFrame @ a5a2ad64)&lt;/P&gt;&lt;P&gt;1: kd&amp;gt; .trap a5a2ad64&lt;br /&gt;ErrCode = 00000000&lt;br /&gt;eax=00000000 ebx=00000000 ecx=00a0fd6c edx=7c91eb94 esi=00159b38 edi=00000100&lt;br /&gt;eip=7c91eb94 esp=00a0fe1c ebp=00a0ff80 iopl=0 nv up ei pl zr na pe nc&lt;br /&gt;cs=001b ss=0023 ds=0023 es=0023 fs=003b gs=0000 efl=00000246&lt;br /&gt;ntdll!KiFastSystemCallRet:&lt;br /&gt;001b:7c91eb94 ret&lt;/P&gt;&lt;P&gt;1: kd&amp;gt; kL&lt;br /&gt;&amp;nbsp; *** Stack trace for last set context - .thread/.cxr resets it&lt;br /&gt;ChildEBP RetAddr &lt;br /&gt;00a0fe18 7c91e399 ntdll!KiFastSystemCallRet&lt;br /&gt;00a0fe1c 77e56703 ntdll!NtReplyWaitReceivePortEx+0xc&lt;br /&gt;00a0ff80 77e56c22 RPCRT4!LRPC_ADDRESS::ReceiveLotsaCalls+0xf4&lt;br /&gt;00a0ff88 77e56a3b RPCRT4!RecvLotsaCallsWrapper+0xd&lt;br /&gt;00a0ffa8 77e56c0a RPCRT4!BaseCachedThreadRoutine+0x79&lt;br /&gt;00a0ffb4 7c80b683 RPCRT4!ThreadStartRoutine+0x1a&lt;br /&gt;00a0ffec 00000000 kernel32!BaseThreadStart+0x37&lt;/P&gt;&lt;P&gt;Therefore I believe the dummy ntdll!KiFastSystemCallRet function with one RET instruction is used to create a uniform trap frame across system calls. Otherwise trap frames for different native API calls would contain different return values.&lt;/P&gt;&lt;P&gt;While reading this post I found two related articles. The first one explains old mechanism for Windows NT and the second one explains the new one:&lt;/P&gt;&lt;P&gt;» Windows NT System Calls REALLY work?&lt;br /&gt;» System call optimization with the SYSENTER instruction&lt;br /&gt;I’ll cover SYSCALL / SYSRET in another blog post.&amp;nbsp; &lt;/P&gt;&lt;P&gt;- Dmitry Vostokov @ DumpAnalysis.org -&lt;br /&gt;&lt;/P&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3007272888468082271-957550545495874938?l=saicong.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://saicong.blogspot.com/feeds/957550545495874938/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://saicong.blogspot.com/2009/11/what-is-kifastsystemcallret.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3007272888468082271/posts/default/957550545495874938'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3007272888468082271/posts/default/957550545495874938'/><link rel='alternate' type='text/html' href='http://saicong.blogspot.com/2009/11/what-is-kifastsystemcallret.html' title='What is KiFastSystemCallRet?'/><author><name>Castlebay</name><uri>http://www.blogger.com/profile/09231852250158037381</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3007272888468082271.post-126153944725789535</id><published>2009-11-16T17:34:00.000+09:00</published><updated>2011-01-29T22:24:32.575+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='memory mapped file'/><category scheme='http://www.blogger.com/atom/ns#' term='mmf'/><category scheme='http://www.blogger.com/atom/ns#' term='프로세스 데이터'/><category scheme='http://www.blogger.com/atom/ns#' term='Basic'/><category scheme='http://www.blogger.com/atom/ns#' term='데이터 공유'/><title type='text'>MMF(Memory Mapped File) 에 대하여</title><content type='html'>&lt;script src='http://ss.textcube.com/service/blog/script/blogger.js' type='text/javascript'&gt;&lt;/script&gt;&lt;div&gt;&lt;font class="Apple-style-span" color="#222222" face="Verdana, 굴림"&gt;&lt;span class="Apple-style-span" style="line-height: 18px;"&gt;&lt;div&gt;&lt;p class="MsoNormal" align="left" style="text-align:left;line-height:13.5pt;mso-pagination:widow-orphan;text-autospace:ideograph-numeric ideograph-other;word-break:keep-all"&gt;&lt;span style="font-size:9.0pt;mso-fareast-font-family:&amp;quot;맑은 고딕&amp;quot;;mso-fareast-theme-font:minor-latin;mso-bidi-font-family:굴림;color:#222222;mso-font-kerning:0pt"&gt;우리가 흔히 어떠한 파일에 대한 조작 행위를 한다면&lt;span lang="EN-US"&gt;, &lt;/span&gt;시스템은파일을 메모리에 적재 시키고&lt;span lang="EN-US"&gt; -&amp;gt; &lt;/span&gt;파일에 대한 조작을 한 다음&lt;span lang="EN-US"&gt;-&amp;gt; &lt;/span&gt;완료가 되면 메모리의 내용을 다시 디스크에 기록하는 방식을 쓰게 됩니다&lt;span lang="EN-US"&gt;.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" align="left" style="text-align:left;line-height:13.5pt;mso-pagination:widow-orphan;text-autospace:ideograph-numeric ideograph-other;word-break:keep-all"&gt;&lt;span lang="EN-US" style="font-size:9.0pt;mso-fareast-font-family:&amp;quot;맑은 고딕&amp;quot;;mso-fareast-theme-font:minor-latin;mso-bidi-font-family:굴림;color:#222222;mso-font-kerning:0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" align="left" style="text-align:left;line-height:13.5pt;mso-pagination:widow-orphan;text-autospace:ideograph-numeric ideograph-other;word-break:keep-all"&gt;&lt;span style="font-size:9.0pt;mso-fareast-font-family:&amp;quot;맑은 고딕&amp;quot;;mso-fareast-theme-font:minor-latin;mso-bidi-font-family:굴림;color:#222222;mso-font-kerning:0pt"&gt;이러한 방식은 대용량의 파일이나 여러 작업을 하는 경우 효율성이 떨어지게 되며&lt;span lang="EN-US"&gt;, &lt;/span&gt;이를 보완할 수 있는 방법으로&lt;span lang="EN-US"&gt; Memory Mapped File (&lt;/span&gt;이하&lt;span lang="EN-US"&gt; MMF) &lt;/span&gt;라는 기법을 사용하게 됩니다&lt;span lang="EN-US"&gt;.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" align="left" style="text-align:left;line-height:13.5pt;mso-pagination:widow-orphan;text-autospace:ideograph-numeric ideograph-other;word-break:keep-all"&gt;&lt;span lang="EN-US" style="font-size:9.0pt;mso-fareast-font-family:&amp;quot;맑은 고딕&amp;quot;;mso-fareast-theme-font:minor-latin;mso-bidi-font-family:굴림;color:#222222;mso-font-kerning:0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" align="left" style="text-align:left;line-height:13.5pt;mso-pagination:widow-orphan;text-autospace:ideograph-numeric ideograph-other;word-break:keep-all"&gt;&lt;span lang="EN-US" style="font-size:9.0pt;mso-fareast-font-family:&amp;quot;맑은 고딕&amp;quot;;mso-fareast-theme-font:minor-latin;mso-bidi-font-family:굴림;color:#222222;mso-font-kerning:0pt"&gt;MMF(Memory Mapped File)&lt;/span&gt;&lt;span style="font-size:9.0pt;mso-fareast-font-family:&amp;quot;맑은 고딕&amp;quot;;mso-fareast-theme-font:minor-latin;mso-bidi-font-family:굴림;color:#222222;mso-font-kerning:0pt"&gt;이란 파일과 메모리 객체를 연결한다는말 입니다&lt;span lang="EN-US"&gt;. &lt;/span&gt;즉 파일&lt;span lang="EN-US"&gt; = &lt;/span&gt;메모리 라고 생각하시면 됩니다&lt;span lang="EN-US"&gt;. &lt;/span&gt;조금 난해한 해석이죠&lt;span lang="EN-US"&gt; -_-;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" align="left" style="text-align:left;line-height:13.5pt;mso-pagination:widow-orphan;text-autospace:ideograph-numeric ideograph-other;word-break:keep-all"&gt;&lt;span style="font-size:9.0pt;mso-fareast-font-family:&amp;quot;맑은 고딕&amp;quot;;mso-fareast-theme-font:minor-latin;mso-bidi-font-family:굴림;color:#222222;mso-font-kerning:0pt"&gt;그림으로 간단히 표현이 되네요&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/span&gt;&lt;/font&gt;&lt;/div&gt;&lt;div&gt;&lt;font class="Apple-style-span" color="#222222" face="Verdana, 굴림"&gt;&lt;span class="Apple-style-span" style="line-height: 18px; "&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/2/25883/attach/XYb8MHSrOd.png" style="width:580px;height:206px;" alt="" onclick="TC$PRIV_open_img('http://ss.textcube.com/blog/2/25883/attach/XYb8MHSrOd.png')" /&gt;&lt;/div&gt;&lt;p class="MsoNormal" align="left" style="text-align:left;line-height:13.5pt;mso-pagination:widow-orphan;text-autospace:ideograph-numeric ideograph-other;word-break:keep-all"&gt;&lt;span style="font-size:9.0pt;mso-bidi-font-size:11.0pt;mso-fareast-font-family:&amp;quot;맑은 고딕&amp;quot;;mso-fareast-theme-font:minor-latin;mso-bidi-font-family:굴림;color:#222222;mso-font-kerning:0pt"&gt;좀 더 풀어서 이야기 하면 파일과 메모리 객체&lt;span lang="EN-US"&gt;(&lt;/span&gt;그냥 메모리의 어떤 비어있는 영역이라고 생각하시면 됩니다&lt;span lang="EN-US"&gt;.)&lt;/span&gt;를 연결시킨 후 그 메모리 객체에 이름을 지어줍니다&lt;span lang="EN-US"&gt;. (&lt;/span&gt;즉&lt;span lang="EN-US"&gt;, &lt;/span&gt;어떠한메모리 영역에 파일을 연결시키고 메모리 영역을 컨트롤 하기 위하여 이름을 지어주는 것 입니다&lt;span lang="EN-US"&gt;.)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" align="left" style="text-align:left;line-height:13.5pt;mso-pagination:widow-orphan;text-autospace:ideograph-numeric ideograph-other;word-break:keep-all"&gt;&lt;span lang="EN-US" style="font-size:9.0pt;mso-bidi-font-size:11.0pt;mso-fareast-font-family:&amp;quot;맑은 고딕&amp;quot;;mso-fareast-theme-font:minor-latin;mso-bidi-font-family:굴림;color:#222222;mso-font-kerning:0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" align="left" style="text-align:left;line-height:13.5pt;mso-pagination:widow-orphan;text-autospace:ideograph-numeric ideograph-other;word-break:keep-all"&gt;&lt;span style="font-size:9.0pt;mso-bidi-font-size:11.0pt;mso-fareast-font-family:&amp;quot;맑은 고딕&amp;quot;;mso-fareast-theme-font:minor-latin;mso-bidi-font-family:굴림;color:#222222;mso-font-kerning:0pt"&gt;그 후 그 이름을 이용하여 메모리에 데이터를 읽고 쓰고 하는 작업을 하게되면그 내용이 메모리와 연결되어 있는 파일에 똑같은 효과가 적용되는 구조입니다&lt;span lang="EN-US"&gt;.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" align="left" style="text-align:left;line-height:13.5pt;mso-pagination:widow-orphan;text-autospace:ideograph-numeric ideograph-other;word-break:keep-all"&gt;&lt;span lang="EN-US" style="font-size:9.0pt;mso-bidi-font-size:11.0pt;mso-fareast-font-family:&amp;quot;맑은 고딕&amp;quot;;mso-fareast-theme-font:minor-latin;mso-bidi-font-family:굴림;color:#222222;mso-font-kerning:0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" align="left" style="text-align:left;line-height:13.5pt;mso-pagination:widow-orphan;text-autospace:ideograph-numeric ideograph-other;word-break:keep-all"&gt;&lt;span style="font-size:9.0pt;mso-bidi-font-size:11.0pt;mso-fareast-font-family:&amp;quot;맑은 고딕&amp;quot;;mso-fareast-theme-font:minor-latin;mso-bidi-font-family:굴림;color:#222222;mso-font-kerning:0pt"&gt;이게 왜 빠른가&lt;span lang="EN-US"&gt;...&lt;/span&gt;하면&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" align="left" style="text-align:left;line-height:13.5pt;mso-pagination:widow-orphan;text-autospace:ideograph-numeric ideograph-other;word-break:keep-all"&gt;&lt;span lang="EN-US" style="font-size:9.0pt;mso-bidi-font-size:11.0pt;mso-fareast-font-family:&amp;quot;맑은 고딕&amp;quot;;mso-fareast-theme-font:minor-latin;mso-bidi-font-family:굴림;color:#222222;mso-font-kerning:0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" align="left" style="text-align:left;line-height:13.5pt;mso-pagination:widow-orphan;text-autospace:ideograph-numeric ideograph-other;word-break:keep-all"&gt;&lt;span style="font-size:9.0pt;mso-bidi-font-size:11.0pt;mso-fareast-font-family:&amp;quot;맑은 고딕&amp;quot;;mso-fareast-theme-font:minor-latin;mso-bidi-font-family:굴림;color:#222222;mso-font-kerning:0pt"&gt;일반적인 사용&lt;span lang="EN-US"&gt; : &lt;/span&gt;파일 메모리에로드&lt;span lang="EN-US"&gt; -&amp;gt; &lt;/span&gt;메모리 수정&lt;span lang="EN-US"&gt; -&amp;gt; &lt;/span&gt;수정된 메모리를 디스크에있는 파일에 저장&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" align="left" style="text-align:left;line-height:13.5pt;mso-pagination:widow-orphan;text-autospace:ideograph-numeric ideograph-other;word-break:keep-all"&gt;&lt;span lang="EN-US" style="font-size:9.0pt;mso-bidi-font-size:11.0pt;mso-fareast-font-family:&amp;quot;맑은 고딕&amp;quot;;mso-fareast-theme-font:minor-latin;mso-bidi-font-family:굴림;color:#222222;mso-font-kerning:0pt"&gt;MMF&lt;span style="mso-spacerun:yes"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:9.0pt;mso-bidi-font-size:11.0pt;mso-fareast-font-family:&amp;quot;맑은 고딕&amp;quot;;mso-fareast-theme-font:minor-latin;mso-bidi-font-family:굴림;color:#222222;mso-font-kerning:0pt"&gt;사용&lt;span lang="EN-US"&gt; : &lt;/span&gt;파일&lt;span lang="EN-US"&gt; == &lt;/span&gt;메모리&lt;span lang="EN-US"&gt; -&amp;gt; &lt;/span&gt;메모리수정&lt;span lang="EN-US"&gt; == &lt;/span&gt;디스크의 파일 수정&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" align="left" style="text-align:left;line-height:13.5pt;mso-pagination:widow-orphan;text-autospace:ideograph-numeric ideograph-other;word-break:keep-all"&gt;&lt;span lang="EN-US" style="font-size:9.0pt;mso-bidi-font-size:11.0pt;mso-fareast-font-family:&amp;quot;맑은 고딕&amp;quot;;mso-fareast-theme-font:minor-latin;mso-bidi-font-family:굴림;color:#222222;mso-font-kerning:0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" align="left" style="text-align:left;line-height:13.5pt;mso-pagination:widow-orphan;text-autospace:ideograph-numeric ideograph-other;word-break:keep-all"&gt;&lt;span style="font-size:9.0pt;mso-bidi-font-size:11.0pt;mso-fareast-font-family:&amp;quot;맑은 고딕&amp;quot;;mso-fareast-theme-font:minor-latin;mso-bidi-font-family:굴림;color:#222222;mso-font-kerning:0pt"&gt;이러한 장점으로 인하여 대용량의 파일을 처리해야 할 경우&lt;span lang="EN-US"&gt;&lt;span style="mso-spacerun:yes"&gt;&amp;nbsp; &lt;/span&gt;MMF &lt;/span&gt;를 사용하면 굉장히 빠른 처리속도를보장받을 수 있습니다&lt;span lang="EN-US"&gt;.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" align="left" style="text-align:left;line-height:13.5pt;mso-pagination:widow-orphan;text-autospace:ideograph-numeric ideograph-other;word-break:keep-all"&gt;&lt;br /&gt;&lt;/p&gt;&lt;p class="MsoNormal" align="left" style="text-align:left;line-height:13.5pt;mso-pagination:widow-orphan;text-autospace:ideograph-numeric ideograph-other;word-break:keep-all"&gt;또 다른 예제 그림 입니다.&lt;/p&gt;&lt;p class="MsoNormal" align="left" style="text-align:left;line-height:13.5pt;mso-pagination:widow-orphan;text-autospace:ideograph-numeric ideograph-other;word-break:keep-all"&gt;&lt;br /&gt;&lt;/p&gt;&lt;p class="MsoNormal" align="left" style="text-align:left;line-height:13.5pt;mso-pagination:widow-orphan;text-autospace:ideograph-numeric ideograph-other;word-break:keep-all"&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/2/25883/attach/Xb1QTZQubP.png" style="width:366px;height:298px;" alt=""  /&gt;&lt;/div&gt;&lt;/p&gt;&lt;p class="MsoNormal" align="left" style="text-align:left;line-height:13.5pt;mso-pagination:widow-orphan;text-autospace:ideograph-numeric ideograph-other;word-break:keep-all"&gt;&lt;span lang="EN-US" style="font-size:9.0pt;mso-bidi-font-size:11.0pt;mso-fareast-font-family:&amp;quot;맑은 고딕&amp;quot;;mso-fareast-theme-font:minor-latin;mso-bidi-font-family:굴림;color:#222222;mso-font-kerning:0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" align="left" style="text-align:left;line-height:13.5pt;mso-pagination:widow-orphan;text-autospace:ideograph-numeric ideograph-other;word-break:keep-all"&gt;&lt;span style="font-size:9.0pt;mso-bidi-font-size:11.0pt;mso-fareast-font-family:&amp;quot;맑은 고딕&amp;quot;;mso-fareast-theme-font:minor-latin;mso-bidi-font-family:굴림;color:#222222;mso-font-kerning:0pt"&gt;이 뿐만 아니라&lt;span lang="EN-US"&gt; MMF &lt;/span&gt;를 사용하여할 수 있는 방법으로는 프로세스간의 공용 데이터 공유 입니다&lt;span lang="EN-US"&gt;.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" align="left" style="text-align:left;line-height:13.5pt;mso-pagination:widow-orphan;text-autospace:ideograph-numeric ideograph-other;word-break:keep-all"&gt;&lt;span style="font-size:9.0pt;mso-bidi-font-size:11.0pt;mso-fareast-font-family:&amp;quot;맑은 고딕&amp;quot;;mso-fareast-theme-font:minor-latin;mso-bidi-font-family:굴림;color:#222222;mso-font-kerning:0pt"&gt;제가 회사에서 첫 프로젝트를 진행하였을 때&lt;span lang="EN-US"&gt;,&lt;/span&gt;큰 데이터에 대한 프로세스간 공유를 어떻게 해야 할 지 잘 몰랐습니다&lt;span lang="EN-US"&gt;. &lt;/span&gt;그때&lt;span lang="EN-US"&gt; MMF&lt;span style="mso-spacerun:yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;방식을 알게 되고 광속으로 프로젝트진행이 되었던 기억이 나네요&lt;span lang="EN-US"&gt;.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" align="left" style="text-align:left;line-height:13.5pt;mso-pagination:widow-orphan;text-autospace:ideograph-numeric ideograph-other;word-break:keep-all"&gt;&lt;span lang="EN-US" style="font-size:9.0pt;mso-bidi-font-size:11.0pt;mso-fareast-font-family:&amp;quot;맑은 고딕&amp;quot;;mso-fareast-theme-font:minor-latin;mso-bidi-font-family:굴림;color:#222222;mso-font-kerning:0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" align="left" style="text-align:left;line-height:13.5pt;mso-pagination:widow-orphan;text-autospace:ideograph-numeric ideograph-other;word-break:keep-all"&gt;&lt;span style="font-size:9.0pt;mso-bidi-font-size:11.0pt;mso-fareast-font-family:&amp;quot;맑은 고딕&amp;quot;;mso-fareast-theme-font:minor-latin;mso-bidi-font-family:굴림;color:#222222;mso-font-kerning:0pt"&gt;앞의 설명과 연결하여 동작되는 방식을 간단히 이야기 하면&lt;span lang="EN-US"&gt; a.exe &lt;/span&gt;라는 프로세스가 메모리의&lt;span lang="EN-US"&gt; "&lt;/span&gt;어떤&lt;span lang="EN-US"&gt;" &lt;/span&gt;영역에&lt;span lang="EN-US"&gt; 1024byte &lt;/span&gt;크기 만큼의 메모리를 확보하고 그메모리를 컨트롤 하기 위한 이름으로&lt;span lang="EN-US"&gt; 'MySpace' &lt;/span&gt;라고 이름을 부여 합니다&lt;span lang="EN-US"&gt;. &lt;/span&gt;이제&lt;span lang="EN-US"&gt; 'MySpace' &lt;/span&gt;라고 이름지어진 메모리 영역은 다른 프로세스가지지고 볶고 맘대로 할수습니다&lt;span lang="EN-US"&gt;. &lt;/span&gt;단&lt;span lang="EN-US"&gt;, &lt;/span&gt;메모리에 부여된 이름을안다면요 ㅋㅋㅋㅋㅋ&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" align="left" style="text-align:left;line-height:13.5pt;mso-pagination:widow-orphan;text-autospace:ideograph-numeric ideograph-other;word-break:keep-all"&gt;&lt;span style="font-size:9.0pt;mso-bidi-font-size:11.0pt;mso-fareast-font-family:&amp;quot;맑은 고딕&amp;quot;;mso-fareast-theme-font:minor-latin;mso-bidi-font-family:굴림;color:#222222;mso-font-kerning:0pt"&gt;이제 또다른 프로세스인&lt;span lang="EN-US"&gt;&lt;span style="mso-spacerun:yes"&gt;&amp;nbsp; &lt;/span&gt;b.exe &lt;/span&gt;에서&lt;span lang="EN-US"&gt; 'MySpace'&lt;/span&gt;라는이름을 갖고 해당 메모리 객체를 찾아서 접근&lt;span lang="EN-US"&gt;(&lt;/span&gt;데이터읽기&lt;span lang="EN-US"&gt;,&lt;/span&gt;쓰기&lt;span lang="EN-US"&gt;)&lt;/span&gt;하면서 작업을 하게 되는겁니다&lt;span lang="EN-US"&gt;. &lt;/span&gt;지금까지는 실제적으로 파일을 메모리와연결시켜 데이터를 공유 하는것으로 이야기 하였습니다만 반드시 파일을 매핑 시킬 필요는 없습니다&lt;span lang="EN-US"&gt;. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" align="left" style="text-align:left;line-height:13.5pt;mso-pagination:widow-orphan;text-autospace:ideograph-numeric ideograph-other;word-break:keep-all"&gt;&lt;span style="font-size:9.0pt;mso-bidi-font-size:11.0pt;mso-fareast-font-family:&amp;quot;맑은 고딕&amp;quot;;mso-fareast-theme-font:minor-latin;mso-bidi-font-family:굴림;color:#222222;mso-font-kerning:0pt"&gt;파일 부분을 지정하지 않고&lt;span lang="EN-US"&gt;, &lt;/span&gt;운영체제가알아서 만들라고 지정&lt;span lang="EN-US"&gt; (&lt;/span&gt;파일명 적는곳에 &lt;span lang="EN-US"&gt;INVALID_HANDLE_VALUE&lt;/span&gt;해주면 됩니다&lt;span lang="EN-US"&gt;)&lt;/span&gt;하면 메모리 객체만 생성됩니다&lt;span lang="EN-US"&gt;. &lt;/span&gt;그리고이 메모리 객체에 이름을 지어줍니다&lt;span lang="EN-US"&gt;. &lt;/span&gt;렇게 하고나면 메모리 상에 메모리영역이 확보되고 각각의 프로세서들이이 영역을 이름으로 아서 접근&lt;span lang="EN-US"&gt;(&lt;/span&gt;데이터읽기&lt;span lang="EN-US"&gt;,&lt;/span&gt;쓰기&lt;span lang="EN-US"&gt;)&lt;/span&gt;하면서 작업을 하게 되는겁니다&lt;span lang="EN-US"&gt;. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" align="left" style="text-align:left;line-height:13.5pt;mso-pagination:widow-orphan;text-autospace:ideograph-numeric ideograph-other;word-break:keep-all"&gt;&lt;br /&gt;&lt;/p&gt;&lt;p class="MsoNormal" align="left" style="text-align:left;line-height:13.5pt;mso-pagination:widow-orphan;text-autospace:ideograph-numeric ideograph-other;word-break:keep-all"&gt;이에 대한 예제 그림 입니다.&lt;/p&gt;&lt;p class="MsoNormal" align="left" style="text-align:left;line-height:13.5pt;mso-pagination:widow-orphan;text-autospace:ideograph-numeric ideograph-other;word-break:keep-all"&gt;&lt;br /&gt;&lt;/p&gt;&lt;p class="MsoNormal" align="left" style="text-align:left;line-height:13.5pt;mso-pagination:widow-orphan;text-autospace:ideograph-numeric ideograph-other;word-break:keep-all"&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/2/25883/attach/XajQ0a1JyE.gif" style="width:348px;height:371px;" alt="" onclick="TC$PRIV_open_img('http://ss.textcube.com/blog/2/25883/attach/XajQ0a1JyE.gif')" /&gt;&lt;/div&gt;&lt;/p&gt;&lt;p class="MsoNormal" align="left" style="text-align:left;line-height:13.5pt;mso-pagination:widow-orphan;text-autospace:ideograph-numeric ideograph-other;word-break:keep-all"&gt;&lt;span lang="EN-US" style="font-size:9.0pt;mso-bidi-font-size:11.0pt;mso-fareast-font-family:&amp;quot;맑은 고딕&amp;quot;;mso-fareast-theme-font:minor-latin;mso-bidi-font-family:굴림;color:#222222;mso-font-kerning:0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" align="left" style="text-align:left;line-height:13.5pt;mso-pagination:widow-orphan;text-autospace:ideograph-numeric ideograph-other;word-break:keep-all"&gt;&lt;span style="font-size:9.0pt;mso-bidi-font-size:11.0pt;mso-fareast-font-family:&amp;quot;맑은 고딕&amp;quot;;mso-fareast-theme-font:minor-latin;mso-bidi-font-family:굴림;color:#222222;mso-font-kerning:0pt"&gt;순수한 공유 메모리를 통해 프로세서간의 공유의 예 &lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" align="left" style="text-align:left;line-height:13.5pt;mso-pagination:widow-orphan;text-autospace:ideograph-numeric ideograph-other;word-break:keep-all"&gt;&lt;span lang="EN-US" style="font-size:9.0pt;mso-bidi-font-size:11.0pt;mso-fareast-font-family:&amp;quot;맑은 고딕&amp;quot;;mso-fareast-theme-font:minor-latin;mso-bidi-font-family:굴림;color:#222222;mso-font-kerning:0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" align="left" style="text-align:left;line-height:13.5pt;mso-pagination:widow-orphan;text-autospace:ideograph-numeric ideograph-other;word-break:keep-all"&gt;&lt;span lang="EN-US" style="font-size:9.0pt;mso-bidi-font-size:11.0pt;mso-fareast-font-family:&amp;quot;맑은 고딕&amp;quot;;mso-fareast-theme-font:minor-latin;mso-bidi-font-family:굴림;color:#222222;mso-font-kerning:0pt"&gt;1) a.exe &lt;/span&gt;&lt;span style="font-size:9.0pt;mso-bidi-font-size:11.0pt;mso-fareast-font-family:&amp;quot;맑은 고딕&amp;quot;;mso-fareast-theme-font:minor-latin;mso-bidi-font-family:굴림;color:#222222;mso-font-kerning:0pt"&gt;가 하는 일 &lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" align="left" style="text-align:left;line-height:13.5pt;mso-pagination:widow-orphan;text-autospace:ideograph-numeric ideograph-other;word-break:keep-all"&gt;&lt;span lang="EN-US" style="font-size:9.0pt;mso-bidi-font-size:11.0pt;mso-fareast-font-family:&amp;quot;맑은 고딕&amp;quot;;mso-fareast-theme-font:minor-latin;mso-bidi-font-family:굴림;color:#222222;mso-font-kerning:0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" align="left" style="text-align:left;line-height:13.5pt;mso-pagination:widow-orphan;text-autospace:ideograph-numeric ideograph-other;word-break:keep-all"&gt;&lt;span lang="EN-US" style="font-size:9.0pt;mso-bidi-font-size:11.0pt;mso-fareast-font-family:&amp;quot;맑은 고딕&amp;quot;;mso-fareast-theme-font:minor-latin;mso-bidi-font-family:굴림;color:#222222;mso-font-kerning:0pt"&gt;//"MySpace"&lt;/span&gt;&lt;span style="font-size:9.0pt;mso-bidi-font-size:11.0pt;mso-fareast-font-family:&amp;quot;맑은 고딕&amp;quot;;mso-fareast-theme-font:minor-latin;mso-bidi-font-family:굴림;color:#222222;mso-font-kerning:0pt"&gt;라는 이름으로 크기&lt;span lang="EN-US"&gt; 1024 &lt;/span&gt;이며읽고쓰기가 가능한 상태로 메모리 객체를 만든다&lt;span lang="EN-US"&gt;.. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" align="left" style="text-align:left;line-height:13.5pt;mso-pagination:widow-orphan;text-autospace:ideograph-numeric ideograph-other;word-break:keep-all"&gt;&lt;span lang="EN-US" style="font-size:9.0pt;mso-bidi-font-size:11.0pt;mso-fareast-font-family:&amp;quot;맑은 고딕&amp;quot;;mso-fareast-theme-font:minor-latin;mso-bidi-font-family:굴림;color:#222222;mso-font-kerning:0pt"&gt;// &lt;/span&gt;&lt;span style="font-size:9.0pt;mso-bidi-font-size:11.0pt;mso-fareast-font-family:&amp;quot;맑은 고딕&amp;quot;;mso-fareast-theme-font:minor-latin;mso-bidi-font-family:굴림;color:#222222;mso-font-kerning:0pt"&gt;파일명 지정 안함&lt;span lang="EN-US"&gt;.(&lt;/span&gt;파일과 연결 안함&lt;span lang="EN-US"&gt;) &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" align="left" style="text-align:left;line-height:13.5pt;mso-pagination:widow-orphan;text-autospace:ideograph-numeric ideograph-other;word-break:keep-all"&gt;&lt;span lang="EN-US" style="font-size:9.0pt;mso-bidi-font-size:11.0pt;mso-fareast-font-family:&amp;quot;맑은 고딕&amp;quot;;mso-fareast-theme-font:minor-latin;mso-bidi-font-family:굴림;color:#222222;mso-font-kerning:0pt"&gt;HANDLE hMapping =CreateFileMapping (INVALID_HANDLE_VALUE,&lt;span style="mso-spacerun:yes"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" align="left" style="text-align:left;line-height:13.5pt;mso-pagination:widow-orphan;text-autospace:ideograph-numeric ideograph-other;word-break:keep-all"&gt;&lt;span lang="EN-US" style="font-size:9.0pt;mso-bidi-font-size:11.0pt;mso-fareast-font-family:&amp;quot;맑은 고딕&amp;quot;;mso-fareast-theme-font:minor-latin;mso-bidi-font-family:굴림;color:#222222;mso-font-kerning:0pt"&gt;&lt;span style="mso-spacerun:yes"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;NULL,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" align="left" style="text-align:left;line-height:13.5pt;mso-pagination:widow-orphan;text-autospace:ideograph-numeric ideograph-other;word-break:keep-all"&gt;&lt;span lang="EN-US" style="font-size:9.0pt;mso-bidi-font-size:11.0pt;mso-fareast-font-family:&amp;quot;맑은 고딕&amp;quot;;mso-fareast-theme-font:minor-latin;mso-bidi-font-family:굴림;color:#222222;mso-font-kerning:0pt"&gt;&lt;span style="mso-spacerun:yes"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;PAGE_READWRITE,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" align="left" style="text-align:left;line-height:13.5pt;mso-pagination:widow-orphan;text-autospace:ideograph-numeric ideograph-other;word-break:keep-all"&gt;&lt;span lang="EN-US" style="font-size:9.0pt;mso-bidi-font-size:11.0pt;mso-fareast-font-family:&amp;quot;맑은 고딕&amp;quot;;mso-fareast-theme-font:minor-latin;mso-bidi-font-family:굴림;color:#222222;mso-font-kerning:0pt"&gt;&lt;span style="mso-spacerun:yes"&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="mso-spacerun:yes"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;0,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" align="left" style="text-align:left;line-height:13.5pt;mso-pagination:widow-orphan;text-autospace:ideograph-numeric ideograph-other;word-break:keep-all"&gt;&lt;span lang="EN-US" style="font-size:9.0pt;mso-bidi-font-size:11.0pt;mso-fareast-font-family:&amp;quot;맑은 고딕&amp;quot;;mso-fareast-theme-font:minor-latin;mso-bidi-font-family:굴림;color:#222222;mso-font-kerning:0pt"&gt;&lt;span style="mso-spacerun:yes"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;1024,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" align="left" style="text-align:left;line-height:13.5pt;mso-pagination:widow-orphan;text-autospace:ideograph-numeric ideograph-other;word-break:keep-all"&gt;&lt;span lang="EN-US" style="font-size:9.0pt;mso-bidi-font-size:11.0pt;mso-fareast-font-family:&amp;quot;맑은 고딕&amp;quot;;mso-fareast-theme-font:minor-latin;mso-bidi-font-family:굴림;color:#222222;mso-font-kerning:0pt"&gt;&lt;span style="mso-spacerun:yes"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;"MySpace"); &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" align="left" style="text-align:left;line-height:13.5pt;mso-pagination:widow-orphan;text-autospace:ideograph-numeric ideograph-other;word-break:keep-all"&gt;&lt;span lang="EN-US" style="font-size:9.0pt;mso-bidi-font-size:11.0pt;mso-fareast-font-family:&amp;quot;맑은 고딕&amp;quot;;mso-fareast-theme-font:minor-latin;mso-bidi-font-family:굴림;color:#222222;mso-font-kerning:0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" align="left" style="text-align:left;line-height:13.5pt;mso-pagination:widow-orphan;text-autospace:ideograph-numeric ideograph-other;word-break:keep-all"&gt;&lt;span lang="EN-US" style="font-size:9.0pt;mso-bidi-font-size:11.0pt;mso-fareast-font-family:&amp;quot;맑은 고딕&amp;quot;;mso-fareast-theme-font:minor-latin;mso-bidi-font-family:굴림;color:#222222;mso-font-kerning:0pt"&gt;// &lt;/span&gt;&lt;span style="font-size:9.0pt;mso-bidi-font-size:11.0pt;mso-fareast-font-family:&amp;quot;맑은 고딕&amp;quot;;mso-fareast-theme-font:minor-latin;mso-bidi-font-family:굴림;color:#222222;mso-font-kerning:0pt"&gt;생성된 메모리 객체에 접근하여 시작 위치를 얻어온다&lt;span lang="EN-US"&gt;. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" align="left" style="text-align:left;line-height:13.5pt;mso-pagination:widow-orphan;text-autospace:ideograph-numeric ideograph-other;word-break:keep-all"&gt;&lt;span lang="EN-US" style="font-size:9.0pt;mso-bidi-font-size:11.0pt;mso-fareast-font-family:&amp;quot;맑은 고딕&amp;quot;;mso-fareast-theme-font:minor-latin;mso-bidi-font-family:굴림;color:#222222;mso-font-kerning:0pt"&gt;LPVOID lpData =MapViewOfFile (hMapping,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" align="left" style="text-align:left;line-height:13.5pt;mso-pagination:widow-orphan;text-autospace:ideograph-numeric ideograph-other;word-break:keep-all"&gt;&lt;span lang="EN-US" style="font-size:9.0pt;mso-bidi-font-size:11.0pt;mso-fareast-font-family:&amp;quot;맑은 고딕&amp;quot;;mso-fareast-theme-font:minor-latin;mso-bidi-font-family:굴림;color:#222222;mso-font-kerning:0pt"&gt;&lt;span style="mso-spacerun:yes"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;FILE_MAP_ALL_ACCESS,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" align="left" style="text-align:left;line-height:13.5pt;mso-pagination:widow-orphan;text-autospace:ideograph-numeric ideograph-other;word-break:keep-all"&gt;&lt;span lang="EN-US" style="font-size:9.0pt;mso-bidi-font-size:11.0pt;mso-fareast-font-family:&amp;quot;맑은 고딕&amp;quot;;mso-fareast-theme-font:minor-latin;mso-bidi-font-family:굴림;color:#222222;mso-font-kerning:0pt"&gt;&lt;span style="mso-spacerun:yes"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;0,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" align="left" style="text-align:left;line-height:13.5pt;mso-pagination:widow-orphan;text-autospace:ideograph-numeric ideograph-other;word-break:keep-all"&gt;&lt;span lang="EN-US" style="font-size:9.0pt;mso-bidi-font-size:11.0pt;mso-fareast-font-family:&amp;quot;맑은 고딕&amp;quot;;mso-fareast-theme-font:minor-latin;mso-bidi-font-family:굴림;color:#222222;mso-font-kerning:0pt"&gt;&lt;span style="mso-spacerun:yes"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;0,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" align="left" style="text-align:left;line-height:13.5pt;mso-pagination:widow-orphan;text-autospace:ideograph-numeric ideograph-other;word-break:keep-all"&gt;&lt;span lang="EN-US" style="font-size:9.0pt;mso-bidi-font-size:11.0pt;mso-fareast-font-family:&amp;quot;맑은 고딕&amp;quot;;mso-fareast-theme-font:minor-latin;mso-bidi-font-family:굴림;color:#222222;mso-font-kerning:0pt"&gt;&lt;span style="mso-spacerun:yes"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span style="mso-spacerun:yes"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;1024); &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" align="left" style="text-align:left;line-height:13.5pt;mso-pagination:widow-orphan;text-autospace:ideograph-numeric ideograph-other;word-break:keep-all"&gt;&lt;span lang="EN-US" style="font-size:9.0pt;mso-bidi-font-size:11.0pt;mso-fareast-font-family:&amp;quot;맑은 고딕&amp;quot;;mso-fareast-theme-font:minor-latin;mso-bidi-font-family:굴림;color:#222222;mso-font-kerning:0pt"&gt;strcpy(lpData,"MMF");&lt;span style="mso-spacerun:yes"&gt;&amp;nbsp; &lt;/span&gt;// &lt;/span&gt;&lt;span style="font-size:9.0pt;mso-bidi-font-size:11.0pt;mso-fareast-font-family:&amp;quot;맑은 고딕&amp;quot;;mso-fareast-theme-font:minor-latin;mso-bidi-font-family:굴림;color:#222222;mso-font-kerning:0pt"&gt;공유메모리 영역에 문자열&lt;span lang="EN-US"&gt; MMF &lt;/span&gt;를 입력한다&lt;span lang="EN-US"&gt;. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" align="left" style="text-align:left;line-height:13.5pt;mso-pagination:widow-orphan;text-autospace:ideograph-numeric ideograph-other;word-break:keep-all"&gt;&lt;span lang="EN-US" style="font-size:9.0pt;mso-bidi-font-size:11.0pt;mso-fareast-font-family:&amp;quot;맑은 고딕&amp;quot;;mso-fareast-theme-font:minor-latin;mso-bidi-font-family:굴림;color:#222222;mso-font-kerning:0pt"&gt;UnmapViewOfFile(lpData); // &lt;/span&gt;&lt;span style="font-size:9.0pt;mso-bidi-font-size:11.0pt;mso-fareast-font-family:&amp;quot;맑은 고딕&amp;quot;;mso-fareast-theme-font:minor-latin;mso-bidi-font-family:굴림;color:#222222;mso-font-kerning:0pt"&gt;접근했던 메모리객체를 연관성을 끊는다&lt;span lang="EN-US"&gt;. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" align="left" style="text-align:left;line-height:13.5pt;mso-pagination:widow-orphan;text-autospace:ideograph-numeric ideograph-other;word-break:keep-all"&gt;&lt;span lang="EN-US" style="font-size:9.0pt;mso-bidi-font-size:11.0pt;mso-fareast-font-family:&amp;quot;맑은 고딕&amp;quot;;mso-fareast-theme-font:minor-latin;mso-bidi-font-family:굴림;color:#222222;mso-font-kerning:0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" align="left" style="text-align:left;line-height:13.5pt;mso-pagination:widow-orphan;text-autospace:ideograph-numeric ideograph-other;word-break:keep-all"&gt;&lt;span lang="EN-US" style="font-size:9.0pt;mso-bidi-font-size:11.0pt;mso-fareast-font-family:&amp;quot;맑은 고딕&amp;quot;;mso-fareast-theme-font:minor-latin;mso-bidi-font-family:굴림;color:#222222;mso-font-kerning:0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" align="left" style="text-align:left;line-height:13.5pt;mso-pagination:widow-orphan;text-autospace:ideograph-numeric ideograph-other;word-break:keep-all"&gt;&lt;span lang="EN-US" style="font-size:9.0pt;mso-bidi-font-size:11.0pt;mso-fareast-font-family:&amp;quot;맑은 고딕&amp;quot;;mso-fareast-theme-font:minor-latin;mso-bidi-font-family:굴림;color:#222222;mso-font-kerning:0pt"&gt;2) b.exe &lt;/span&gt;&lt;span style="font-size:9.0pt;mso-bidi-font-size:11.0pt;mso-fareast-font-family:&amp;quot;맑은 고딕&amp;quot;;mso-fareast-theme-font:minor-latin;mso-bidi-font-family:굴림;color:#222222;mso-font-kerning:0pt"&gt;가 공유메모리에 있는 내용을 읽어서 복사하는 법&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" align="left" style="text-align:left;line-height:13.5pt;mso-pagination:widow-orphan;text-autospace:ideograph-numeric ideograph-other;word-break:keep-all"&gt;&lt;span lang="EN-US" style="font-size:9.0pt;mso-bidi-font-size:11.0pt;mso-fareast-font-family:&amp;quot;맑은 고딕&amp;quot;;mso-fareast-theme-font:minor-latin;mso-bidi-font-family:굴림;color:#222222;mso-font-kerning:0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" align="left" style="text-align:left;line-height:13.5pt;mso-pagination:widow-orphan;text-autospace:ideograph-numeric ideograph-other;word-break:keep-all"&gt;&lt;span lang="EN-US" style="font-size:9.0pt;mso-bidi-font-size:11.0pt;mso-fareast-font-family:&amp;quot;맑은 고딕&amp;quot;;mso-fareast-theme-font:minor-latin;mso-bidi-font-family:굴림;color:#222222;mso-font-kerning:0pt"&gt;// &lt;/span&gt;&lt;span style="font-size:9.0pt;mso-bidi-font-size:11.0pt;mso-fareast-font-family:&amp;quot;맑은 고딕&amp;quot;;mso-fareast-theme-font:minor-latin;mso-bidi-font-family:굴림;color:#222222;mso-font-kerning:0pt"&gt;이미 생성된&lt;span lang="EN-US"&gt; "MySpace"&lt;/span&gt;라는 메모리 객체를&lt;span lang="EN-US"&gt; Open &lt;/span&gt;한다&lt;span lang="EN-US"&gt;. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" align="left" style="text-align:left;line-height:13.5pt;mso-pagination:widow-orphan;text-autospace:ideograph-numeric ideograph-other;word-break:keep-all"&gt;&lt;span lang="EN-US" style="font-size:9.0pt;mso-bidi-font-size:11.0pt;mso-fareast-font-family:&amp;quot;맑은 고딕&amp;quot;;mso-fareast-theme-font:minor-latin;mso-bidi-font-family:굴림;color:#222222;mso-font-kerning:0pt"&gt;HANDLE hMapping =OpenFileMapping (FILE_MAP_ALL_ACCESS, FALSE, "MySpace"); &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" align="left" style="text-align:left;line-height:13.5pt;mso-pagination:widow-orphan;text-autospace:ideograph-numeric ideograph-other;word-break:keep-all"&gt;&lt;span lang="EN-US" style="font-size:9.0pt;mso-bidi-font-size:11.0pt;mso-fareast-font-family:&amp;quot;맑은 고딕&amp;quot;;mso-fareast-theme-font:minor-latin;mso-bidi-font-family:굴림;color:#222222;mso-font-kerning:0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" align="left" style="text-align:left;line-height:13.5pt;mso-pagination:widow-orphan;text-autospace:ideograph-numeric ideograph-other;word-break:keep-all"&gt;&lt;span lang="EN-US" style="font-size:9.0pt;mso-bidi-font-size:11.0pt;mso-fareast-font-family:&amp;quot;맑은 고딕&amp;quot;;mso-fareast-theme-font:minor-latin;mso-bidi-font-family:굴림;color:#222222;mso-font-kerning:0pt"&gt;// Open&lt;/span&gt;&lt;span style="font-size:9.0pt;mso-bidi-font-size:11.0pt;mso-fareast-font-family:&amp;quot;맑은 고딕&amp;quot;;mso-fareast-theme-font:minor-latin;mso-bidi-font-family:굴림;color:#222222;mso-font-kerning:0pt"&gt;된 메모리 객체에 접근하여 시작 위치를 얻어온다&lt;span lang="EN-US"&gt;. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" align="left" style="text-align:left;line-height:13.5pt;mso-pagination:widow-orphan;text-autospace:ideograph-numeric ideograph-other;word-break:keep-all"&gt;&lt;span lang="EN-US" style="font-size:9.0pt;mso-bidi-font-size:11.0pt;mso-fareast-font-family:&amp;quot;맑은 고딕&amp;quot;;mso-fareast-theme-font:minor-latin;mso-bidi-font-family:굴림;color:#222222;mso-font-kerning:0pt"&gt;LPVOID lpData =MapViewOfFile (hMapping, FILE_MAP_ALL_ACCESS, 0, 0, 1024); &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" align="left" style="text-align:left;line-height:13.5pt;mso-pagination:widow-orphan;text-autospace:ideograph-numeric ideograph-other;word-break:keep-all"&gt;&lt;span lang="EN-US" style="font-size:9.0pt;mso-bidi-font-size:11.0pt;mso-fareast-font-family:&amp;quot;맑은 고딕&amp;quot;;mso-fareast-theme-font:minor-latin;mso-bidi-font-family:굴림;color:#222222;mso-font-kerning:0pt"&gt;char str[1024]; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" align="left" style="text-align:left;line-height:13.5pt;mso-pagination:widow-orphan;text-autospace:ideograph-numeric ideograph-other;word-break:keep-all"&gt;&lt;span lang="EN-US" style="font-size:9.0pt;mso-bidi-font-size:11.0pt;mso-fareast-font-family:&amp;quot;맑은 고딕&amp;quot;;mso-fareast-theme-font:minor-latin;mso-bidi-font-family:굴림;color:#222222;mso-font-kerning:0pt"&gt;strcpy (str,lpData); // &lt;/span&gt;&lt;span style="font-size:9.0pt;mso-bidi-font-size:11.0pt;mso-fareast-font-family:&amp;quot;맑은 고딕&amp;quot;;mso-fareast-theme-font:minor-latin;mso-bidi-font-family:굴림;color:#222222;mso-font-kerning:0pt"&gt;공유메모리에 있는 문자열&lt;span lang="EN-US"&gt; MMF &lt;/span&gt;을&lt;span lang="EN-US"&gt; str &lt;/span&gt;배열에 복사한다&lt;span lang="EN-US"&gt;. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" align="left" style="text-align:left;line-height:13.5pt;mso-pagination:widow-orphan;text-autospace:ideograph-numeric ideograph-other;word-break:keep-all"&gt;&lt;span lang="EN-US" style="font-size:9.0pt;mso-bidi-font-size:11.0pt;mso-fareast-font-family:&amp;quot;맑은 고딕&amp;quot;;mso-fareast-theme-font:minor-latin;mso-bidi-font-family:굴림;color:#222222;mso-font-kerning:0pt"&gt;UnmapViewOfFile(lpData); // &lt;/span&gt;&lt;span style="font-size:9.0pt;mso-bidi-font-size:11.0pt;mso-fareast-font-family:&amp;quot;맑은 고딕&amp;quot;;mso-fareast-theme-font:minor-latin;mso-bidi-font-family:굴림;color:#222222;mso-font-kerning:0pt"&gt;접근했던 메모리객체를 연관성을 끊는다&lt;span lang="EN-US"&gt;. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" align="left" style="text-align:left;line-height:13.5pt;mso-pagination:widow-orphan;text-autospace:ideograph-numeric ideograph-other;word-break:keep-all"&gt;&lt;span lang="EN-US" style="font-size:9.0pt;mso-bidi-font-size:11.0pt;mso-fareast-font-family:&amp;quot;맑은 고딕&amp;quot;;mso-fareast-theme-font:minor-latin;mso-bidi-font-family:굴림;color:#222222;mso-font-kerning:0pt"&gt;CloseHandle(hMapping); // &lt;/span&gt;&lt;span style="font-size:9.0pt;mso-bidi-font-size:11.0pt;mso-fareast-font-family:&amp;quot;맑은 고딕&amp;quot;;mso-fareast-theme-font:minor-latin;mso-bidi-font-family:굴림;color:#222222;mso-font-kerning:0pt"&gt;공유메모리를 삭제한다&lt;span lang="EN-US"&gt;.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" align="left" style="text-align:left;line-height:13.5pt;mso-pagination:widow-orphan;text-autospace:ideograph-numeric ideograph-other;word-break:keep-all"&gt;&lt;span lang="EN-US" style="font-size:9.0pt;mso-bidi-font-size:11.0pt;mso-fareast-font-family:&amp;quot;맑은 고딕&amp;quot;;mso-fareast-theme-font:minor-latin;mso-bidi-font-family:굴림;color:#222222;mso-font-kerning:0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span style="font-size:9.0pt;mso-bidi-font-size:11.0pt;mso-fareast-font-family:&amp;quot;맑은 고딕&amp;quot;;mso-fareast-theme-font:minor-latin;mso-bidi-font-family:굴림;color:#222222;mso-font-kerning:0pt"&gt;이와 같은 방식으로 간단히 구현했으며 실제 프로그래밍에 있어서 유용한 방식으로사용됩니다&lt;span lang="EN-US"&gt;.&lt;span style="mso-tab-count:3"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-US" style="mso-fareast-font-family:&amp;quot;맑은 고딕&amp;quot;;mso-fareast-theme-font:minor-latin"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3007272888468082271-126153944725789535?l=saicong.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://saicong.blogspot.com/feeds/126153944725789535/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://saicong.blogspot.com/2009/11/mmfmemory-mapped-file-%EC%97%90-%EB%8C%80%ED%95%98%EC%97%AC.html#comment-form' title='2개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3007272888468082271/posts/default/126153944725789535'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3007272888468082271/posts/default/126153944725789535'/><link rel='alternate' type='text/html' href='http://saicong.blogspot.com/2009/11/mmfmemory-mapped-file-%EC%97%90-%EB%8C%80%ED%95%98%EC%97%AC.html' title='MMF(Memory Mapped File) 에 대하여'/><author><name>Castlebay</name><uri>http://www.blogger.com/profile/09231852250158037381</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3007272888468082271.post-5822969628191751693</id><published>2009-11-12T15:22:00.000+09:00</published><updated>2011-01-29T22:24:32.447+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='VMWARE 탐지 우회'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='Tips'/><title type='text'>Vmware 라서 못한다규?</title><content type='html'>&lt;P&gt;몇몇 웹 사이트나 프로그램들 중에서 가상PC 환경에서는 동작하지 않는 것들이 있다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;짜증이다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;그래서 검색하고 찾았다&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Vmware 에서 사용가능한 것으로 아래 내용을 .VMX 파일에 기록해주면 땡~&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="FONT-WEIGHT: bold"&gt;isolation.tools.getPtrLocation.disable = "TRUE"&lt;br /&gt;isolation.tools.setPtrLocation.disable = "TRUE"&lt;br /&gt;isolation.tools.setVersion.disable = "TRUE"&lt;br /&gt;isolation.tools.getVersion.disable = "TRUE"&lt;br /&gt;monitor_control.disable_directexec = "TRUE"&lt;br /&gt;monitor_control.disable_chksimd = "TRUE"&lt;br /&gt;monitor_control.disable_ntreloc = "TRUE"&lt;br /&gt;monitor_control.disable_selfmod = "TRUE"&lt;br /&gt;monitor_control.disable_reloc = "TRUE"&lt;br /&gt;monitor_control.disable_btinout = "TRUE"&lt;br /&gt;monitor_control.disable_btmemspace = "TRUE"&lt;br /&gt;monitor_control.disable_btpriv = "TRUE"&lt;br /&gt;monitor_control.disable_btseg = "TRUE"&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="FONT-WEIGHT: bold"&gt;요로코롬 써주고 시작시켜보면, 아마도 잘 될듯&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3007272888468082271-5822969628191751693?l=saicong.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://saicong.blogspot.com/feeds/5822969628191751693/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://saicong.blogspot.com/2009/11/vmware-%EB%9D%BC%EC%84%9C-%EB%AA%BB%ED%95%9C%EB%8B%A4%EA%B7%9C.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3007272888468082271/posts/default/5822969628191751693'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3007272888468082271/posts/default/5822969628191751693'/><link rel='alternate' type='text/html' href='http://saicong.blogspot.com/2009/11/vmware-%EB%9D%BC%EC%84%9C-%EB%AA%BB%ED%95%9C%EB%8B%A4%EA%B7%9C.html' title='Vmware 라서 못한다규?'/><author><name>Castlebay</name><uri>http://www.blogger.com/profile/09231852250158037381</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3007272888468082271.post-3786452040946725853</id><published>2009-11-12T10:17:00.000+09:00</published><updated>2011-01-29T22:24:32.405+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='avast'/><category scheme='http://www.blogger.com/atom/ns#' term='웃어야해 울어야해'/><title type='text'>Avast! 의 당황스러운 오진</title><content type='html'>&lt;script src='http://ss.textcube.com/service/blog/script/blogger.js' type='text/javascript'&gt;&lt;/script&gt;&lt;P&gt;국내 모 회사의 키보드 보안 프로그램 중, scsk5.sys 라는 파일이 있습니다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;그런데 이 문구를 검색만 해도 Avast! 는 진단을 합니다 -_-&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;네이버에서 검색어 scsk5 를 입력해 보세요.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;아래와 같이 나옵니다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/2/25883/attach/XC5NamnYCC.jpg" style="width:580px;height:362px;" alt="" onclick="TC$PRIV_open_img('http://ss.textcube.com/blog/2/25883/attach/XC5NamnYCC.jpg')" /&gt;&lt;/div&gt;&lt;/P&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3007272888468082271-3786452040946725853?l=saicong.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://saicong.blogspot.com/feeds/3786452040946725853/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://saicong.blogspot.com/2009/11/avast-%EC%9D%98-%EB%8B%B9%ED%99%A9%EC%8A%A4%EB%9F%AC%EC%9A%B4-%EC%98%A4%EC%A7%84.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3007272888468082271/posts/default/3786452040946725853'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3007272888468082271/posts/default/3786452040946725853'/><link rel='alternate' type='text/html' href='http://saicong.blogspot.com/2009/11/avast-%EC%9D%98-%EB%8B%B9%ED%99%A9%EC%8A%A4%EB%9F%AC%EC%9A%B4-%EC%98%A4%EC%A7%84.html' title='Avast! 의 당황스러운 오진'/><author><name>Castlebay</name><uri>http://www.blogger.com/profile/09231852250158037381</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3007272888468082271.post-6099651998810075578</id><published>2009-11-05T18:17:00.000+09:00</published><updated>2011-01-29T22:24:32.362+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='postmessage'/><category scheme='http://www.blogger.com/atom/ns#' term='Basic'/><category scheme='http://www.blogger.com/atom/ns#' term='SendMessage'/><title type='text'>SendMessage 와 PostMessage 차이</title><content type='html'>&lt;P&gt;함수 원형&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;BOOL PostMessage(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam);&lt;/P&gt;&lt;P&gt;LRESULT SendMessage(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;PostMessage 처리 방법&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Msg 를 윈도우 큐에 삽입 -&amp;gt; 메시지 큐에서 처리 순서 대기 -&amp;gt; 순서가 되면 윈도우 프로시저가 처리&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;주의점 : wParam 이나 lParam 값으로 지역포인터가 들어가면 안됨. -&amp;gt; 메시지 큐에 등록하는 시점에서 지역 포인터가 존재한다 손 치더라도, 윈도우 프로시저가 메시지를 처리하는 시점에서 포인터가 없을 수 있다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;SendMessage 처리 방법&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Msg 를 바로 처리하기 위하여 윈도우 프로시저 호출 -&amp;gt; 즉각적인 메시지 처리&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;결론 : 윈도우간의 메시지 교환은 어떤 방법을 사용해야 할지 결정을 잘 해야 함. 예를 들어, WM_COPYDATA 같은 메시지로 데이터 전송하는 경우에는 즉각적으로 처리해야 하므로, SendMessage 를 사용해야 함.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;즉, SendMessage 는 메시지를 당장 처리하고자 할 때 사용하며, PostMessage 는 "나 한가하니까" 시간 되면 그때 처리하세요~ 라는 용도로 쓰면 됨.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;근데 난 모든 코드가 SendMessage 로 처리하네;;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3007272888468082271-6099651998810075578?l=saicong.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://saicong.blogspot.com/feeds/6099651998810075578/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://saicong.blogspot.com/2009/11/sendmessage-%EC%99%80-postmessage-%EC%B0%A8%EC%9D%B4.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3007272888468082271/posts/default/6099651998810075578'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3007272888468082271/posts/default/6099651998810075578'/><link rel='alternate' type='text/html' href='http://saicong.blogspot.com/2009/11/sendmessage-%EC%99%80-postmessage-%EC%B0%A8%EC%9D%B4.html' title='SendMessage 와 PostMessage 차이'/><author><name>Castlebay</name><uri>http://www.blogger.com/profile/09231852250158037381</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3007272888468082271.post-4699570315238594118</id><published>2009-11-05T10:44:00.000+09:00</published><updated>2011-01-29T22:24:32.322+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='Hook'/><title type='text'>SetWindowsHookExA/W 의 내부 루틴.</title><content type='html'>&lt;P&gt;SetWindowsHookExA/W -&amp;gt; SetWindowsHookExAW -&amp;gt; _SetWindowsHookEx -&amp;gt; NtUserSetWindowsHookEx &amp;nbsp;-&amp;gt; zzzSetWindowsHookEx &lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;DLL Injection 을 막는 방법?&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;1. win32k!zzzSetWindowsHookEx Hooking?&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;2. FastCallEntry Hooking?&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3007272888468082271-4699570315238594118?l=saicong.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://saicong.blogspot.com/feeds/4699570315238594118/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://saicong.blogspot.com/2009/11/setwindowshookexaw-%EC%9D%98-%EB%82%B4%EB%B6%80-%EB%A3%A8%ED%8B%B4.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3007272888468082271/posts/default/4699570315238594118'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3007272888468082271/posts/default/4699570315238594118'/><link rel='alternate' type='text/html' href='http://saicong.blogspot.com/2009/11/setwindowshookexaw-%EC%9D%98-%EB%82%B4%EB%B6%80-%EB%A3%A8%ED%8B%B4.html' title='SetWindowsHookExA/W 의 내부 루틴.'/><author><name>Castlebay</name><uri>http://www.blogger.com/profile/09231852250158037381</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3007272888468082271.post-3838522183198332227</id><published>2009-10-28T13:07:00.000+09:00</published><updated>2011-01-29T22:24:32.282+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='소소한 일상'/><title type='text'>USC 2009 행사에 다녀왔습니다.</title><content type='html'>&lt;script src='http://ss.textcube.com/service/blog/script/blogger.js' type='text/javascript'&gt;&lt;/script&gt;&lt;P&gt;통합 보안에 관한 컨퍼런스가 있어서 다녀왔습니다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;오랫만의 외출이다보니 이래저래 설래더군요&lt;/P&gt;&lt;P&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/2/25883/attach/XKKnwTRGCX.jpg" style="width:580px;height:385px;" alt="" onclick="TC$PRIV_open_img('http://ss.textcube.com/blog/2/25883/attach/XKKnwTRGCX.jpg')" /&gt;&lt;/div&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;행사장 입구&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/2/25883/attach/XDpf7exqhD.jpg" style="width:580px;height:441px;" alt="" onclick="TC$PRIV_open_img('http://ss.textcube.com/blog/2/25883/attach/XDpf7exqhD.jpg')" /&gt;&lt;/div&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;맛있는 저녁 식사&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/2/25883/attach/XNG5BGwIQG.jpg" style="width:580px;height:441px;" alt="" onclick="TC$PRIV_open_img('http://ss.textcube.com/blog/2/25883/attach/XNG5BGwIQG.jpg')" /&gt;&lt;/div&gt;&lt;/P&gt;&lt;P&gt;은유진 CEO 님의 연설&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;오랫만의 외출이었습니다 - 끝 -&lt;/P&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3007272888468082271-3838522183198332227?l=saicong.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://saicong.blogspot.com/feeds/3838522183198332227/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://saicong.blogspot.com/2009/10/usc-2009-%ED%96%89%EC%82%AC%EC%97%90-%EB%8B%A4%EB%85%80%EC%99%94%EC%8A%B5%EB%8B%88%EB%8B%A4.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3007272888468082271/posts/default/3838522183198332227'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3007272888468082271/posts/default/3838522183198332227'/><link rel='alternate' type='text/html' href='http://saicong.blogspot.com/2009/10/usc-2009-%ED%96%89%EC%82%AC%EC%97%90-%EB%8B%A4%EB%85%80%EC%99%94%EC%8A%B5%EB%8B%88%EB%8B%A4.html' title='USC 2009 행사에 다녀왔습니다.'/><author><name>Castlebay</name><uri>http://www.blogger.com/profile/09231852250158037381</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3007272888468082271.post-20437264669446491</id><published>2009-10-27T15:31:00.000+09:00</published><updated>2011-01-29T22:24:32.242+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='소소한 일상'/><title type='text'>이런때도 있었지</title><content type='html'>&lt;script src='http://ss.textcube.com/service/blog/script/blogger.js' type='text/javascript'&gt;&lt;/script&gt;&lt;P&gt;고딩때였지....한창 레인보우식스에 미쳐서 결국 PGS 까지 가입 ㄷㄷㄷ&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/2/25883/attach/XbJDab08yT.jpg" style="width:560px;height:462px;" alt="" onclick="TC$PRIV_open_img('http://ss.textcube.com/blog/2/25883/attach/XbJDab08yT.jpg')" /&gt;&lt;/div&gt;&lt;/P&gt;&lt;P&gt;이렇게 책도 낸 적도 있고&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/2/25883/attach/XJXpblEbSz.jpg" style="width:900px;height:823px;" alt="" onclick="TC$PRIV_open_img('http://ss.textcube.com/blog/2/25883/attach/XJXpblEbSz.jpg')" /&gt;&lt;/div&gt;&lt;/P&gt;&lt;P&gt;신문에도 났었지&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;아직도 아이디는 PGS_CharisMa 를 버리지 못;;&lt;/P&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3007272888468082271-20437264669446491?l=saicong.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://saicong.blogspot.com/feeds/20437264669446491/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://saicong.blogspot.com/2009/10/%EC%9D%B4%EB%9F%B0%EB%95%8C%EB%8F%84-%EC%9E%88%EC%97%88%EC%A7%80.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3007272888468082271/posts/default/20437264669446491'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3007272888468082271/posts/default/20437264669446491'/><link rel='alternate' type='text/html' href='http://saicong.blogspot.com/2009/10/%EC%9D%B4%EB%9F%B0%EB%95%8C%EB%8F%84-%EC%9E%88%EC%97%88%EC%A7%80.html' title='이런때도 있었지'/><author><name>Castlebay</name><uri>http://www.blogger.com/profile/09231852250158037381</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3007272888468082271.post-1649707740858658012</id><published>2009-10-21T18:04:00.000+09:00</published><updated>2011-01-29T22:24:32.202+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='Tips'/><category scheme='http://www.blogger.com/atom/ns#' term='유니코드'/><category scheme='http://www.blogger.com/atom/ns#' term='에러'/><category scheme='http://www.blogger.com/atom/ns#' term='CreateProcess'/><title type='text'>CreateProcess API 에 대한 생각.</title><content type='html'>&lt;P&gt;Windows Via C/C++ 을 읽다가 깨달은 한가지&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;일반적으로 유니코드 환경에서 프로그래밍시 CreateProcess API 를 사용할 경우, 첫번째나 두번째 인자에 ProcessName 을 적는데...&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;보통 이런식입니다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;STARTUPINFO si = { sizeof(si)};&lt;/P&gt;&lt;P&gt;PROCESS_INFORMATION pi;&lt;/P&gt;&lt;P&gt;CreateProcess(NULL,TEXT("NOTEPAD"),NULL,NULL,FALSE,0,NULL,NULL,&amp;amp;si,&amp;amp;pi);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;언뜻 보기에 문제가 없어 보인다. 하지만 이건 분명히 문제 발생할 수 있습니다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;MS VC 6 버전(적어도 제가 확인했을때는..)의 컴파일러는 문자열을 READ/WRITE 가능한 영역에 배치하여서 문제가 되지 않았으나, 2008 부터는(.nET 이나 2005 버전도 그런지 확인은 못했습니다.) READ 영역의 메모리에 배치하기 때문에, 접근 위반이 발생할 수 있기 때문입니다. 따라서 이 문제를 해결하기 위한 최상의 방법은 다음의 예와 같이 문자열 상수를 임시 버퍼에 복사한 후, CreateProcess 를 호출하는 것 입니다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;STARTUPINFO si={sizeof(si)};&lt;/P&gt;&lt;P&gt;PROCESS_INFORMATION pi;&lt;/P&gt;&lt;P&gt;TCHAR szCommandLine[] = TEXT("NOTEPAD");&lt;/P&gt;&lt;P&gt;CreateProcess(NULL, szCommandLine , NULL,NULL,FALSE,0,NULL,NULL,&amp;amp;si,&amp;amp;pi);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;그러나 이 문제는 유니코드로 작성할 경우에 발생되는 문제이며, ANSI 버전의 CreateProcess 를 같은 방식으로 호출하면 문제가 발생하지 않습니다. 이는 유니코드로의 변경을 위해 문자열에 대한 복사본이 내부적으로 만들어지기 때문에 그렇습니다.&lt;/P&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3007272888468082271-1649707740858658012?l=saicong.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://saicong.blogspot.com/feeds/1649707740858658012/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://saicong.blogspot.com/2009/10/createprocess-api-%EC%97%90-%EB%8C%80%ED%95%9C-%EC%83%9D%EA%B0%81.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3007272888468082271/posts/default/1649707740858658012'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3007272888468082271/posts/default/1649707740858658012'/><link rel='alternate' type='text/html' href='http://saicong.blogspot.com/2009/10/createprocess-api-%EC%97%90-%EB%8C%80%ED%95%9C-%EC%83%9D%EA%B0%81.html' title='CreateProcess API 에 대한 생각.'/><author><name>Castlebay</name><uri>http://www.blogger.com/profile/09231852250158037381</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3007272888468082271.post-2760185480721547703</id><published>2009-10-21T15:31:00.000+09:00</published><updated>2011-01-29T22:24:32.157+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='Tips'/><title type='text'>C 표준 라이브러리 -펌</title><content type='html'>1. 데이터 변환 함수&lt;br /&gt;2. 디렉토리 조작 함수&lt;br /&gt;3. 버퍼 조작 함수&lt;br /&gt;4. 파일 조작 함수&lt;br /&gt;5. stream 입출력 함수&lt;br /&gt;6. Low level 입출력 함수&lt;br /&gt;7. Mathematics&lt;br /&gt;8. 메모리 조작 함수&lt;br /&gt;9. 탐색과 정렬 함수&lt;br /&gt;10. 문자열 조작 함수&lt;br /&gt;11. 시간 함수&lt;br /&gt;12. 문자 분류 및 변환 함수&lt;br /&gt;13. 기타 함수&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;1. 데이터 변환 함수&lt;br /&gt;&lt;br /&gt;문자나 문자열을 수치 값으로 변환시키거나 대문자를 소문자로 소문자를 대문자로 변환하는 함수로 stdlib.h에 정의되어 있다. &lt;br /&gt;&lt;br /&gt;헤더 파일 : #include &lt;br /&gt;&lt;br /&gt;atof&lt;br /&gt;형식 : double atof(char *string)&lt;br /&gt;설명 : 문자열을 부동소수점 값으로 변환하는 함수 부동소수점으로 변환할 수 없는 문자열인 경우 0을 반환한다.&lt;br /&gt;&lt;br /&gt;atoi&lt;br /&gt;형식 : int atoi(char *string)&lt;br /&gt;설명 : 문자열을 정수 값으로 변환하는 함수, 변환할 수 없는 경우에는 0을 반환한다.&lt;br /&gt;&lt;br /&gt;atol&lt;br /&gt;형식 : int atol(char *string)&lt;br /&gt;설명 : 문자열을 long integer값으로 변환하는 함수, 변환할 수 없는 경우에는 0을 반환한다. &lt;br /&gt;&lt;br /&gt;itoa&lt;br /&gt;형식 : char *itoa(int value, char *string, int radix)&lt;br /&gt;설명 : 정수형 숫자를 문자열로 변환하는 함수&lt;br /&gt;&lt;br /&gt;ltoa&lt;br /&gt;형식 : char *ltoa(long value, char *string, int radix)&lt;br /&gt;설명 ; long integer형 숫자를 문자열로 변환하는 함수&lt;br /&gt;&lt;br /&gt;strtod&lt;br /&gt;형식 : double strtod(char *string, char *endptr)&lt;br /&gt;설명 : 문자열을 부동소수점 값으로 변환하는 함수, 실패한 경우 0을 반환한다. 변환할 수 없는 문자를 만난 경우, 읽기를 중단한다. &lt;br /&gt;&lt;br /&gt;strtol&lt;br /&gt;형식 : long strtol(char *string, char *endptr, int radix)&lt;br /&gt;설명 : 문자열을 long integer형 숫자로 변환하는 함수, 변환할 수 없는 문자열인 경우 0을 반환한다.&lt;br /&gt;&lt;br /&gt;strtoul&lt;br /&gt;형식 : unsigned long strtoul(char *string, char *endptr, int radix)&lt;br /&gt;설명 : 문자열을 unsigned long형의 숫자로 변환하는 함수, 변환할 수 없는 문자열인 경우 0을 반환한다.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;2. 디렉토리 조작 함수&lt;br /&gt;&lt;br /&gt;헤더 파일 : #include &lt;br /&gt;&lt;br /&gt;chdir&lt;br /&gt;형식 : int chdir(char *path)&lt;br /&gt;설명 : 현재 디렉토리를 주어진 경로로 바꾸는 함수&lt;br /&gt;&lt;br /&gt;getcwd&lt;br /&gt;형식 : char *getcwd(char *path, int numchars)&lt;br /&gt;설명 : 현재의 작업 디렉토리의 이름을 반환하는 함수&lt;br /&gt;&lt;br /&gt;mkdir&lt;br /&gt;형식 : int mkdir(char *path)&lt;br /&gt;설명 ; 주어진 경로를 사용하여 디렉토리를 만드는 함수&lt;br /&gt;&lt;br /&gt;rmdir &lt;br /&gt;형식 : int rmdir(char *path)&lt;br /&gt;설명 : 주어진 경로의 디렉토리를 삭제하는 함수&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;3. 버퍼 조작 함수&lt;br /&gt;&lt;br /&gt;헤더 파일 : #include &lt;br /&gt;&lt;br /&gt;memchr&lt;br /&gt;형식 : void *memchr(void *s, int c, size_t n)&lt;br /&gt;설명 : 버퍼에 문자를 찾는 함수&lt;br /&gt;&lt;br /&gt;memcmp&lt;br /&gt;형식 : int memcmp(void *s1, void s2, size_t n)&lt;br /&gt;설명 : 두 버퍼를 비교하는 함수&lt;br /&gt;&lt;br /&gt;memcpy&lt;br /&gt;형식 : void *memcpy(void *dest, void *src, size_t n)&lt;br /&gt;설명 : 버퍼의 내용을 복사하는 함수&lt;br /&gt;&lt;br /&gt;memmove&lt;br /&gt;형식 : void *memmove(void *dest, void *src, size_t n)&lt;br /&gt;설명 : 바이트 수만큼 src버퍼에서 dest버퍼로 이동시키는 함수&lt;br /&gt;&lt;br /&gt;memset&lt;br /&gt;형식 : void *memset(void *s, int c, size_t n)&lt;br /&gt;설명 : 주어진 문자로 버퍼로 채우는 함수&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;4. 파일 조작 함수&lt;br /&gt;&lt;br /&gt;헤더 파일 : #include &lt;br /&gt;&lt;br /&gt;chmod&lt;br /&gt;형식 : int chmod(char *path, int pmode)&lt;br /&gt;설명 : 파일의 permission을 바꾸는 함수&lt;br /&gt;&lt;br /&gt;fstat&lt;br /&gt;형식 : int fstat(int handle, struct stat *buffer)&lt;br /&gt;설명 : 파일의 상태 정보를 가져오는 함수&lt;br /&gt;&lt;br /&gt;remove&lt;br /&gt;형식 : int remove(char *path)&lt;br /&gt;설명 : 파일을 삭제하는 함수&lt;br /&gt;&lt;br /&gt;rename&lt;br /&gt;형식 : int rename(char *oldname, char *newname)&lt;br /&gt;설명 : 파일의 이름을 바꾸는 함수&lt;br /&gt;&lt;br /&gt;stat&lt;br /&gt;형식 : int stat(char *path, struct stat *buffer)&lt;br /&gt;설명 : 파일의 상태 정보를 가져오는 함수&lt;br /&gt;&lt;br /&gt;umask&lt;br /&gt;형식 : unsigned umask(unsigned pmode)&lt;br /&gt;설명 : 파일의ㅣ permission을 mask시키는 함수&lt;br /&gt;&lt;br /&gt;5. Stream 입출력 함수&lt;br /&gt;&lt;br /&gt;헤더 파일 : #include &lt;br /&gt;&lt;br /&gt;clearerr&lt;br /&gt;형식 : void clearerr(FILE *file_pointer)&lt;br /&gt;설명 : stream의 에러 지시자를 지우는 함수&lt;br /&gt;&lt;br /&gt;fclose &lt;br /&gt;형식 : int fclose(FILE *file_pointer)&lt;br /&gt;설명 : 파일을 닫는 함수, 정상적으로 수행되면 0을 에러가 발생되면 EOF을 반환한다.&lt;br /&gt;&lt;br /&gt;feof &lt;br /&gt;형식 : int feof(FILE *file_pointer)&lt;br /&gt;설명 : 파일의 끝을 검사하는 함수, 지정된 파일이 EOF이면 0이외의 값을 반환한다.&lt;br /&gt;&lt;br /&gt;ferror&lt;br /&gt;형식 : int ferror(FILE *file_pointer)&lt;br /&gt;설명 : 파일의 입출력 동안 에러가 발생되었는지를 검사하는 함수, 에러가 있으면 0이외의 값을 반환한다.&lt;br /&gt;&lt;br /&gt;fflush&lt;br /&gt;형식 : int fflush(FILE *file_pointer)&lt;br /&gt;설명 : 버퍼의 내용을 파일에 쓰는 함수, 정상적으로 수행이 끝나면 0을 반환하고 그 이외에는 EOF를 반환한다.&lt;br /&gt;&lt;br /&gt;fgetc&lt;br /&gt;형식 : int fgetc(FILE *file_pointer)&lt;br /&gt;설명 : stream으로부터 한 문자를 가져오는 함수, 에러 발생이나 파일의 끝인 경우에는 EOF를 반환한다.&lt;br /&gt;&lt;br /&gt;fgetpos &lt;br /&gt;형식 : int fgetpos(FILE *file_pointer, fpos_t current_pos)&lt;br /&gt;설명 : stream에서 현재 위치를 가져오는 함수&lt;br /&gt;&lt;br /&gt;fgets&lt;br /&gt;형식 : char *fgets(char *string, int maxchar, FILE *file_pointer)&lt;br /&gt;설명 : 파일에서 문자열을 읽는 함수, 읽어들이는 단위는 EOF나 \n을 만나거나 n-1개의 문자 길이 만큼이다. 실패한 경우 NULL을 반환한다.&lt;br /&gt;&lt;br /&gt;fopen&lt;br /&gt;형식 : FILE *fopen(char *filename, char *access_mode)&lt;br /&gt;설명 : 파일을 열기 위한 함수, 에러가 발생되면 NULL을 반환한다.&lt;br /&gt;&lt;br /&gt;fprintf&lt;br /&gt;형식 : int fprintf(FILE *file_pointer, char *format_string, args)&lt;br /&gt;설명 : 파일에 주어진 형식으로 데이터를 쓰기 위한 함수, 정상적으로 수행이 되면 출력한 문자의 수를 반환한다. 만약 에러가 발생되면 EOF를 반환한다.&lt;br /&gt;&lt;br /&gt;fputc&lt;br /&gt;형식 : int fputc(int c, FILE *file_pointer)&lt;br /&gt;설명 : 문자를 stream에 쓰기 위한 함수, 정상적으로 수행이 되면 출력한 문자의 수를 반환한다. 에러가 발생되면 EOF를 반환한다.&lt;br /&gt;&lt;br /&gt;fputchar&lt;br /&gt;형식 : int fputchar(int c)&lt;br /&gt;설명 : 문자를 stdout에 쓰기 위한 함수&lt;br /&gt;&lt;br /&gt;fputs&lt;br /&gt;형식 : int fputs(char *string, FILE *file_pointer)&lt;br /&gt;설명 : 문자열을 stream에 쓰기 위한 함수, 에러가 발생되면 EOF를 반환한다.&lt;br /&gt;&lt;br /&gt;fread&lt;br /&gt;형식 : size_t fread(char *buffer, size_t size, size_t count, FILE *file_pointer)&lt;br /&gt;설명 : stream으로부터 unformatted data를 buffer에 쓰기 위한 함수, 읽어들인 블록의 수를 반환한다.&lt;br /&gt;&lt;br /&gt;freopen&lt;br /&gt;형식 : FILE *freopen(char *filename, char *access mode, FILE *file_pointer)&lt;br /&gt;설명 : 파일 포인터를 다른 파일에 재 할당하기 위한 함수&lt;br /&gt;&lt;br /&gt;fscanf&lt;br /&gt;형식 : int fscaf(FILE *file_pointer, char *format string, args)&lt;br /&gt;설명 : stream으로부터 formatted input을 읽기 위한 함수, stream파일에서 형식대로 읽혀진 데이터 수를 반환한다. format의 형식은 scanf()와 같다.&lt;br /&gt;&lt;br /&gt;fseek&lt;br /&gt;형식 : int fseek(FILE *file_pointer, long offset, int origin)&lt;br /&gt;설명 : 파일의 현재 위치에서 새로운 위치로 변경하는 함수, 정상적으로 수행했을 경우 0을 반환한다.&lt;br /&gt;&lt;br /&gt;fsetpos&lt;br /&gt;형식 : int fsetpos(FILE *file_pointer, fpos_t *current pos)&lt;br /&gt;설명 : 파일의 현재 위치에서 새로운 위치로 변경하는 함수&lt;br /&gt;&lt;br /&gt;ftell&lt;br /&gt;형식 : long ftell(FILE *file_pointer)&lt;br /&gt;설명 : 파일에서의 현재 위치를 가져오는 함수 에러가 발생되면 -1을 반환한다.&lt;br /&gt;&lt;br /&gt;fwrite&lt;br /&gt;형식 : size_t fwrite(char *buffer, size_t size, size_t count, FILE *file_pointer)&lt;br /&gt;설명 : 버퍼에 있는 unformatted data를 stream에 쓰기 위한 함수&lt;br /&gt;&lt;br /&gt;getc&lt;br /&gt;형식 : int getc(FILE *file_pointer)&lt;br /&gt;설명 : 문자를 stream으로부터 읽기 위한 함수&lt;br /&gt;&lt;br /&gt;getchar&lt;br /&gt;형식 : int getchar(void)&lt;br /&gt;설명 : srdin으로부터 문자를 읽기 위한 함수&lt;br /&gt;&lt;br /&gt;gets&lt;br /&gt;형식 : char *gets(char *buffer)&lt;br /&gt;설명 : srdin으로부터 라인을 버퍼로 읽는 함수&lt;br /&gt;&lt;br /&gt;printf&lt;br /&gt;형식 : int printf(int c, FILE *file_pointer)&lt;br /&gt;설명 : formatted output을 stdout에 쓰는 함수&lt;br /&gt;&lt;br /&gt;putc&lt;br /&gt;형식 : int putc(int c, FILE *file_pointer)&lt;br /&gt;설명 : 문자를 steam에 쓰기 위한 함수&lt;br /&gt;&lt;br /&gt;putchar&lt;br /&gt;형식 : int putchar(int c)&lt;br /&gt;설명 : 문자를 stdout에 쓰기 위한 함수&lt;br /&gt;&lt;br /&gt;puts&lt;br /&gt;형식 : int puts(char *string)&lt;br /&gt;설명 : 문자열을 stdout에 쓰기 위한 함수&lt;br /&gt;&lt;br /&gt;rewind&lt;br /&gt;형식 : void rewind(FILE *file_pointer)&lt;br /&gt;설명 : 파일을 rewind하기 위한 함수&lt;br /&gt;&lt;br /&gt;scanf&lt;br /&gt;형식 : int scanf(char *format_string, args)&lt;br /&gt;설명 : stdin으로부터 formatted input을 읽는 함수&lt;br /&gt;&lt;br /&gt;setbuf&lt;br /&gt;형식 : void setbuf(FILE *file_pointer, char *buffer)&lt;br /&gt;설명 : stream을 위해 새로운 버퍼를 지정하는 함수&lt;br /&gt;&lt;br /&gt;setvbuf&lt;br /&gt;형식 : int setvbuf(FILE *file_pointer, char *buffer, int buf_type, size_t buf_size)&lt;br /&gt;설명 : 새로운 버퍼를 지정하고 제어하는 함수&lt;br /&gt;&lt;br /&gt;sprintf&lt;br /&gt;형식 : int sprintf(char *string, char *format_string, args)&lt;br /&gt;설명 : formatted output을 문자열로 쓰는 함수&lt;br /&gt;&lt;br /&gt;sscanf&lt;br /&gt;형식 : int sscanf(char *buffer, char *format_string, args)&lt;br /&gt;설명 : 문자열로부터 formatted input을 읽는 함수&lt;br /&gt;&lt;br /&gt;tmpfile &lt;br /&gt;형식 : FILE *tmpfile(void)&lt;br /&gt;설명 : temporary 파일의 이름을 가져오기 위한 함수&lt;br /&gt;&lt;br /&gt;tmpnam&lt;br /&gt;형식 : char *tmpnam(char *file_name)&lt;br /&gt;설명 : temporary 파일의 이름을 가져오기 위한 함수&lt;br /&gt;&lt;br /&gt;ungetc&lt;br /&gt;형식 : int ungetc(int c, FILE *file_pointer)&lt;br /&gt;설명 : 문자를 stream의 버퍼에 되돌려 주는 함수&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;6. Low level 입출력 함수&lt;br /&gt;&lt;br /&gt;헤더 파일 : #include 외에 #include , #include , #include , #include &lt;br /&gt;&lt;br /&gt;close&lt;br /&gt;형식 : int close(int handle)&lt;br /&gt;설명 : unbuffered I/O를 위해 열어 놓은 파일을 닫기 위한 파일, 정상적으로 수행되었을 경우 0을 반환한다. 에러가 발생되었을 경우에는 -1을 반환한다. &lt;br /&gt;&lt;br /&gt;creat&lt;br /&gt;형식 : int creat(char *filename, int pmode)&lt;br /&gt;설명 : 주어진 permission을 갖는 새로운 파일을 생성하기 위한 파일, 에러가 발생되었을 경우에는 -1을 반환한다.&lt;br /&gt;&lt;br /&gt;eof &lt;br /&gt;형식 : int eof(int handle)&lt;br /&gt;설명 : 파일의 끝을 검사하는 파일, 지정된 파일의 현재 위치가 파일의 끝이면 1을 반환하고 그렇지 않을 경우에는 0을 반환한다.&lt;br /&gt;&lt;br /&gt;lseek&lt;br /&gt;형식 : long lseek(int handle, long offset, int orgin)&lt;br /&gt;설명 : 파일의 주어진 위치로 이동하는 함수&lt;br /&gt;&lt;br /&gt;open&lt;br /&gt;형식 : int open(char *filename, int oflag, unsigned pmode)&lt;br /&gt;설명 : low-level I/O를 위해 파일을 여는 함수&lt;br /&gt;&lt;br /&gt;read &lt;br /&gt;형식 : int read(int handle, char *buffer, unsigned length)&lt;br /&gt;설명 : 파일로부터 바이너리 데이터를 버퍼로 읽는 함수, 읽은 문자의 바이트 수를 반환한다. 파일의 끝일 경우에는 EOF를 반환한다. 에러가 발생되면 -1을 반환한다. &lt;br /&gt;&lt;br /&gt;write&lt;br /&gt;형식 : int write(int handle, char *buffer, unsigned count)&lt;br /&gt;설명 : 버퍼에 있는 바이너리 데이터를 파일에 쓰는 함수, 정상적으로 수행되었을 경우에는 쓴 문자의 바이트 수를 반환한다. 에러가 발생되었을 경우에는 -1을 반환한다. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;7. Mathematics&lt;br /&gt;&lt;br /&gt;헤더 파일 : #intclude &lt;br /&gt;&lt;br /&gt;abs&lt;br /&gt;형식 : int abs(int n)&lt;br /&gt;설명 : 정수의 절대값을 구하는 함수&lt;br /&gt;&lt;br /&gt;acos&lt;br /&gt;형식 : double acos(double x)&lt;br /&gt;설명 : x의 arc cosine을 계산하는 함수&lt;br /&gt;&lt;br /&gt;asin &lt;br /&gt;형식 : double asin(double x)&lt;br /&gt;설명 : x의 arc sine을 계산하는 함수&lt;br /&gt;&lt;br /&gt;atan&lt;br /&gt;형식 : double atan(double x)&lt;br /&gt;설명 : x의 arc tangent를 계산하는 함수&lt;br /&gt;&lt;br /&gt;atan2&lt;br /&gt;형식 : double atan2(double y, double x)&lt;br /&gt;설명 : y/x의 arc tangent를 계산하는 함수&lt;br /&gt;&lt;br /&gt;ceil&lt;br /&gt;형식 : double ceil(double x)&lt;br /&gt;설명 : x를 초과하는 가장 작은 integral 값을 구하는 함수&lt;br /&gt;&lt;br /&gt;cos &lt;br /&gt;형식 : double cos(double x)&lt;br /&gt;설명 : cosine을 계산하는 함수&lt;br /&gt;&lt;br /&gt;cosh &lt;br /&gt;형식 : double cosh(double x)&lt;br /&gt;설명 : x의 hyperbolic cosine을 계산하는 함수&lt;br /&gt;&lt;br /&gt;div &lt;br /&gt;형식 : div_t div(int number, int denom)&lt;br /&gt;설명 : nunber/denom을 계산하여 몫과 나머지로 이루어진 구조체 div_t를 반환한다.&lt;br /&gt;div_t의 형식은 다음과 같다.&lt;br /&gt;type struct{&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; int quot;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; int rem;&lt;br /&gt;} div_t;&lt;br /&gt;&lt;br /&gt;exp&lt;br /&gt;형식 : x의 exponential을 계산하는 함수&lt;br /&gt;&lt;br /&gt;fabs&lt;br /&gt;형식 : double fabs(double x)&lt;br /&gt;설명 : x의 절대값을 구하는 함수&lt;br /&gt;&lt;br /&gt;floor&lt;br /&gt;형식 : double floor(double x)&lt;br /&gt;설명 : x보다 작은 가장 큰 integral값을 구하는 함수&lt;br /&gt;&lt;br /&gt;fmod&lt;br /&gt;형식 : double fmod(double x, double y)&lt;br /&gt;설명 : x/y의 나머지를 반환하는 함수&lt;br /&gt;&lt;br /&gt;frexp&lt;br /&gt;형식 : double frexp(double x, int *expptr)&lt;br /&gt;설명 : x를 mantissa와 exponent로 분리하는 함수&lt;br /&gt;&lt;br /&gt;labs&lt;br /&gt;형식 : labs(long n)&lt;br /&gt;설명 : long integer의 절대값을 찾는 함수&lt;br /&gt;&lt;br /&gt;ldexp&lt;br /&gt;형식 : double ldexp(double x, int exp)&lt;br /&gt;설명 : mantissa와 exponent로 값을 계산하여 반환하는 함수&lt;br /&gt;&lt;br /&gt;ldiv&lt;br /&gt;형식 : ldiv_t ldiv(long number, long denom)&lt;br /&gt;설명 : long integer를 나눗셈하는 함수&lt;br /&gt;&lt;br /&gt;log&lt;br /&gt;형식 : double log(double x)&lt;br /&gt;설명 : log(x)를 계산하는 함수&lt;br /&gt;&lt;br /&gt;log10&lt;br /&gt;형식 : double log10(double x)&lt;br /&gt;설명 : base 10인 x의 log을 구하는 함수&lt;br /&gt;&lt;br /&gt;modf&lt;br /&gt;형식 : double modf(double x, double *inptr)&lt;br /&gt;설명 : x를 fraction부분과 integer부분으로 분리하는 함수&lt;br /&gt;&lt;br /&gt;pow&lt;br /&gt;형식 : double pow(double x, double y)&lt;br /&gt;설명 : x의 y승을 구하는 함수&lt;br /&gt;&lt;br /&gt;rand&lt;br /&gt;형식 : int rand(void)&lt;br /&gt;설명 : 0에서 32사이의 random 정수를 구하는 함수&lt;br /&gt;&lt;br /&gt;random &lt;br /&gt;형식 : int random(int max_num)&lt;br /&gt;설명 : 0에서 max_num)사이의 random 정수를 구하는 함수&lt;br /&gt;&lt;br /&gt;randomize&lt;br /&gt;형식 : void randomize(void)&lt;br /&gt;설명 : random 수를 발생시키기 위해 seed를 지정하는 함수&lt;br /&gt;&lt;br /&gt;sin &lt;br /&gt;형식 : double sin(double x)&lt;br /&gt;설명 : sine을 계산하는 함수&lt;br /&gt;&lt;br /&gt;sinh&lt;br /&gt;형식 : double sinh(double x)&lt;br /&gt;설명 : x의 hyperbolic sine을 계산하는 함수&lt;br /&gt;&lt;br /&gt;sqrt&lt;br /&gt;형식 : double sqrt(double x)&lt;br /&gt;설명 : x의 양의 제곱근을 계산하는 함수&lt;br /&gt;&lt;br /&gt;srand&lt;br /&gt;형식 : void srand(unsigned seed)&lt;br /&gt;설명 : random 수 발생을 위해 새로운 seed를 지정하는 함수&lt;br /&gt;&lt;br /&gt;tan&lt;br /&gt;형식 : double tan(double x)&lt;br /&gt;설명 : x의 tangent를 계산하는 함수&lt;br /&gt;&lt;br /&gt;tanh&lt;br /&gt;형식 : double tanh(double x)&lt;br /&gt;설명 : x의 hyperbloic tangent를 계산하는 함수&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;8. 메모리 조작 함수&lt;br /&gt;&lt;br /&gt;헤더 파일 : #include &lt;br /&gt;&lt;br /&gt;calloc&lt;br /&gt;형식 : void *calloc(size_t num_elem, size_t elem_size)&lt;br /&gt;설명 : 배열을 할당하고 모든 원소를 0으로 초기화하는 함수&lt;br /&gt;&lt;br /&gt;free&lt;br /&gt;형식 : void free(void *mem_address)&lt;br /&gt;설명 : 할당된 메모리 블록을 되돌려 주는 함수&lt;br /&gt;&lt;br /&gt;malloc&lt;br /&gt;형식 : void *malloc(size_t num_bytes)&lt;br /&gt;설명 : 메모리 블록을 할당하는 함수&lt;br /&gt;&lt;br /&gt;realloc&lt;br /&gt;형식 : 메모리 블록을 재 할당하는 함수&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;9. 탐색과 정렬 함수&lt;br /&gt;&lt;br /&gt;헤더 파일 : #include &lt;br /&gt;&lt;br /&gt;bsearch&lt;br /&gt;형식 : void *bsearch(void *key, void *base, size_t num, size_t width, int (*com pare)(void *elem1, void *elem2)&lt;br /&gt;설명 : 이진 탐색을 수행하는 함수&lt;br /&gt;&lt;br /&gt;qsort&lt;br /&gt;형식 : void qsort(void *base, size_t num, size_t width, int (*compare)(void *elem1, void *elem2)&lt;br /&gt;설명 : quick sort 알고리즘을 이용하여 정렬을 수행하는 함수&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;10. 문자열 조작 함수&lt;br /&gt;&lt;br /&gt;헤더 파일 : #include &lt;br /&gt;&lt;br /&gt;strcat&lt;br /&gt;형식 : int strcat(char *string1, char *string2)&lt;br /&gt;설명 : 두 문자열을 결합하여 하나의 문자열로 만드는 함수&lt;br /&gt;&lt;br /&gt;strcmp&lt;br /&gt;형식 : int strcmp(char *string1, char *string2)&lt;br /&gt;설명 : 문자열을 알파벳 순서로 비교하는 함수, 두 문자열이 같으면 0을 반환한다. 만약 같지 않으면 다음과 같은 값을 반환한다.&lt;br /&gt;&lt;br /&gt;string1 &amp;lt; string2 이면 음수 값을 반환&lt;br /&gt;string1 &amp;gt; string2 이면 양수 값을 반환 &lt;br /&gt;&lt;br /&gt;strcpy&lt;br /&gt;형식 : char *strcpy(char *string1, char *string2)&lt;br /&gt;설명 : 문자열 string2를 string1으로 복사하는 함수&lt;br /&gt;&lt;br /&gt;strerror&lt;br /&gt;형식 : char *strerror(int errnum)&lt;br /&gt;설명 : 주어진 에러 번호에 해당되는 에러 메시지를 가져오는 함수&lt;br /&gt;&lt;br /&gt;strlen&lt;br /&gt;형식 : int strlen(char *string)&lt;br /&gt;설명 : 문자열의 길이를 구하는 함수 이때 NULL문자는 제외하고 길이를 구한다.&lt;br /&gt;&lt;br /&gt;strncat&lt;br /&gt;형식 : char *strncat(char *string1, char *string2, size_t n)&lt;br /&gt;설명 : string2의 문자를 string1 끝에 붙이는 함수&lt;br /&gt;&lt;br /&gt;strncmp&lt;br /&gt;형식 : int strncmp(char *string1, char *string2, size_t n)&lt;br /&gt;설명 : 두 문자열의 처음 n개의 문자를 비교하는 함수&lt;br /&gt;&lt;br /&gt;strncpy&lt;br /&gt;형식 : char *strncpy(char *string1, char *string2, size_t n)&lt;br /&gt;설명 : string2의 처음 n개의 문자를 string1에 복사하는 함수&lt;br /&gt;&lt;br /&gt;strnset&lt;br /&gt;형식 : char *strnset(char *string, int c, size_t n)&lt;br /&gt;설명 : 문자열의 처음 n개 문자를 c로 만드는 함수&lt;br /&gt;&lt;br /&gt;strrchr&lt;br /&gt;형식 : char *strrchr(char *string, int c)&lt;br /&gt;설명 : 문자열에서 마지막에 나오는 문자 c를 찾는 함수 만약, 해당되는 문자가 발견되지 않은 경우에는 NULL을 반환한다. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;11. 시간 함수&lt;br /&gt;&lt;br /&gt;헤더 파일 : #include&lt;br /&gt;&lt;br /&gt;asctime&lt;br /&gt;형식 : char *asctime(struct tm *time)&lt;br /&gt;설명 : struct tm 형식의 시간을 문자열로 바꾸는 함수&lt;br /&gt;&lt;br /&gt;clock&lt;br /&gt;형식 : clock_t clock(void)&lt;br /&gt;설명 : clock tick으로 경과된 시간을 가져오는 함수&lt;br /&gt;&lt;br /&gt;ctime&lt;br /&gt;형식 : char *ctime(time_t *time)&lt;br /&gt;설명 : 이진 시간을 문자열로 바꾸는 함수&lt;br /&gt;&lt;br /&gt;difftime&lt;br /&gt;형식 : double difftime(time_t time1, time_t time2)&lt;br /&gt;설명 : 두 시간 사이의 차를 초단위로 계산하는 함수&lt;br /&gt;&lt;br /&gt;gmtime&lt;br /&gt;형식 : struct_tm *gmtime(time_t *time)&lt;br /&gt;설명 : Greenwich Meam Time(GMT)을 tm structuregudtlr으로 가져오는 함수&lt;br /&gt;&lt;br /&gt;localtime&lt;br /&gt;형식 : struct tm *localtime(time_t *time)&lt;br /&gt;설명 : local time을 tm structure형식으로 가져오는 함수&lt;br /&gt;&lt;br /&gt;time&lt;br /&gt;형식 : time_t time(time_t *timeptr)&lt;br /&gt;설명 : GMT 1970년부터 경과된 현재 시간을 가져오는 함수&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;12. 문자 분류 및 변환 함수&lt;br /&gt;&lt;br /&gt;헤더 파일 : #include &lt;br /&gt;&lt;br /&gt;isalnum&lt;br /&gt;형식 : int isalnum(int c)&lt;br /&gt;설명 : c가 alphanumeric이면 참값을 반환&lt;br /&gt;&lt;br /&gt;isalpha&lt;br /&gt;형식 : int isalpha(int c)&lt;br /&gt;설명 : c가 letter이면 참값을 반환&lt;br /&gt;&lt;br /&gt;isascii&lt;br /&gt;형식 : int isascii(int c)&lt;br /&gt;설명 : c가 ASCII이면 참값을 반환&lt;br /&gt;&lt;br /&gt;iscntrl&lt;br /&gt;형식 : int iscntrl(int c)&lt;br /&gt;설명 : c가 control 문자이면 참값을 반환&lt;br /&gt;&lt;br /&gt;isdigit&lt;br /&gt;형식 : int isdigit(int c)&lt;br /&gt;설명 : c가 decimal digit이면 참값을 반환&lt;br /&gt;&lt;br /&gt;isgraph&lt;br /&gt;형식 : int isgraph(int c)&lt;br /&gt;설명 : c가 graphic c문자이면 참값을 반환&lt;br /&gt;&lt;br /&gt;islower&lt;br /&gt;형식 : int islower(int c)&lt;br /&gt;설명 : c가 소문자이면 참값을 반환&lt;br /&gt;&lt;br /&gt;isprint&lt;br /&gt;형식 : int isprint(int c)&lt;br /&gt;설명 : c가 인쇄 가능한 문자이면 참값을 반환&lt;br /&gt;&lt;br /&gt;ispunct&lt;br /&gt;형식 : int ispunct(int c)&lt;br /&gt;설명 : c가 punctuation 문자이면 참값을 반환&lt;br /&gt;&lt;br /&gt;isspace&lt;br /&gt;형식 : int isspace(int c)&lt;br /&gt;설명 : c가 공백 문자이면 참값을 반환 &lt;br /&gt;&lt;br /&gt;isupper&lt;br /&gt;형식 : int tsupper(int c)&lt;br /&gt;설명 : c가 대문자이면 참값을 반환&lt;br /&gt;&lt;br /&gt;isxdigit&lt;br /&gt;형식 : int isxdigit(int c)&lt;br /&gt;설명 : c가 hexadecimal digit이면 참값을 반환&lt;br /&gt;&lt;br /&gt;toascii&lt;br /&gt;형식 : int toascii(int c)&lt;br /&gt;설명 : c를 ASCII로 변환하는 함수&lt;br /&gt;&lt;br /&gt;tolower&lt;br /&gt;형식 : tolower(int c)&lt;br /&gt;설명 : c를 소문자로 변환하는 함수&lt;br /&gt;&lt;br /&gt;toupper&lt;br /&gt;형식 : int toupper(int c)&lt;br /&gt;설명 : c를 대문자로 변환하는 함수&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;13. 기타 함수&lt;br /&gt;&lt;br /&gt;다음은 화면 제어에 관한 라이브러리 함수들이다. &lt;br /&gt;&lt;br /&gt;헤더 파일 : #include &lt;br /&gt;&lt;br /&gt;clreol &lt;br /&gt;형식 : void clreol(void)&lt;br /&gt;설명 : 커서의 현 위치 행을 지우는 함수&lt;br /&gt;&lt;br /&gt;clrscr &lt;br /&gt;형식 : void clrscr(void)&lt;br /&gt;설명 : 현재 사용 중인 윈도우를 지우고 커서를 왼쪽 상단으로 이동시키는 함수&lt;br /&gt;&lt;br /&gt;deline&lt;br /&gt;형식 : void deline(void)&lt;br /&gt;설명 : 커서가 있는 행을 삭제하는 함수&lt;br /&gt;&lt;br /&gt;gettext&lt;br /&gt;형식 : int gettext(int left, int top, int right, int bottom, void *dest)&lt;br /&gt;설명 : 지정된 텍스트 화면의 내용을 dest로 읽어 들이는 함수&lt;br /&gt;&lt;br /&gt;gettextinfo&lt;br /&gt;형식 : void gettextinfo(struct text_info r)&lt;br /&gt;설명 : 현재의 텍스트 모드의 정보를 구조체 r로 읽어 들이는 함수, 구조체의 r의 형식은 다음과 같다. &lt;br /&gt;&lt;br /&gt;struct text_info {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; unsigned char currmode;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; unsigned char screenheigh;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; unsigned char screenwidth;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; unsigned char normattr;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; unsigned char winleft;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; unsigned char wintop;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; unsigned char winright;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; unsigned char winbottom;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; unsigned char curx;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; unsigned char cury;&lt;br /&gt;} *r;&amp;nbsp; &lt;DIV class=autosourcing-stub&gt;&lt;P style="PADDING-BOTTOM: 0px; FONT-STYLE: normal; MARGIN: 11px 0px 7px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; FONT-FAMILY: Dotum; FONT-SIZE: 12px; FONT-WEIGHT: normal; PADDING-TOP: 0px"&gt;&lt;STRONG style="PADDING-BOTTOM: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 7px; PADDING-TOP: 0px"&gt;[출처]&lt;/STRONG&gt; &lt;A href="http://blog.naver.com/kkwwhh7/100003308350" target=_blank&gt;C 표준 라이브러리 함수&lt;/A&gt;&lt;SPAN style="PADDING-BOTTOM: 0px; PADDING-LEFT: 5px; PADDING-RIGHT: 7px; PADDING-TOP: 0px"&gt;|&lt;/SPAN&gt;&lt;STRONG style="PADDING-BOTTOM: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 7px; PADDING-TOP: 0px"&gt;작성자&lt;/STRONG&gt; &lt;A href="http://blog.naver.com/kkwwhh7" target=_blank&gt;혀니&lt;/A&gt;&lt;/P&gt;&lt;/DIV&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3007272888468082271-2760185480721547703?l=saicong.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://saicong.blogspot.com/feeds/2760185480721547703/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://saicong.blogspot.com/2009/10/c-%ED%91%9C%EC%A4%80-%EB%9D%BC%EC%9D%B4%EB%B8%8C%EB%9F%AC%EB%A6%AC-%ED%8E%8C.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3007272888468082271/posts/default/2760185480721547703'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3007272888468082271/posts/default/2760185480721547703'/><link rel='alternate' type='text/html' href='http://saicong.blogspot.com/2009/10/c-%ED%91%9C%EC%A4%80-%EB%9D%BC%EC%9D%B4%EB%B8%8C%EB%9F%AC%EB%A6%AC-%ED%8E%8C.html' title='C 표준 라이브러리 -펌'/><author><name>Castlebay</name><uri>http://www.blogger.com/profile/09231852250158037381</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3007272888468082271.post-9213270665279517541</id><published>2009-10-21T15:25:00.000+09:00</published><updated>2011-01-29T22:24:32.116+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='Tips'/><title type='text'>new 연산자와 malloc Function 의 차이점</title><content type='html'>&lt;P&gt;오늘은 C/C++ 프로그램에 있어서 메모리를 할당하는 방식의 차이점에 대하여 간단하게 적어보겠습니다.&lt;/P&gt;&lt;P&gt;&lt;br /&gt;프로그래밍을 하면서 메모리 영역 (Heap 영역입니다.)을 사용하기 위하여 할당하는 방법은 여러 방식이 있지만, 오늘의 타겟은 malloc 함수와 new 연산자 입니다.&lt;/P&gt;&lt;P&gt;&lt;br /&gt;1. 함수의 원형 : void *malloc( size_t size );&lt;/P&gt;&lt;P&gt;Discription : Allocates memory blocks.&lt;/P&gt;&lt;P&gt;Parameters :&amp;nbsp; Bytes to allocate.&lt;/P&gt;&lt;P&gt;Return Values :&lt;br /&gt;malloc returns a void pointer to the allocated space, or NULL if there is insufficient memory available. To return a pointer to a type other than void, use a type cast on the return value. The storage space pointed to by the return value is guaranteed to be suitably aligned for storage of any type of object. If size is 0, malloc allocates a zero-length item in the heap and returns a valid pointer to that item. Always check the return from malloc, even if the amount of memory requested is small.&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;사용 예제를 간단히 써 보겠습니다.&lt;/P&gt;&lt;P&gt;예1)&lt;br /&gt;char *pszReturnBuf = (char *)malloc(sizeof(char) * MAX_PATH);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;이걸 해석하면, 캐릭터형 포인터 pszReturnBuf 의 변수에 char 형의 크기 곱하기 MAX_PATH 만큼의 메모리 크기를 char* 형으로 할당한다. 라고 말할 수 있습니다. 그런데 왜 malloc 의 parameter 로 1byte * MAX_PATH 로 했을까요? 그냥 MAX_PATH 를 하는거랑 무슨 차이라구?!!&lt;/P&gt;&lt;P&gt;다음과 구문이 있다고 해봅시다.&lt;br /&gt;char *a;&lt;br /&gt;a = malloc(128);&lt;/P&gt;&lt;P&gt;자 그럼 a에는 총 몇개의 "문자"가 들어갈 수 있을까요?&lt;/P&gt;&lt;P&gt;답은?&lt;/P&gt;&lt;P&gt;128이 아니라 '모른다' 입니다. 왜냐구요? char는 한 바이트 씩 잡아먹지 않냐구요? 맞습니다. 보통의 경우에는 맞다는 말입니다. 하지만 항상 그렇다는 보장이 없죠. 컴파일을 하는 컴퓨터에 따라 다를 수 있다는 말입니다.&lt;/P&gt;&lt;P&gt;네, 그렇기 때문에 malloc(sizeof(char) * MAX_PATH)이라는 구문이 위에 쓰였습니다. 여기서 sizeof(char)는 char 타입이 최소 몇 바이트로 이루어졌는가를 알아보라는 C언어의 예약어입니다. 물론 char 말고 int, long, 심지어 직접 만든 자료구조(struct나 union사용)의 이름도 넣을 수 있습니다. 혹은 미리 선언되어있는 변수의 이름을 넣으시면 그 변수의 타입을 넣은 것과 같은 효과를 가지게 됩니다. 예를 들어&lt;/P&gt;&lt;P&gt;int a;&lt;br /&gt;int t1, t2;&lt;br /&gt;t1 = sizeof(int);&lt;br /&gt;t2 = sizeof(a);&lt;/P&gt;&lt;P&gt;했을 때 t1과 t2는 같은 값을 가진다는 것이지요.&lt;/P&gt;&lt;P&gt;자 그러면 왜 malloc의 인자에 sizeof와 같은 예약어를 사용했는지 아실 겁니다. 이 프로그래밍 특정 플랫폼에서 특정 컴파일러를 사용해서 컴파일 된다면(항상 그렇다면) sizeof(int) 대신 4라든가 8이라든가 하는 숫자를 넣으셔도 됩니다만, 별로 추천해드릴만한 방법은 아닙니다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;또한, malloc 은 메모리를 할당만 할 뿐, 실제 해당 메모리 영역에는 어떠한 값이 있는지 알 수 없습니다. 따라서 메모리가 정상적으로 할당이 되었다면, 초기화를 해주는 작업이 필요합니다. 예1) 을 바탕으로 초기화 작업부분까지 추가해 보겠습니다.&lt;/P&gt;&lt;P&gt;예2)&lt;/P&gt;&lt;P&gt;char *pszReturnBuf = (char *)malloc(sizeof(char) * MAX_PATH);&lt;br /&gt;if(!pszReturnBuf) //메모리 할당에 실패한 경우&lt;br /&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp; return FALSE;&lt;br /&gt;&amp;nbsp;}&lt;/P&gt;&lt;P&gt;memset(pszReturnBuf , 0x00 , sizeof(char)*MAX_PATH);&lt;/P&gt;&lt;P&gt;&lt;br /&gt;간단히 해석하면, pszReturnBuf 주소로부터 sizeof(char)*MAX_PATH 의 크기만큼을 0x00 으로 값을 대입한다 입니다.&lt;br /&gt;이걸 더 간단히 하려면, calloc API를 사용하면 되겠죠. calloc 가 뭔지는 알아서 찾아보길..&lt;/P&gt;&lt;P&gt;그런데, malloc 으로 할당한 메모리의 크기를 변경하려면? realloc 함수를 사용하면 됩니다. 이 함수를 사용시, malloc 으로 할당받은 메모리 크기를 줄이거나, 늘릴 수 있습니다. 또한, 재 할당을 받더라도, 이전에 저장한 내용은 저장이 되어 있습니다.&lt;/P&gt;&lt;P&gt;가장 중요한 건, malloc 으로 할당한 메모리 영역은 사용할 필요가 없어지면, free 함수를 사용하여 사용한 메모리 영역에 대한 해제 작업을 꼭!!! 해주어야 한다는 것 입니다. 안해주면 메모리 누수가 발생하겠죠?&lt;/P&gt;&lt;P&gt;[new, malloc 개념 -&amp;gt; new 연산자 , malloc 함수]&lt;/P&gt;&lt;P&gt;일반적으로 new로 할당된 메모리는 memset으로 초기화 하면 안됩니다. &lt;br /&gt;new로 할당된 메모리는 생성자에서 초기화하고 소멸자에서 뒷정리를 해야합니다. &lt;/P&gt;&lt;P&gt;new 는 연산자이고(+ - * /같은 연산자) malloc은 함수 입니다. &lt;br /&gt;일반인들은 new도 함수라고 생각하는데 꼭 기억하세요 new는 연산자입니다. &lt;br /&gt;더불어 sizeof도 연산자임을 기억하세요 &lt;/P&gt;&lt;P&gt;new 는 인수로 넘어온 클래스 타입의 객체를 생성해줍니다. //중요! &lt;br /&gt;malloc은 인수로 넘어온 크기 만큼의 메모리 블럭을 잡아줍니다.(할당) //중요! &lt;/P&gt;&lt;P&gt;개념이 약간 다른데 깊이 있게 들어가 보면, &lt;/P&gt;&lt;P&gt;malloc은 커널에게 메모리 할당 요청을 하고 커널은 메모리 블럭의 일부분을 &lt;/P&gt;&lt;P&gt;다른곳에서 접근 할수 없게 예약을 하고 그메모리의 시작주소를 넘깁니다. &lt;/P&gt;&lt;P&gt;이 시작주소가 malloc이 리턴하는 값입니다. &lt;/P&gt;&lt;P&gt;따라서 malloc이 넘겨준 메모리에는 쓰레기 값이 들어 있으므로 memset등의 함수를 사용해서 초기화를 해주어야 하고, &lt;/P&gt;&lt;P&gt;'-&amp;gt;'연산자나 '.' 연산자를 사용할수 없습니다.(객체의 의미가 없으므로) &lt;/P&gt;&lt;P&gt;new 는 메모리를 할당하면서 '클래스에서 정의된대로' 메모리를 초기화 하고 객체를 사용할수 있는 환경을 만들어 줍니다. &lt;/P&gt;&lt;P&gt;예약만하는것이 아니라 예약 + 클래스에 맞는 객체로 생성 시켜주는 겁니다. &lt;br /&gt;(물론 이런한 객체화 작업은 생성자와 소멸자에서 코딩해야 합니다.) &lt;/P&gt;&lt;P&gt;신이 흙으로 사람을 만들때 그 코에 생기를 불어 넣는게 new 연산자입니다. &lt;/P&gt;&lt;P&gt;사람이 흙으로 인형을 만들어 생기를 못 불어 넣는게 malloc입니다. &lt;/P&gt;&lt;P&gt;따라서 new로 할당한 메모리에 memset을 사용하면 그 생기를 지우는 행위입니다. &lt;/P&gt;&lt;P&gt;new delete는 연산자이고 malloc free는 함수입니다. &lt;/P&gt;&lt;P&gt;&lt;br /&gt;&amp;nbsp;&lt;/P&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3007272888468082271-9213270665279517541?l=saicong.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://saicong.blogspot.com/feeds/9213270665279517541/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://saicong.blogspot.com/2009/10/new-%EC%97%B0%EC%82%B0%EC%9E%90%EC%99%80-malloc-function-%EC%9D%98-%EC%B0%A8%EC%9D%B4%EC%A0%90.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3007272888468082271/posts/default/9213270665279517541'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3007272888468082271/posts/default/9213270665279517541'/><link rel='alternate' type='text/html' href='http://saicong.blogspot.com/2009/10/new-%EC%97%B0%EC%82%B0%EC%9E%90%EC%99%80-malloc-function-%EC%9D%98-%EC%B0%A8%EC%9D%B4%EC%A0%90.html' title='new 연산자와 malloc Function 의 차이점'/><author><name>Castlebay</name><uri>http://www.blogger.com/profile/09231852250158037381</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3007272888468082271.post-9105557798501692803</id><published>2009-08-31T14:30:00.000+09:00</published><updated>2011-01-29T22:24:32.065+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='Kernel'/><title type='text'>DriverObject 를 얻는 방법 2/2</title><content type='html'>&lt;P&gt;지난 시간에 DriverOBject 를 획득하는 방법으로 일반론 적인 순서를 나열하였습니다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;사실...사용하기도 귀찮고..이래저래 짜증나죠..&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;그래서 쉽게 구할 수 있는 방법을 소개하나니..바로 Undocument API 를 이용하는 방법입니다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;말이 필요없이 그냥 보시죠.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;사용되어질 API 원형&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;NTSTATUS &lt;br /&gt;ObReferenceObjectByName(&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; IN PUNICODE_STRING ObjectPath,&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; IN ULONG Attributes,&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; IN PACCESS_STATE PassedAccessState OPTIONAL,&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; IN ACCESS_MASK DesiredAccess OPTIONAL,&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; IN POBJECT_TYPE ObjectType,&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; IN KPROCESSOR_MODE AccessMode,&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; IN OUT PVOID ParseContext OPTIONAL,&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; OUT PVOID *ObjectPtr); &lt;br /&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;/////////////////////////////////////////////////////////////////////&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;PUNICODE_STRING puniStr; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; //DriverObject 를 구하고자 하는 드라이버 이름&lt;/P&gt;&lt;P&gt;OBJECT_ATTRIBUTES obObjattr; &lt;/P&gt;&lt;P&gt;PVOID *Object = NULL &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; //구하고자 하는 DriverObject 의 값이 들어갈 변수&lt;br /&gt;HANDLE&amp;nbsp; hHandle hHandle = NULL; &amp;nbsp; &lt;/P&gt;&lt;P&gt;NTSTATUS nsRet = STATUS_SUCCESS; &amp;nbsp; &lt;/P&gt;&lt;P&gt;POBJECT_TYPE *IoDriverObjectType;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;InitializeObjectAttributes( &amp;amp;obObjattr,&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; puniStr,&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; OBJ_CASE_INSENSITIVE|OBJ_KERNEL_HANDLE,&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; NULL,&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; NULL);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp; nsRet = ObReferenceObjectByName(&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; puniStr,&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; OBJ_KERNEL_HANDLE| OBJ_CASE_INSENSITIVE,&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; NULL,&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; (ACCESS_MASK)0L,&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; *IoDriverObjectType,&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; KernelMode,&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; NULL,&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; (PVOID*)Object&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; );&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;끝입니다 ㅎㅎ 간단하죠?;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Undocument API 는 강력한 기능을 가진 함수들이 많이 있지만 이를 사용하는데 있어서 굉장한 주의를 표합니다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;왜냐? 언제 사라질지 모른다. (Document API 는 SDK / DDK / WDK 버전이 변경되면서 없어지는 (obsolete) API 에 대해서 명시해 줍니다. 그러나 Undocument API 는 그렇지 않기 때문에, 내가 사용한 API 가 없어지는 사태가 발생, 프로그램이 실행 안되고,&amp;nbsp; BSOD 가 발생되는 등의 심각한 문제가 발생할 수 있습니다. 물론 제가 사용하는 Undocument API 중에 그런일은 아직 없습니다 :-) )&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;심각한 부작용이 있을 수 있음에도 사용하는 이유는...아무래도 강력한 성능의 매력이 아닐까요?&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;특히 해킹 혹은 멜웨어 제작에 있어서 Undocument API 의 사용은 필수 불가결하다고 할 수 있습니다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;다음에는...강력한 Hooking 의 힘에 대해서 간단히 적어볼꼐요 ^^)&lt;br /&gt;&lt;/P&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3007272888468082271-9105557798501692803?l=saicong.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://saicong.blogspot.com/feeds/9105557798501692803/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://saicong.blogspot.com/2009/08/driverobject-%EB%A5%BC-%EC%96%BB%EB%8A%94-%EB%B0%A9%EB%B2%95-22.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3007272888468082271/posts/default/9105557798501692803'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3007272888468082271/posts/default/9105557798501692803'/><link rel='alternate' type='text/html' href='http://saicong.blogspot.com/2009/08/driverobject-%EB%A5%BC-%EC%96%BB%EB%8A%94-%EB%B0%A9%EB%B2%95-22.html' title='DriverObject 를 얻는 방법 2/2'/><author><name>Castlebay</name><uri>http://www.blogger.com/profile/09231852250158037381</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3007272888468082271.post-7949739135764840514</id><published>2009-08-25T11:11:00.000+09:00</published><updated>2011-01-29T22:24:32.009+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='REMOTE debuggeing'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='Tips'/><title type='text'>Remote Debugging 을 해보자!</title><content type='html'>&lt;script src='http://ss.textcube.com/service/blog/script/blogger.js' type='text/javascript'&gt;&lt;/script&gt;&lt;P&gt;장애 지원을 하다 보면, Target PC 에서 생긴 장애가 내 PC 에서는 발생하지 않는 경우가 생긴다. 그렇다고 Visual Studio 를 설치할 수도 없으니..&lt;/P&gt;&lt;P&gt;그러던 중, 이것저것 찾아보다가 홍가님의 블로그에서 굉장한 자료를 찾았다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;SPAN onclick="copyUrl('http://hongyver.pe.kr/ttblog/trackback/691', this)"&gt;&lt;A href="http://hongyver.pe.kr/ttblog/trackback/691"&gt;http://hongyver.pe.kr/ttblog/trackback/691&lt;/A&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;SPAN onclick="copyUrl('http://hongyver.pe.kr/ttblog/trackback/691', this)"&gt;링크조차도 귀찮을 수 있으니, 직접 스크린 샷과 함께 설명을 하겠음.&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;SPAN onclick="copyUrl('http://hongyver.pe.kr/ttblog/trackback/691', this)"&gt;난 Visual Stduio 6.0 만 쓰니 다른것은 설명하지 않겠다.&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;SPAN onclick="copyUrl('http://hongyver.pe.kr/ttblog/trackback/691', this)"&gt;********************************************************************************&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN onclick="copyUrl('http://hongyver.pe.kr/ttblog/trackback/691', this)"&gt;// 원격 디버깅을 받는 PC ( Target PC) 의 설정 방법 &lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN onclick="copyUrl('http://hongyver.pe.kr/ttblog/trackback/691', this)"&gt;1. 우선 첨부 파일을 다운 받아서 Target PC 에서 실행한다.&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;SPAN onclick="copyUrl('http://hongyver.pe.kr/ttblog/trackback/691', this)"&gt;첨부 파일 : &lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;a href="http://ss.textcube.com/blog/2/25883/attach/XGuy6Lzc3r.zip/msvsmonforVC6.zip" rel="enclosure" &gt;&lt;img src="http://ss.textcube.com/service/blog/image/extension/zip.gif" alt="" style="vertical-align: middle;" /&gt; msvsmonforVC6.zip&lt;/a&gt;&lt;/div&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;SPAN onclick="copyUrl('http://hongyver.pe.kr/ttblog/trackback/691', this)"&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/2/25883/attach/Xc5fkekDlq.bmp" style="width:267px;height:178px;" alt=""  /&gt;&lt;/div&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;SPAN onclick="copyUrl('http://hongyver.pe.kr/ttblog/trackback/691', this)"&gt;2. Settings...를 클릭하여 "Target machine name or address" 란에 Host PC 의 IP를 입력한다.&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;SPAN onclick="copyUrl('http://hongyver.pe.kr/ttblog/trackback/691', this)"&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/2/25883/attach/XfHRROliDP.jpg" style="width:338px;height:126px;" alt="" onclick="TC$PRIV_open_img('http://ss.textcube.com/blog/2/25883/attach/XfHRROliDP.jpg')" /&gt;&lt;/div&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN onclick="copyUrl('http://hongyver.pe.kr/ttblog/trackback/691', this)"&gt;3. "Connect" 를 누르고, 대기하면 Target PC 가 할 일은 끝.&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN onclick="copyUrl('http://hongyver.pe.kr/ttblog/trackback/691', this)"&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/2/25883/attach/XWG8fpiaWU.jpg" style="width:161px;height:95px;" alt=""  /&gt;&lt;/div&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;SPAN onclick="copyUrl('http://hongyver.pe.kr/ttblog/trackback/691', this)"&gt;c.f) 대기하고 있는 PC 는 TCP 2049 , 2050 포트를 사용한다. 따라서, Target PC 의 해당 포트는 Allow 정책을 수립해 놓아야 한다.&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN onclick="copyUrl('http://hongyver.pe.kr/ttblog/trackback/691', this)"&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/2/25883/attach/XIWQp70xk0.jpg" style="width:462px;height:265px;" alt=""  /&gt;&lt;/div&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;SPAN onclick="copyUrl('http://hongyver.pe.kr/ttblog/trackback/691', this)"&gt;&lt;P&gt;&lt;SPAN onclick="copyUrl('http://hongyver.pe.kr/ttblog/trackback/691', this)"&gt;********************************************************************************&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN onclick="copyUrl('http://hongyver.pe.kr/ttblog/trackback/691', this)"&gt;// 디버깅을 하는 PC ( Host PC) 의 설정 방법 &lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;SPAN onclick="copyUrl('http://hongyver.pe.kr/ttblog/trackback/691', this)"&gt;1. Visual Studio 6.0 실행 후, Project-&amp;gt;Settings...-&amp;gt;Debug 를 선택한다. 여기서 Remote executable path and file name 부분에 Target PC 에서 디버깅을 실행할 프로그램이 실행될 경로를 지정해준다.&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;SPAN onclick="copyUrl('http://hongyver.pe.kr/ttblog/trackback/691', this)"&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/2/25883/attach/XClGfwhdty.jpg" style="width:580px;height:388px;" alt="" onclick="TC$PRIV_open_img('http://ss.textcube.com/blog/2/25883/attach/XClGfwhdty.jpg')" /&gt;&lt;/div&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;SPAN onclick="copyUrl('http://hongyver.pe.kr/ttblog/trackback/691', this)"&gt;2. Build-&amp;gt;Debugger Remote Connection...을 선택한다. 여기서 Connection 을&amp;nbsp; "Network (TCP/IP)로 선택하고 , Settings...를 클릭한다.&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;SPAN onclick="copyUrl('http://hongyver.pe.kr/ttblog/trackback/691', this)"&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/2/25883/attach/XTisO7FbP9.jpg" style="width:384px;height:286px;" alt=""  /&gt;&lt;/div&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;SPAN onclick="copyUrl('http://hongyver.pe.kr/ttblog/trackback/691', this)"&gt;3. Target machine name or address 부분에 Target PC 의 IP를 적어준다.&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN onclick="copyUrl('http://hongyver.pe.kr/ttblog/trackback/691', this)"&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/2/25883/attach/XD58nD32XU.jpg" style="width:338px;height:134px;" alt=""  /&gt;&lt;/div&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;SPAN onclick="copyUrl('http://hongyver.pe.kr/ttblog/trackback/691', this)"&gt;4. 원하는 시점에 Break Point 설정한 다음, 디버깅을 하면 된다.&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;디버깅이 되었을 경우의 Network Connection 상태.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/2/25883/attach/XLJEHy35Vg.jpg" style="width:462px;height:307px;" alt=""  /&gt;&lt;/div&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;SPAN onclick="copyUrl('http://hongyver.pe.kr/ttblog/trackback/691', this)"&gt;쉽다. 편하다.&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3007272888468082271-7949739135764840514?l=saicong.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://saicong.blogspot.com/feeds/7949739135764840514/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://saicong.blogspot.com/2009/08/remote-debugging-%EC%9D%84-%ED%95%B4%EB%B3%B4%EC%9E%90.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3007272888468082271/posts/default/7949739135764840514'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3007272888468082271/posts/default/7949739135764840514'/><link rel='alternate' type='text/html' href='http://saicong.blogspot.com/2009/08/remote-debugging-%EC%9D%84-%ED%95%B4%EB%B3%B4%EC%9E%90.html' title='Remote Debugging 을 해보자!'/><author><name>Castlebay</name><uri>http://www.blogger.com/profile/09231852250158037381</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3007272888468082271.post-8852809105480199445</id><published>2009-08-19T14:27:00.000+09:00</published><updated>2011-01-29T22:24:31.921+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='DriverObject'/><category scheme='http://www.blogger.com/atom/ns#' term='Kernel'/><category scheme='http://www.blogger.com/atom/ns#' term='ObOpenObjectByName'/><category scheme='http://www.blogger.com/atom/ns#' term='InitializeObjectAttributes'/><category scheme='http://www.blogger.com/atom/ns#' term='Object Name'/><category scheme='http://www.blogger.com/atom/ns#' term='ObReferenceObjectByHandle'/><title type='text'>DriverObject 를 얻는 방법 1/2</title><content type='html'>&lt;P&gt;드라이버를 개발하다 보면, DriverObject 를 얻어야 하는 경우가 생깁니다.&lt;/P&gt;&lt;P&gt;이때, 주로 쓰는 방법은 아래와 같습니다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;Object Name 을 이용하여 핸들을 얻은 후, 핸들을 이용하여 DriverObject를 얻어오는 방법.&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;많이들 사용하는 방법일거라 생각합니다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;PUNICODE_STRING puniStr; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; //DriverObject 를 구하고자 하는 드라이버 이름&lt;/P&gt;&lt;P&gt;OBJECT_ATTRIBUTES obObjattr; &lt;/P&gt;&lt;P&gt;PVOID *Object = NULL &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; //구하고자 하는 DriverObject 의 값이 들어갈 변수&lt;br /&gt;HANDLE &amp;nbsp;hHandle = NULL; &amp;nbsp; &lt;/P&gt;&lt;P&gt;NTSTATUS nsRet = STATUS_SUCCESS; &amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;InitializeObjectAttributes( &amp;amp;obObjattr,&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; puniStr,&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; OBJ_CASE_INSENSITIVE|OBJ_KERNEL_HANDLE,&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; NULL,&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; NULL);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;//ObOpenObjectByName API 로 DriverObject의 &amp;nbsp;HANDLE 값을 얻는다 ,&lt;/P&gt;&lt;P&gt;nsRet = ObOpenObjectByName(&amp;amp;obObjattr, &lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; 0, &lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; 0, &lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; 0, &lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; STANDARD_RIGHTS_REQUIRED, &lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;0, &lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;amp;hHandle);&lt;/P&gt;&lt;P&gt;if(NT_SUCCESS(nsRet))&lt;/P&gt;&lt;P&gt;&amp;nbsp; {&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; //HANDLE 값을 이용하여 해당 DriverObject 의 Object 값을 얻는다.&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;nsRet = ObReferenceObjectByHandle(hHandle, &lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; STANDARD_RIGHTS_REQUIRED,&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;0, &lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; KernelMode, &lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; Object,&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;0);&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if(NT_SUCCESS(nsRet))&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; KdPrint(("Driver Name : %ws , DriverObject : 0x%08x\n",&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; puniStr-&amp;gt;Buffer , Object);&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;허나 이와 같은 방법보다 더 간편하고 쉽게 할 수 있는 방법이 있으니...바로 Windows Undocument API 를 이용하는 방법 입니다. 이 방법은 다음에 소개하겠습니다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;참고 자료 : 구글링으로 나온 수많은 검색 결과들...&lt;/P&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3007272888468082271-8852809105480199445?l=saicong.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://saicong.blogspot.com/feeds/8852809105480199445/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://saicong.blogspot.com/2009/08/driverobject-%EB%A5%BC-%EC%96%BB%EB%8A%94-%EB%B0%A9%EB%B2%95-12.html#comment-form' title='2개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3007272888468082271/posts/default/8852809105480199445'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3007272888468082271/posts/default/8852809105480199445'/><link rel='alternate' type='text/html' href='http://saicong.blogspot.com/2009/08/driverobject-%EB%A5%BC-%EC%96%BB%EB%8A%94-%EB%B0%A9%EB%B2%95-12.html' title='DriverObject 를 얻는 방법 1/2'/><author><name>Castlebay</name><uri>http://www.blogger.com/profile/09231852250158037381</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3007272888468082271.post-5304179722452156829</id><published>2009-08-18T13:14:00.000+09:00</published><updated>2011-01-29T22:24:31.852+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='2009 Saipan'/><category scheme='http://www.blogger.com/atom/ns#' term='여행'/><title type='text'>2009년의 시작을 아쿠아 리조트에서</title><content type='html'>&lt;script src='http://ss.textcube.com/service/blog/script/blogger.js' type='text/javascript'&gt;&lt;/script&gt;&lt;P&gt;저는 올해 1월 10일에 결혼한 아직은 신혼 부부입니다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;신혼여행지를 알아보면서 저에게는 조건이 있었습니다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;1. 사람이 많지 않은 곳&lt;/P&gt;&lt;P&gt;2. 자연을 느낄 수 있는 곳&lt;/P&gt;&lt;P&gt;3. 편하게 쉴 수 있는 곳&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;발리 , 세부 등등...신혼여행지로 이쁘고 인기 좋은 곳들도 많았지만, 반대로 생각하면 그 만큼 사람들이 많을 거라 생각하고, 구관이 명관이라했던가..전통적인 신혼여행지로 사이판을 선택했습니다&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;지역을 정했으니, 숙소를 정해야 했는데..괌이나 사이판은&amp;nbsp; PIC 가 유명하더라구요. 그러나 ! 저에게는 유명하기 때문에 탈락 ^^;&lt;/P&gt;&lt;P&gt;그러는 도중, 조용하고 편안하게 쉴 수 있는 숙소를 알아보다 &amp;nbsp;아쿠아 리조트를 알게 되었습니다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;사설이 너무 길었네요, 출발하는 비행기 안 입니다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/2/25883/attach/XdgMQAmRgD.jpg" style="width:580px;height:385px;" alt="" onclick="TC$PRIV_open_img('http://ss.textcube.com/blog/2/25883/attach/XdgMQAmRgD.jpg')" /&gt;&lt;/div&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;결혼식을 끝내고 아시아나 항공을 타고 20시경에 출발하였습니다. 제가 촌놈이라 기내식이 나오자 사진부터 찰칵~&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;이리저리 도착해서 짐 정리하고 대충 잠자리에 들려고 보니 새벽 2시 정도라서 바로 자고, 다음 날 조식을 먹기 위하여 식당으로 이동 하였습니다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/2/25883/attach/XHWG50TCDh.jpg" style="width:580px;height:385px;" alt="" onclick="TC$PRIV_open_img('http://ss.textcube.com/blog/2/25883/attach/XHWG50TCDh.jpg')" /&gt;&lt;/div&gt;&lt;/P&gt;&lt;P&gt;와이프 얼굴이 그대로 나왔군요 -_-; 퉁퉁 부었;;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;3박 5일 일정으로 지내면서, 조식은 딱히 나쁘지도, 그렇다고 우와~할 정도로 좋지는 않았지만 아침부터 만찬을 즐길 것도 아니고, 적당하게 나온 것으로 기억합니다. &lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;아쿠아 리조트의 로비 입니다. &lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/2/25883/attach/XPhc50FGma.jpg" style="width:580px;height:385px;" alt="" onclick="TC$PRIV_open_img('http://ss.textcube.com/blog/2/25883/attach/XPhc50FGma.jpg')" /&gt;&lt;/div&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/2/25883/attach/XPzAgYHaot.jpg" style="width:580px;height:871px;" alt="" onclick="TC$PRIV_open_img('http://ss.textcube.com/blog/2/25883/attach/XPzAgYHaot.jpg')" /&gt;&lt;/div&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;(저 계단 위에는 뭐가 있는지 모르겠네요; 왜 지금에서야 그게 궁금할까..;)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;관광지를 떠나기 전에, 로비의 쇼파에서 꾸벅꾸벅 졸면서 가이드분을 기다렸던 기억이 나네요 ^^;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;제가 묵었던 방은 오션뷰였습니다. 테라스에서 푸른 바다가 보이는 곳이었죠..말이 필요합니까! 사진을 보시죠~&lt;/P&gt;&lt;P&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/2/25883/attach/Xfbi2Qn3fL.jpg" style="width:580px;height:385px;" alt="" onclick="TC$PRIV_open_img('http://ss.textcube.com/blog/2/25883/attach/Xfbi2Qn3fL.jpg')" /&gt;&lt;/div&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/2/25883/attach/XXblM0SzHo.jpg" style="width:580px;height:385px;" alt="" onclick="TC$PRIV_open_img('http://ss.textcube.com/blog/2/25883/attach/XXblM0SzHo.jpg')" /&gt;&lt;/div&gt;&lt;/P&gt;&lt;P&gt;날씨도 좋고, 바다도 푸르고..여기가 딱 지상낙원이었습니다. (두번째 사진 가운데를 잘 보시면, 배 타다가 뒤집어진 분도 보이네요 ㅎㅎ);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;이제 아쿠아 리조트의 경치를 좀 더 보여드릴께요.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/2/25883/attach/XZzoz6XgST.jpg" style="width:580px;height:385px;" alt="" onclick="TC$PRIV_open_img('http://ss.textcube.com/blog/2/25883/attach/XZzoz6XgST.jpg')" /&gt;&lt;/div&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/2/25883/attach/XMwALuXrFj.jpg" style="width:580px;height:385px;" alt="" onclick="TC$PRIV_open_img('http://ss.textcube.com/blog/2/25883/attach/XMwALuXrFj.jpg')" /&gt;&lt;/div&gt;&lt;/P&gt;&lt;P&gt;우선 너무너무 이쁜 수영장 입니다. 리조트에 머물면서 가장 맘에 들었던 곳 중에 하나입니다. &lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/2/25883/attach/XC0huyDF4r.jpg" style="width:580px;height:385px;" alt="" onclick="TC$PRIV_open_img('http://ss.textcube.com/blog/2/25883/attach/XC0huyDF4r.jpg')" /&gt;&lt;/div&gt;&lt;/P&gt;&lt;P&gt;수영장에서 바라본 숙소 입니다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/2/25883/attach/XZthHUCrr0.jpg" style="width:580px;height:385px;" alt="" onclick="TC$PRIV_open_img('http://ss.textcube.com/blog/2/25883/attach/XZthHUCrr0.jpg')" /&gt;&lt;/div&gt;&lt;/P&gt;&lt;P&gt;숙소 옆에서 보트(?) 타고 바다로 나가는 곳이었던 걸로 기억하는데..사이판 바다는 멀리 나가도 바다가 매우 얕더라구요..빠져도 괜찮을 듯 해여 ^^&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/2/25883/attach/XWDwrIR4F3.jpg" style="width:580px;height:385px;" alt="" onclick="TC$PRIV_open_img('http://ss.textcube.com/blog/2/25883/attach/XWDwrIR4F3.jpg')" /&gt;&lt;/div&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/2/25883/attach/XSB8OhRssq.jpg" style="width:580px;height:871px;" alt="" onclick="TC$PRIV_open_img('http://ss.textcube.com/blog/2/25883/attach/XSB8OhRssq.jpg')" /&gt;&lt;/div&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/2/25883/attach/XdaEvo2qqg.jpg" style="width:580px;height:871px;" alt="" onclick="TC$PRIV_open_img('http://ss.textcube.com/blog/2/25883/attach/XdaEvo2qqg.jpg')" /&gt;&lt;/div&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/2/25883/attach/XOmF89S2Vg.jpg" style="width:580px;height:385px;" alt="" onclick="TC$PRIV_open_img('http://ss.textcube.com/blog/2/25883/attach/XOmF89S2Vg.jpg')" /&gt;&lt;/div&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/2/25883/attach/XGe1NwQl6c.jpg" style="width:580px;height:385px;" alt="" onclick="TC$PRIV_open_img('http://ss.textcube.com/blog/2/25883/attach/XGe1NwQl6c.jpg')" /&gt;&lt;/div&gt;&lt;/P&gt;&lt;P&gt;리조트 안에 있는 레스토랑에서 저녁 식사를 할때 찍은 사진입니다. 저녁 식사를 근사하게 먹겠다고 들어왔는데...중간에 있는 음료는 꼭 시켜야 하는 줄 알고 두개나 시켰다는...;(결국 다 먹지도 못했네요 ^^)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/2/25883/attach/XJqovWjBMS.jpg" style="width:580px;height:385px;" alt="" onclick="TC$PRIV_open_img('http://ss.textcube.com/blog/2/25883/attach/XJqovWjBMS.jpg')" /&gt;&lt;/div&gt;&lt;/P&gt;&lt;P&gt;숙소 근처 어디든지 사진 찍으면 작품이 되는 곳 입니다 ^^&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/2/25883/attach/XauozMkH5O.jpg" style="width:580px;height:385px;" alt="" onclick="TC$PRIV_open_img('http://ss.textcube.com/blog/2/25883/attach/XauozMkH5O.jpg')" /&gt;&lt;/div&gt;&lt;/P&gt;&lt;P&gt;해변가에서는 시푸드도 즐길 수 있는데, 살아있는 가재와 여러 해삼물을 즉석에서 조리해 준답니다. 정작 시푸드 사진은 없고(먹느라 정신 없었네요 ^^), 메인 요리가 제공되기 전에 나오는 코코넛 쥬스만 찍었습니다. -_-; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/2/25883/attach/XQUUDkErH1.jpg" style="width:580px;height:385px;" alt="" onclick="TC$PRIV_open_img('http://ss.textcube.com/blog/2/25883/attach/XQUUDkErH1.jpg')" /&gt;&lt;/div&gt;&lt;/P&gt;&lt;P&gt;야간에 로비에서 찍은 사진이구요..&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/2/25883/attach/XRkOt0Tqne.jpg" style="width:580px;height:385px;" alt="" onclick="TC$PRIV_open_img('http://ss.textcube.com/blog/2/25883/attach/XRkOt0Tqne.jpg')" /&gt;&lt;/div&gt;&lt;/P&gt;&lt;P&gt;제가 묵은 숙소에 들어가기 전에 있는 스파 입니다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;아래 사진은 3박5일의 짧은 일정이 끝나고, 집으로 돌아가기 전에 찍은 수영장과 로비 입니다 ^^&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/2/25883/attach/XVk3Lw3bfW.jpg" style="width:580px;height:385px;" alt="" onclick="TC$PRIV_open_img('http://ss.textcube.com/blog/2/25883/attach/XVk3Lw3bfW.jpg')" /&gt;&lt;/div&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/2/25883/attach/XN9XWsiEcs.jpg" style="width:580px;height:385px;" alt="" onclick="TC$PRIV_open_img('http://ss.textcube.com/blog/2/25883/attach/XN9XWsiEcs.jpg')" /&gt;&lt;/div&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/2/25883/attach/XcARfbg12Z.jpg" style="width:580px;height:385px;" alt="" onclick="TC$PRIV_open_img('http://ss.textcube.com/blog/2/25883/attach/XcARfbg12Z.jpg')" /&gt;&lt;/div&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/2/25883/attach/XUOLk9mWnG.jpg" style="width:580px;height:385px;" alt="" onclick="TC$PRIV_open_img('http://ss.textcube.com/blog/2/25883/attach/XUOLk9mWnG.jpg')" /&gt;&lt;/div&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/2/25883/attach/XHNEFD0TB7.jpg" style="width:580px;height:385px;" alt="" onclick="TC$PRIV_open_img('http://ss.textcube.com/blog/2/25883/attach/XHNEFD0TB7.jpg')" /&gt;&lt;/div&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/2/25883/attach/XQfpQNDRKa.jpg" style="width:580px;height:385px;" alt="" onclick="TC$PRIV_open_img('http://ss.textcube.com/blog/2/25883/attach/XQfpQNDRKa.jpg')" /&gt;&lt;/div&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;결론부터 말하자면, 아쿠아 리조트의 선택은 매우 탁월하였습니다. &lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;타 여행지와 같이 여행객으로 넘쳐나지 않고, 여유로움을 즐길 수 있으며 투숙객들에게 항상 친절했던 모든 직원들. 그리고 어디서든 느낄 수 없었던 자유..&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;이상으로 아쿠아 리조트에 대한 짤막한 이용 후기였습니다 ^^&lt;/P&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3007272888468082271-5304179722452156829?l=saicong.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://saicong.blogspot.com/feeds/5304179722452156829/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://saicong.blogspot.com/2009/08/2009%EB%85%84%EC%9D%98-%EC%8B%9C%EC%9E%91%EC%9D%84-%EC%95%84%EC%BF%A0%EC%95%84-%EB%A6%AC%EC%A1%B0%ED%8A%B8%EC%97%90%EC%84%9C.html#comment-form' title='1개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3007272888468082271/posts/default/5304179722452156829'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3007272888468082271/posts/default/5304179722452156829'/><link rel='alternate' type='text/html' href='http://saicong.blogspot.com/2009/08/2009%EB%85%84%EC%9D%98-%EC%8B%9C%EC%9E%91%EC%9D%84-%EC%95%84%EC%BF%A0%EC%95%84-%EB%A6%AC%EC%A1%B0%ED%8A%B8%EC%97%90%EC%84%9C.html' title='2009년의 시작을 아쿠아 리조트에서'/><author><name>Castlebay</name><uri>http://www.blogger.com/profile/09231852250158037381</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3007272888468082271.post-1639667891502015865</id><published>2009-08-12T12:47:00.000+09:00</published><updated>2011-01-29T22:24:31.762+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='여행'/><category scheme='http://www.blogger.com/atom/ns#' term='2009 Japan'/><title type='text'>우산인가 양산인가</title><content type='html'>&lt;script src='http://ss.textcube.com/service/blog/script/blogger.js' type='text/javascript'&gt;&lt;/script&gt;&lt;P&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/2/25883/attach/XVFBakQDvo.jpg" style="width:580px;height:724px;" alt="" onclick="TC$PRIV_open_img('http://ss.textcube.com/blog/2/25883/attach/XVFBakQDvo.jpg')" /&gt;&lt;/div&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;일본 도깨비 여행중 한낮에 길거리에서 본 여인이다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;꽤나 더운 날임에도 불구하고, 검은색 옷을 입은 멋쟁이 언니.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;우산인가 양산인가?&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;내가 패션을 이해 못하는 것인가...&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3007272888468082271-1639667891502015865?l=saicong.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://saicong.blogspot.com/feeds/1639667891502015865/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://saicong.blogspot.com/2009/08/%EC%9A%B0%EC%82%B0%EC%9D%B8%EA%B0%80-%EC%96%91%EC%82%B0%EC%9D%B8%EA%B0%80.html#comment-form' title='3개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3007272888468082271/posts/default/1639667891502015865'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3007272888468082271/posts/default/1639667891502015865'/><link rel='alternate' type='text/html' href='http://saicong.blogspot.com/2009/08/%EC%9A%B0%EC%82%B0%EC%9D%B8%EA%B0%80-%EC%96%91%EC%82%B0%EC%9D%B8%EA%B0%80.html' title='우산인가 양산인가'/><author><name>Castlebay</name><uri>http://www.blogger.com/profile/09231852250158037381</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3007272888468082271.post-2373689693627561663</id><published>2009-08-11T16:21:00.000+09:00</published><updated>2011-01-29T22:24:31.647+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PID'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='Tips'/><category scheme='http://www.blogger.com/atom/ns#' term='HANDLE'/><title type='text'>PID 를 이용한 핸들을 얻는 방법</title><content type='html'>&lt;P&gt;특정 프로세서가 종료가 되어야만 다음 단계로 실행시켜야 하는 경우가 있는데..이럴경우에 특정 프로세서에 대한 정보가 없으면 난감하다.알고 있는건 단지 파일 이름일 뿐...&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;이 상황을 극복하기 위해서 사용한 방법은,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;1. 파일 이름을 통한&amp;nbsp; PID를 구한다.&lt;/P&gt;&lt;P&gt;2. PID를 통하여 핸들을 얻는다&lt;/P&gt;&lt;P&gt;3. 핸들이 종료되는걸 감지한다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;이와같은 방법을 하기 위해서 아래와 같은 코드를 구현하게 되었다.&lt;/P&gt;&lt;P&gt;void ListProcess(void)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;PROCESSENTRY32 pe32;&lt;br /&gt;&amp;nbsp;BOOL bFind = FALSE;&lt;br /&gt;&amp;nbsp;HANDLE hSnapshot = NULL;&lt;br /&gt;&amp;nbsp;hSnapshot&amp;nbsp; = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);&lt;br /&gt;&amp;nbsp;pe32.dwSize = sizeof(PROCESSENTRY32);&lt;br /&gt;&amp;nbsp;BOOL bContinue = Process32First(hSnapshot,&amp;amp;pe32);&lt;/P&gt;&lt;P&gt;&amp;nbsp;while(bContinue)&amp;nbsp; //구하길 원하는 파일이 나올때까지 첨부터 끝까지 돈다.&lt;br /&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp; if(!strcmp(pe32.szExeFile,"PID를 구하고자 하는 파일 이름"))&lt;br /&gt;&amp;nbsp; {&lt;br /&gt;&amp;nbsp; &amp;nbsp;bFind = TRUE;&lt;br /&gt;&amp;nbsp; &amp;nbsp;break;&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;&amp;nbsp; bContinue = Process32Next(hSnapshot,&amp;amp;pe32);&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;CloseHandle(hSnapshot);&lt;br /&gt;&amp;nbsp;//위의 함수에서 파일 이름이 구해졌다면(즉, 원하는 파일이 실행중임을 알았고, 정보를 얻었다면)&lt;br /&gt;&amp;nbsp;if(bFind)&lt;br /&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp; HANDLE hApp = NULL;&lt;br /&gt;&amp;nbsp; //OpenProcess 함수를 통하여 해당 PID 에 대한 핸들을 구해온다.&lt;br /&gt;&amp;nbsp; hApp = OpenProcess(PROCESS_ALL_ACCESS, false,pe32.th32ProcessID);&lt;br /&gt;&amp;nbsp; //구해온 핸들에 대하여 무한정 대기상태로 있다가, 핸들이 종료되면 함수를 빠져나간다.&lt;br /&gt;&amp;nbsp; WaitForSingleObject(hApp, INFINITE);&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;}&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;c.f) 이와 반대로 핸들을 알고 있는데 PID 를 구해야 하는 경우라면 아래의 함수를 사용하면 된다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;DWORD GetWindowThreadProcessId( &amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp; &amp;nbsp; HWND hWnd,&lt;br /&gt;&amp;nbsp; &amp;nbsp; LPDWORD lpdwProcessId&lt;br /&gt;);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;DWORD dwpid = GetWindowThreadProcessId(hWnd,&amp;amp;pid);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;별거 아니지만 찾으려면 이것도 일..&lt;br /&gt;&lt;/P&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3007272888468082271-2373689693627561663?l=saicong.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://saicong.blogspot.com/feeds/2373689693627561663/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://saicong.blogspot.com/2009/08/pid-%EB%A5%BC-%EC%9D%B4%EC%9A%A9%ED%95%9C-%ED%95%B8%EB%93%A4%EC%9D%84-%EC%96%BB%EB%8A%94-%EB%B0%A9%EB%B2%95.html#comment-form' title='2개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3007272888468082271/posts/default/2373689693627561663'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3007272888468082271/posts/default/2373689693627561663'/><link rel='alternate' type='text/html' href='http://saicong.blogspot.com/2009/08/pid-%EB%A5%BC-%EC%9D%B4%EC%9A%A9%ED%95%9C-%ED%95%B8%EB%93%A4%EC%9D%84-%EC%96%BB%EB%8A%94-%EB%B0%A9%EB%B2%95.html' title='PID 를 이용한 핸들을 얻는 방법'/><author><name>Castlebay</name><uri>http://www.blogger.com/profile/09231852250158037381</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry></feed>
