Windows 7 ±â¹Ý ¶Ç´Â Windows Server 2008 R2 ±â¹Ý ÄÄÇ»ÅÍ¿¡¼­ ÆÇµ¶±â¿¡¼­ ½º¸¶Æ® Ä«µå¸¦ »ðÀÔÇÒ ¶§ ¿À·ù ¸Þ½ÃÁö: "ÀåÄ¡ µå¶óÀ̹ö ¼ÒÇÁÆ®¿þ¾î°¡ ¼º°øÀûÀ¸·Î ¼³Ä¡µÇÁö ¾ÊÀº"

±â¼ú ÀÚ·á: 976832 - ÀÌ ¹®¼­°¡ Àû¿ëµÇ´Â Á¦Ç° º¸±â.
¸ðµÎ È®´ë | ¸ðµÎ Ãà¼Ò

ÀÌ ÆäÀÌÁö¿¡¼­

Çö»ó

½º¸¶Æ® Ä«µå ÆÇµ¶±â¿¡ ½º¸¶Æ® Ä«µå¸¦ »ðÀÔÇϸé Windows ´Ù¿î·Îµå ¹× ¼³Ä¡ PnP ¼­ºñ½º¸¦ ÅëÇØ Ä«µå ½º¸¶Æ® Ä«µå minidrivers ½ÃµµÇÕ´Ï´Ù. Windows ¾÷µ¥ÀÌÆ®, WSUS, ¶Ç´Â ÀÎÆ®¶ó³Ý °æ·Î °°Àº ¹Ì¸® ±¸¼ºµÈ À§Ä¡¸¦ ¶§ ½º¸¶Æ® Ä«µå µå¶óÀ̹ö¸¦ »ç¿ëÇÒ ¼ö ¾ø´Â »ç¿ëÀÚ ÁöÁ¤ ¾Ïȣȭ ¼­ºñ½º °ø±ÞÀÚ°¡ ½Ã½ºÅÛ¿¡ ÀÌ¹Ì ¼³Ä¡µÈ °æ¿ì, ¾Ë¸² ¿µ¿ª¿¡ ´ÙÀ½°ú °°Àº ¿À·ù ¸Þ½ÃÁö°¡ ³ªÅ¸³³´Ï´Ù.
ÀåÄ¡ µå¶óÀ̹ö ¼ÒÇÁÆ®¿þ¾î°¡ Á¦´ë·Î ¼³Ä¡µÇÁö ¾Ê¾Ò½À´Ï´Ù.
ÀÚ¼¼ÇÑ ³»¿ëÀº ¿©±â¸¦ Ŭ¸¯ÇϽʽÿÀ.
ÀÌ ¿À·ù ¸Þ½ÃÁö°¡ ¸î ÃÊ ÈÄ¿¡ »ç¶óÁý´Ï´Ù.

¶ÇÇÑ ÀåÄ¡ °ü¸®ÀÚ¿¡¼­ ±âŸ ÀåÄ¡ ¾Æ·¡¿¡ ½º¸¶Æ® Ä«µå ÀåÄ¡ »óŸ¦ "DNF" µå¶óÀ̹ö ãÀ» ¼ö ÀÖ½À´Ï´Ù.

´ÙÀ½ Ç׸ñ Áß Çϳª¸¦ ÀÌ ¿À·ù¸¦ ÇØ°áÇÏ·Á¸é ½º¸¶Æ® Ä«µå ¹ß±ÞÀڷκÎÅÍ ¾ò±â À§ÇØ »ç¿ëÀÚ°¡ ÀÚÁÖ ÇÊ¿äÇÕ´Ï´Ù.
  1. Windows ½º¸¶Æ® Ä«µå logoed minidriver
  2. »ç¿ëÀÚ ÁöÁ¤ ¾Ïȣȭ ¼­ºñ½º °ø±ÞÀÚ (CSP) ½º¸¶Æ® Ä«µå.
  3. Windows ½º¸¶Æ® Ä«µå logoed ¾ÊÀº minidriver
  4. ActiveX ÄÁÆ®·Ñ, PKCS # 11 ¼ÒÇÁÆ®¿þ¾î ¶Ç´Â ´Ù¸¥ »ç¿ëÀÚ ÁöÁ¤ ¼ÒÇÁÆ®¿þ¾î °°Àº ´Ù¸¥ ¹Ìµé¿þ¾î.
±×·¯³ª »ç¿ëÀÚ°¡ 3 ¶Ç´Â 4ÀÌ ÀÌ ¸ñ·Ï¿¡ ÀÖ´Â Ç׸ñ¸¸ ÇÔ²² Á¦°øµÇ´Â °æ¿ì, ½º¸¶Æ® Ä«µå¸¦ ½Ã½ºÅÛ¿¡ °è¼Ó ÀÛµ¿ÇÕ´Ï´Ù. ±×·¯³ª »ç¿ëÀÚ°¡ ½º¸¶Æ® Ä«µå¸¦ »ðÀÔÇÒ ¶§¸¶´Ù°¡ ÀÌ Àý¿¡¼­ ¼³¸íÇÑ ¿À·ù ¸Þ½ÃÁö°¡ ³ªÅ¸³³´Ï´Ù.

ÀÌ ¹®Á¦´Â Windows 7, Windows Server 2008 R2 À̻󿡼­ µÎ ¿î¿µ üÁ¦ÀÇ ¸±¸®½º¸¦ ¸ðµÎ ¿µÇâÀ» ÁÝ´Ï´Ù.

¿øÀÎ

¸ðµç ½º¸¶Æ® Ä«µå¸¦ °æ¿ì°¡ ¾Æ´Ï¶ó¸é »ç¿ëÀÚ°¡ Ãß°¡ ¼ÒÇÁÆ®¿þ¾î¸¦ ¼³Ä¡ÇÏÁö ¾Ê°í Ä«µå¸¦ »ç¿ëÇÒ ¼ö ÀÖµµ·Ï Á¦°ø µå¶óÀ̹ö¸¦ WindowsÀÇ ÀÛµ¿Çϵµ·Ï Ãß°¡ ¼ÒÇÁÆ®¿þ¾î°¡ ÇÊ¿äÇÕ´Ï´Ù. Windows ½º¸¶Æ® Ä«µå ÇÁ·¹ÀÓ¿öÅ© ½º¸¶Æ® Ä«µå ÆÇµ¶±â¿¡ ³ÖÀ¸¸é ÀÚµ¿ ½º¸¶Æ® Ä«µå minidrivers Windows Update ¶Ç´Â WSUS ¼­¹ö¿Í °°Àº ´Ù¸¥ À¯»çÇÑ À§Ä¡¿¡¼­ ´Ù¿î·ÎµåÇÒ ¼ö ÀÖµµ·Ï Windows 7 ¿¡¼­ Çâ»óµÈ ¾Ê¾Ò½À´Ï´Ù. ¼º°øÀûÀ¸·Î Windows ·Î°í ÇÁ·Î±×·¥¿¡ ÀÇÇØ °Ô½ÃµÈ ·Î°í ¿ä±¸ »çÇ×À» Àü´ÞÇÒ ¸ðµç ½º¸¶Æ® Ä«µå´Â ÀÌ ±â´ÉÀ» Ȱ¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù.

±×·¯³ª Windows¿¡¼­ ½º¸¶Æ® Ä«µå¸¦ »ç¿ëÇÏ´Â µ¥ ÇÊ¿äÇÑ ¼ÒÇÁÆ®¿þ¾î logoed ¶Ç´Â minidriver, PKCS # 11 µå¶óÀ̹ö, »ç¿ëÀÚ ÁöÁ¤ CSP, ¹Ìµé¿þ¾î, ActiveX ÄÁÆ®·Ñ µîÀÇ ´Ù¸¥ Çü½ÄÀÎ °æ¿ì À¯ÀÏÇÑ ½º¸¶Æ® Ä«µå minidrivers Microsoft ÀÖµµ·Ï ÀÎÁõÇÕ´Ï´Ù ¶§¹®¿¡ ÀÚµ¿ ´Ù¿î·Îµå ¿É¼ÇÀ» ½ÇÆÐÇÕ´Ï´Ù. µû¶ó¼­ »ç¿ëÀÚ´Â ±âº»°ª¸¸ Ä«µå¿¡ ¾ø´Â »ç¿ëÀÚ ÁöÁ¤ CSP ÀÌ¹Ì µî·ÏµÇ¾î ÀÖÁö ¾ÊÀ¸¸é, »ç¿ëÀÚ°¡ »ç¿ëÀÚ ÁöÁ¤ ¼³Ä¡¸¦ ÅëÇØ »ç¿ëÀÚ ÄÄÇ»ÅÍ¿¡ ¼³Ä¡µÈ Ãß°¡ ¼ÒÇÁÆ®¿þ¾î¸¦ ÅëÇØ ½º¸¶Æ® Ä«µå¸¦ »ç¿ëÇÒ ¼ö ÀÖÁö¸¸ µå¶óÀ̹ö ¼ÒÇÁÆ®¿þ¾î¸¦ ½º¸¶Æ® Ä«µå ÀåÄ¡ÀÇ ´©¶ôµÈ ³»¿ëÀÇ ¿À·ù ¸Þ½ÃÁö°¡ ¹Þ½À´Ï´Ù.

ÇØ°á ¹æ¹ý

½º¸¶Æ® Ä«µå¸¦ ºÒ±¸ÇÏ°í »ç¿ëÀÚ¿¡°Ô Ç¥½ÃµÇ´Â ¿À·ù ¸Þ½ÃÁö°¡ °è¼Ó »ç¿ëÇÒ ¼ö ÀÖÁö¸¸, ½º¸¶Æ® Ä«µå ¹ß±ÞÀÚ, °ø±Þ¾÷ü ¶Ç´Â Á¦Á¶¾÷ü¿¡ ´ÙÀ½ ¹æ¹ý Áß Çϳª¸¦ ÀÌ ¿À·ù¸¦ ÇØ°áÇÒ ¼ö ÀÖ½À´Ï´Ù.

½º¸¶Æ® Ä«µå minidriver ±¸Çö

Ä«µå ¹ß±ÞÀÚ, °ø±Þ¾÷ü ¹× Á¦Á¶¾÷ü¿¡¼­ ½º¸¶Æ® Ä«µå minidrivers ±¸Çö ¹× ½º¸¶Æ®Ä«µå Ç÷¯±× ¾Ø Ç÷¹ÀÌ ½º¸¶Æ® Ä«µå ÀåÄ¡ ´Ü°è °°Àº Ç÷§ÆûÀÌ µµÀÔµÈ Çâ»óµÈ ±â´ÉÀ» Ȱ¿ëÇÒ ¼ö ÀÖ´Â Windows ·Î°í ÇÁ·Î±×·¥ÀÇ Âü¿©ÇÒ ÁÁ½À´Ï´Ù ÀÖ½À´Ï´Ù.

Windows ½º¸¶Æ® Ä«µå minidriver »ç¾ç¿¡ ´ëÇÑ ÀÚ¼¼ÇÑ ³»¿ëÀº ´ÙÀ½ Microsoft À¥ »çÀÌÆ®¸¦ ¹æ¹®ÇϽʽÿÀ.
http://www.microsoft.com/whdc/device/input/smartcard/sc-minidriver.mspx
½º¸¶Æ® Ä«µå minidrivers ·Î°í ¾ò´Â ÇÁ·Î¼¼½º¸¦ ½ÃÀÛÇÏ´Â ¹æ¹ý¿¡ ´ëÇÑ ÀÚ¼¼ÇÑ ³»¿ëÀº ´ÙÀ½ Windows ·Î°í ÇÁ·Î±×·¥ À¥ »çÀÌÆ®¸¦ ¹æ¹®ÇϽʽÿÀ.
http://www.microsoft.com/whdc/winlogo/default.mspx

NULL µå¶óÀ̹ö¸¦ ½º¸¶Æ® Ä«µå ±¸Çö

»ç¿ëÀÚ ÁöÁ¤ ¼ÒÇÁÆ®¿þ¾î PKCS # 11 µå¶óÀ̹ö, ActiveX ÄÁÆ®·Ñ ¶Ç´Â ±âŸ ¹Ìµé¿þ¾î Windows, ½º¸¶Æ® Ä«µå¸¦ »ç¿ëÇÒ ¼ö ÀÖµµ·Ï ÇÊ¿äÇÑ ½º¸¶Æ® Ä«µå minidriver ¶Ç´Â »ç¿ëÀÚ ÁöÁ¤ CSP ±¸Çö ½Ç¿ëÀûÀÎ ¿É¼ÇÀÌ ¾Æ´Ñ °æ¿ì Ä«µå ¹ß±ÞÀÚ, °ø±Þ¾÷ü ¶Ç´Â Á¦Á¶¾÷ü´Â NULL µå¶óÀ̹ö¸¦ Windows Update Á¦ÃâÇÏ´Â °í·ÁÇÏ´Â °ÍÀÌ ÁÁ½À´Ï´Ù. Winqual ÅëÇØ ¼º°øÀûÀÎ ±¸ºÐµÇÁö ¾ÊÀº ÀåÄ¡ Á¦ÃâÀ» ÀϹÝÀûÀÎ ÇÁ·Î¼¼½º¿¡ ´ëÇØ NULL µå¶óÀ̹ö¸¦ Windows Update¸¦ »ç¿ëÇÒ ¼ö ÀÖ´ÂÁö È®ÀÎÇØ¾ß ÇÕ´Ï´Ù. ¾ÕÀ¸·Î ÀÖÀ» °æ¿ì, minidriver ÀÌ·¯ÇÑ Ä«µå¸¦ »ç¿ëÇÒ ¼ö, »õ µå¶óÀ̹ö°¡ Windows ·Î°í ÇÁ·Î±×·¥¿¡ Âü¿©ÇÏ´Â Windows Update¿Í ¾÷·ÎµåÇÒ ¼ö ÀÖ½À´Ï´Ù. NULL µå¶óÀ̹ö¸¦ ÅëÇØ ÃÖÁ¾ »ç¿ëÀÚ´Â ´ÙÀ½ ¼öµ¿À¸·Î ´Ù¿î·ÎµåÇÒ ¼ö ¶Ç´Â ¼±ÅÃÀû ¾÷µ¥ÀÌÆ®¸¦ »ç¿ëÇÏ¿© »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù.

´ÙÀ½ ¿¹Á¦ ¼­½Ä ÆÄÀÏÀ» ½º¸¶Æ® Ä«µå
;
; Null Driver for Fabrikam Smartcard installation x86 and x64 package.
;

[Version]
Signature="$Windows NT$"
Class=SmartCard
ClassGuid={990A2BD7-E738-46c7-B26F-1CF8FB9F1391}
Provider=%ProviderName%
CatalogFile=delta.cat
DriverVer=4/21/2006,1.0.0.0

[Manufacturer]
%ProviderName%=Minidriver,NTamd64,NTamd64.6.1,NTx86,NTx86.6.1

[Minidriver.NTamd64]
;This driver has no applicability on OS versions earlier than Windows 7

[Minidriver.NTx86]
;This driver has no applicability on OS versions earlier than Windows 7


[Minidriver.NTamd64.6.1]
%CardDeviceName%=Minidriver64_Install,<DEVICE_ID>
;%CardDeviceName%=Minidriver64_Install,<DEVICE_ID2>
;%CardDeviceName%=Minidriver64_Install,<DEVICE_ID3>
;...

[Minidriver.NTx86.6.1]
%CardDeviceName%=Minidriver32_Install,<DEVICE_ID>
;%CardDeviceName%=Minidriver32_Install,<DEVICE_ID2>
;%CardDeviceName%=Minidriver32_Install,<DEVICE_ID3>
;...


;Leave the following sections blank
[DefaultInstall]
[DefaultInstall.ntamd64]
[DefaultInstall.NTx86]
[DefaultInstall.ntamd64.6.1]
[DefaultInstall.NTx86.6.1]
[Minidriver64_Install.NT]
[Minidriver64_61_Install.NT]
[Minidriver32_Install.NT]
[Minidriver32_61_Install.NT]


[Minidriver64_61_Install.NT.Services]
AddService = ,2

[Minidriver32_61_Install.NT.Services]
AddService = ,2


; =================== Generic ==================================

[Strings]
ProviderName ="Microsoft"
CardDeviceName="Fabrikam Generic Smart card"
»ùÇÃÀº DEVICE_ID ¹®ÀÚ¿­¿¡¼­ ÂüÁ¶ÇÏ´Â Çϵå¿þ¾î ÀåÄ¡ ID¸¦ »ý¼ºÇϱâ À§ÇØ ½º¸¶Æ® Ä«µå minidriver »ç¾çÀ» Áö½Ã¸¦ µû¸¨´Ï´Ù. ÀÌ·¸°Ô ÇÏ·Á¸é ´ÙÀ½ Microsoft À¥ »çÀÌÆ®¸¦ ¹æ¹®ÇϽʽÿÀ.
http://www.microsoft.com/whdc/device/input/smartcard/sc-minidriver.mspx


NULL µå¶óÀ̹ö¸¦ Microsoft¿¡ Á¦ÃâÇÏ´Â ¹æ¹ý¿¡ ´ëÇÑ ÀÚ¼¼ÇÑ ³»¿ëÀº Microsoft °í°´±â¼úÁö¿øºÎ¿¡ ¹®ÀÇÇϽʽÿÀ.

°ü¸®µÇ´Â ÄÄÇ»ÅÍ¿¡ ´ëÇÑ ±×·ì Á¤Ã¥À» ÅëÇØ ½º¸¶Æ®Ä«µå Ç÷¯±× ¾Ø Ç÷¹ÀÌ »ç¿ë ¾È ÇÔ

ÀÌ ¿É¼ÇÀº °ü¸®ÀÚ ¹× SMS¿Í °°Àº ¼ÒÇÁÆ®¿þ¾î °ü¸® µµ±¸¸¦ »ç¿ëÇÏ¿© ±â¾÷¿¡¼­ »ç¿ëµÇ´Â ½º¸¶Æ® Ä«µå¿Í ÇÔ²² ÀÛµ¿Çϵµ·Ï ÇÊ¿äÇÑ ¼ÒÇÁÆ®¿þ¾î°¡ ¼³Ä¡µÈ ¸ðµç ÄÄÇ»ÅÍ´Â °ü¸®µÇ´Â ¿£ÅÍÇÁ¶óÀÌÁî ¹èÆ÷¸¦ »ç¿ëÇÏ´Â °ÍÀÌ ÁÁ½À´Ï´Ù.

»ç¿ëÀÚ È¯°æÀÇ ¸ðµç ½º¸¶Æ® Ä«µå¸¦ ¿µÇâÀ» ÁֹǷΠÀÌ ÀýÂ÷¸¦ ´ÙÀ½°ú °°Àº ȯ°æ¿¡¼­ ÁÁ½À´Ï´Ù.
  • ¿Â¶óÀÎ ¹ðÅ· µî ÃÖÁ¾ »ç¿ëÀÚ¸¦ ´ë»óÀ¸·Î »ó¿ë ¹èÆ÷
  • µÑ ´Ù Æ÷ÇÔÇÒ È¯°æ¿¡¼­ Ç÷¯±× ¾Ø Ç÷¯±× ¾Ø Ç÷¹ÀÌ ½º¸¶Æ® Ä«µå »ç¿ë ¾È ÇÔ ±×·ì Á¤Ã¥À» »ç¿ëÇÏ¿© ºñ Ç÷¯±× ¾Ø Ç÷¹ÀÌ ½º¸¶Æ® Ä«µå ¹× ½º¸¶Æ® Ä«µå Ç÷¹ÀÌ
ÃÖÁ¾ »ç¿ëÀÚÀÇ ÄÄÇ»ÅÍ¿¡ ±×·ì Á¤Ã¥ °°Àº ¸ÞÄ¿´ÏÁòÀ» ÅëÇØ °ü¸®µÇ´Â ±â¾÷¿¡¼­ ½º¸¶Æ®Ä«µå PnP ¿ÏÀüÈ÷ ºñȰ¼ºÈ­ÇÒ ¼ö ÀÖ½À´Ï´Ù.

ºñ Ç÷¯±× ¾Ø Ç÷¹ÀÌ ½º¸¶Æ® Ä«µå ¼Ö·ç¼Ç ¹èÆ÷¸¦ »ç¿ëÇÏ´Â °æ¿ì Ŭ¶óÀÌ¾ðÆ® ÄÄÇ»ÅÍ¿¡¼­ ·ÎÄà °ü¸®ÀÚ¿¡ ÀÇÇØ ½º¸¶Æ®Ä«µå PnP ÇØÁ¦ÇÒ ¼ö ÀÖ½À´Ï´Ù. Ç÷¯±× ¾Ø Ç÷¹ÀÌ ½º¸¶Æ® Ä«µå »ç¿ë ¾È ÇÔ (½º¸¶Æ® Ä«µå minidrivers ½º¸¶Æ® Ä«µå µå¶óÀ̹ö¸¦ ´Ù¿î·ÎµåÇÒ ¼ö ¾ø½À´Ï´Ù. ¶ÇÇÑ ½º¸¶Æ® Ä«µå PnP ÇÁ·ÒÇÁÆ®¸¦ ¹æÁöÇÒ ¼ö ÀÖ½À´Ï´Ù.

·ÎÄà ±×·ì Á¤Ã¥¿¡¼­ Ç÷¯±× ¾Ø Ç÷¹ÀÌ ½º¸¶Æ® Ä«µå »ç¿ëÇÏÁö ¾Êµµ·Ï ¼³Á¤ÇÏ·Á¸é ´ÙÀ½ ÀÌ ´Ü°è¸¦ ¼öÇàÇϽʽÿÀ.
  1. ½ÃÀÛ À» ´©¸£°í, gpedit.msc°Ë»ö ÇÁ·Î±×·¥ ¹× ÆÄÀÏ »óÀÚ¿¡ ÀÔ·ÂÇÑ ´ÙÀ½ Enter ۸¦ ´©¸¨´Ï´Ù.
  2. ÄÜ¼Ö Æ®¸®ÀÇ ÄÄÇ»ÅÍ ±¸¼º¿¡¼­°ü¸® ÅÛÇø´ À» Ŭ¸¯ÇϽʽÿÀ.
  3. ¼¼ºÎ Á¤º¸ â¿¡¼­ Windows ±¸¼º ¿ä¼Ò, µÎ ¹ø Ŭ¸¯ÇÑ ´ÙÀ½ ½º¸¶Æ® Ä«µå µÎ ¹ø Ŭ¸¯ÇϽʽÿÀ.
  4. ½º¸¶Æ® Ä«µå Ç÷¯±× ¾Ø Ç÷¹ÀÌ ¼­ºñ½º »ç¿ë À» ¸¶¿ì½º ¿À¸¥ÂÊ ´ÜÃ߷ΠŬ¸¯ÇÑ ´ÙÀ½ ÆíÁý À» Ŭ¸¯ÇϽʽÿÀ.
  5. »ç¿ë ¾È ÇÔ À» Ŭ¸¯ÇÑ ´ÙÀ½ È®ÀÎ À» Ŭ¸¯ÇϽʽÿÀ.

ÃÖÁ¾ »ç¿ëÀÚÀÇ ½Ã½ºÅÛ º¯°æÇÏ°í Æ¯Á¤ Ä«µå¿¡ ´ëÇÑ Ç÷¯±× ¾Ø Ç÷¹ÀÌ ½º¸¶Æ® Ä«µå »ç¿ë ¾È ÇÔ

ÀÌ ¿É¼ÇÀº ÃÖ¼Ò ±ÇÀå ¿É¼ÇÀÔ´Ï´Ù. ·¹°Å½Ã Ä«µå¸¦ Ä«µåÀÔ´Ï´Ù ÇâÈÄ ½º¸¶Æ® Ä«µå minidrivers ±¸ÇöÇÒ °èȹÀÌ ¾ø½À´Ï´Ù °æ¿ì ÀÌ ¿É¼ÇÀ» »ç¿ëÇØ¾ß ÇÕ´Ï´Ù. ÀÌ ¿É¼ÇÀº ½Ã½ºÅÛ¿¡ ÀÌ¹Ì ¼³Ä¡µÈ ±âÁ¸ ¼ÒÇÁÆ®¿þ¾î ÃÖÁ¾ »ç¿ëÀÚ ½Ã½ºÅÛ¿¡ ÀÌ·¯ÇÑ CSP Á¸ÀçÇÏ´Â °æ¿ì¿¡µµ ½Ã½ºÅÛ¿¡ ¼³Ä¡µÈ »ç¿ëÀÚ ÁöÁ¤ CSP°¡ Windows¿¡¼­ ¾Ë·Á ÇÊ¿äÇÕ´Ï´Ù. Windows ½Ã½ºÅÛ¿¡ ÀÌ¹Ì ¼³Ä¡µÈ »ç¿ëÀÚ ÁöÁ¤ CSP °áÁ¤ÇÕ´Ï´Ù Áï½Ã ´Ù¿î·Îµå ¹× ½º¸¶Æ®Ä«µå PnP ÅëÇØ µå¶óÀ̹ö¸¦ ¼³Ä¡ÇÒ Windows ½ÃµµÇÏÁö ¾Ê½À´Ï´Ù. ½º¸¶Æ® Ä«µå ÀåÄ¡ÀÇ ÀåÄ¡ ³ëµå°¡ ÀåÄ¡ °ü¸®ÀÚ¿¡ Ç¥½ÃµÇ´Â ¸¸µé¾îÁý´Ï´Ù. ÀÌ ¿É¼ÇÀº ½Ã½ºÅÛ ·¹Áö½ºÆ®¸®¿¡ ´ÙÀ½ º¯°æ ³»¿ëÀ» °á°ú:

ÇÏÀ§ Ű:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Cryptography\Calais\SmartCards\<Smart card name>
·¹Áö½ºÆ®¸® Ç׸ñÀ» ÇÏÀ§ Ű:
  • ATR 16Áø¼ö DWORD =: ½º¸¶Æ® Ä«µå ATR ½°Ç¥·Î ±¸ºÐµË´Ï´Ù.
  • ATRMask 16Áø¼ö DWORD =: ÇØ´ç ATR ÀÇ¹Ì ¾ø´Â ¹ÙÀÌÆ® out ¸¶½ºÅ©¿Í ATR Àû¿ëÇÏ·Á¸é ¸¶½ºÅ© ½°Ç¥·Î ±¸ºÐµÈ.
  • ¾Ïȣȭ °ø±ÞÀÚ = ¹®ÀÚ¿­ °ª: ½º¸¶Æ® Ä«µåÀÇ °ü·Ã ÀϺΠ¹®ÀÚ¿­ÀÔ´Ï´Ù.
¿¹¸¦ µé¸é:
ÇÏÀ§ Ű:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Cryptography\Calais\SmartCards\Fabrikam ATM card
·¹Áö½ºÆ®¸® Ç׸ñÀ» ÇÏÀ§ Ű:
  • ATR 16Áø¼ö DWORD =: 3b, dc, 13, 00, 40, 3a, 49, 54, 47, 32, 4 d, 53, 43 53, 50, 5f, 56, 5f
  • ATRMask 16Áø¼ö DWORD =: ff, ff, ff, ff, ff, ff, ff, ff, ff, ff, ff, ff, ff, ff, ff, ff, ff, ff
  • ¾Ïȣȭ °ø±ÞÀÚ = ¹®ÀÚ¿­ °ª: "Fabrikam ATM ´õ¹Ì °ø±ÞÀÚ"
x 64 ºñÆ® ½Ã½ºÅÛ µ¿ÀÏÇÑ ´ÙÀ½ ÇÏÀ§ Ű ¾Æ·¡¿¡ º¯°æÇØ¾ß ÇÕ´Ï´Ù.
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Cryptography\Calais\SmartCards


½Ã½ºÅÛ ·¹Áö½ºÆ®¸®¸¦ Á÷Á¢ º¯°æÇÏ´Â ´ë½Å WinSCard API ½Ã½ºÅÛ¿¡ ÀÌ·¯ÇÑ º¯°æ ³»¿ëÀ» ¼Ò°³ÇÏ´Â »ç¿ëÇÏ¿© °ÍÀÌ ÁÁ½À´Ï´Ù. ½º¸¶Æ® Ä«µå »ðÀÔ °Ë»öÇÏ°í ´ÙÀ½ Ä«µå¸¦ Á¸ÀçÇÏÁö °ø±ÞÀÚ¿¡ ¿¬°áÇÏ´Â ·¹Áö½ºÆ®¸® Ç׸ñÀ» ¸¸µé¾î ƯÁ¤ Ä«µå¿¡ ´ëÇÑ Ç÷¯±× ¾Ø Ç÷¹ÀÌ ½º¸¶Æ® Ä«µå ºñȰ¼ºÈ­ÇÕ´Ï´Ù »ùÇà ÄÚµå ¿¹Á¦´Â ´ÙÀ½°ú °°½À´Ï´Ù.

Microsoft´Â ¹¬½ÃÀûÀÎ º¸Áõ ¾øÀÌ ¸ñÀûÀ¸·Î¸¸ ÇÁ·Î±×·¡¹Ö ¿¹Á¦¸¦ Á¦°øÇÕ´Ï´Ù. ÀÌ Æ÷ÇÔµÇÁö¸¸, »óǰ¼º ¶Ç´Â ƯÁ¤ ¸ñÀû¿¡ÀÇ ÀûÇÕ¼º¿¡ ´ëÇÑ ¹¬½ÃÀûÀÎµÈ º¸ÁõÀÌ Á¦ÇѵÇÁö ¾Ê½À´Ï´Ù. ÀÌ ¹®¼­¿¡¼­´Â ¸¸µé·Á¸é ¹× ÇÁ·Î½ÃÀú¸¦ µð¹ö±ëÇÏ´Â µ¥ »ç¿ëµÇ´Â µµ±¸ ¹× ¿©±â¼­ ¼³¸íÇÏ´Â ÇÁ·Î±×·¡¹Ö ¾ð¾î¿¡ Àͼ÷ÇÑ »ç¿ëÀÚ¸¦ ´ë»óÀ¸·Î ÇÕ´Ï´Ù. Microsoft Áö¿ø ¿£Áö´Ï¾î´Â ƯÁ¤ ÀýÂ÷¿¡ ´ëÇÑ ±â´ÉÀ» ¼³¸íÇÒ ¼ö ÀÖ½À´Ï´Ù. ±×·¯³ª ÀÌ·¯ÇÑ Ãß°¡ ±â´ÉÀ» Á¦°øÇϰųª ƯÁ¤ ¿ä±¸ »çÇ׿¡ ¸Âµµ·Ï ÇÁ·Î½ÃÀú¸¦ ±¸¼ºÇÏÁö´Â ÀÌ ¿¹Á¦¸¦ ¼öÁ¤ÇÏ¿©Áö ¾Ê½À´Ï´Ù.
//==============================================================;
//
//  Disable Smart card Plug and Play for specific cards
//
//  Abstract:
//      This is an example of how to create a new
//      Smart Card Database entry when a smart card is inserted
//      into the computer.
//
//  This source code is only intended as a supplement to existing Microsoft
//  documentation.
//
//  THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY
//  KIND, EITHER EXPRESSED OR IMPLIED. THIS INCLUDES BUT NOT LIMITED TO THE
//  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
//  PURPOSE.
//
//  Copyright (C) Microsoft Corporation.  All Rights Reserved.
//
//==============================================================;

// This code must be compiled with UNICODE support to work correctly
#ifndef UNICODE
#define UNICODE
#endif

#include <windows.h>
#include <winscard.h>
#include <stdio.h>
#include <strsafe.h>
#include <rpc.h>

// Change this prefix to specify what the beginning of the
// introduced card name in the registry will be. This is
// be prepended to a GUID value.
#define CARD_NAME_PREFIX    L"MyCustomCard"

// This is the name that will be provided as the CSP for 
// the card when introduced to the system. This is provided
// in order to disable Smart Card Plug and Play for this
// card.
#define CARD_CSP            L"$DisableSCPnP$"

// This special reader name is used to be notified when
// a reader is added to or removed from the system through
// SCardGetStatusChange.
#define PNP_READER_NAME     L"\\\\?PnP?\\Notification"

// Maximum ATR length plus alignment bytes. This value is
// used in the SCARD_READERSTATE structure
#define MAX_ATR_LEN         36

LONG GenerateCardName(
    __deref_out LPWSTR  *ppwszCardName)
{
    LONG        lReturn = NO_ERROR;
    HRESULT     hr = S_OK;
    DWORD       cchFinalString = 0;
    WCHAR       wszCardNamePrefix[] = CARD_NAME_PREFIX;
    LPWSTR      pwszFinalString = NULL;
    UUID        uuidCardGuid = {0};
    RPC_WSTR    pwszCardGuid = NULL;
    RPC_STATUS  rpcStatus = RPC_S_OK;

    // Parameter check
    if (NULL == ppwszCardName)
    {
        wprintf(L"Invalid parameter in GenerateCardName.\n");
        return ERROR_INVALID_PARAMETER;
    }

    // Generate GUID
    rpcStatus = UuidCreate(&uuidCardGuid);
    if (RPC_S_OK != rpcStatus)
    {
        wprintf(L"Failed to create new GUID with error 0x%x.\n");
        lReturn = (DWORD)rpcStatus;
    }
    else
    {
        // Convert GUID to string
        rpcStatus = UuidToString(&uuidCardGuid, &pwszCardGuid);
        if (RPC_S_OK != rpcStatus)
        {
            wprintf(L"Failed to convert new GUID to string with error 0x%x.\n", rpcStatus);
            lReturn = (DWORD)rpcStatus;
        }
        else
        {
            // Allocate memory for final string
            // Template is <prefix>-<guid>
            cchFinalString = (DWORD)(wcslen(wszCardNamePrefix) + 1 + wcslen((LPWSTR)pwszCardGuid) + 1);
            pwszFinalString = (LPWSTR)HeapAlloc(GetProcessHeap(), 0, cchFinalString * sizeof(WCHAR));
            if (NULL == pwszFinalString)
            {
                wprintf(L"Out of memory.\n");
                lReturn = ERROR_OUTOFMEMORY;
            }
            else
            {
                // Create final string
                hr = StringCchPrintf(
                            pwszFinalString,
                            cchFinalString,
                            L"%s-%s",
                            wszCardNamePrefix,
                            pwszCardGuid);
                if (FAILED(hr))
                {
                    wprintf(L"Failed to create card name with error 0x%x.\n", hr);
                    lReturn = (DWORD)hr;
                }
                else
                {
                    // Set output params
                    *ppwszCardName = pwszFinalString;
                    pwszFinalString = NULL;
                }
            }
        }
    }

    if (NULL != pwszCardGuid)
    {
        RpcStringFree(&pwszCardGuid);
    }

    if (NULL != pwszFinalString)
    {
        HeapFree(GetProcessHeap(), 0, pwszFinalString);
    }

    return lReturn;
}

LONG IntroduceCardATR(
    __in SCARDCONTEXT   hSC,
    __in LPBYTE         pbAtr,
    __in DWORD          cbAtr)
{
    LONG    lReturn = NO_ERROR;
    LPWSTR  pwszCardName = NULL;
    
    // Parameter checks
    if (NULL == hSC || NULL == pbAtr || 0 == cbAtr)
    {
        wprintf(L"Invalid parameter in IntroduceCardATR.\n");
        return ERROR_INVALID_PARAMETER;
    }

    // Generate a name for the card
    lReturn = GenerateCardName(&pwszCardName);
    if (NO_ERROR != lReturn)
    {
        wprintf(L"Failed to generate card name with error 0x%x.\n", lReturn);
    }
    else
    {
        // Introduce the card to the system
        lReturn = SCardIntroduceCardType(
                                hSC,
                                pwszCardName,
                                NULL,
                                NULL,
                                0,
                                pbAtr,
                                NULL,
                                cbAtr);
        if (SCARD_S_SUCCESS != lReturn)
        {
            wprintf(L"Failed to introduce card '%s' to system with error 0x%x.\n", pwszCardName, lReturn);
        }
        else
        {
            // Set the provider name
            lReturn = SCardSetCardTypeProviderName(
                                        hSC,
                                        pwszCardName,
                                        SCARD_PROVIDER_CSP,
                                        CARD_CSP);
            if (SCARD_S_SUCCESS != lReturn)
            {
                wprintf(L"Failed to set CSP for card '%s' with error 0x%x.\n", pwszCardName, lReturn);
            }
            else
            {
                wprintf(L"Card '%s' has been successfully introduced to the system and has had Plug and Play disabled.\n", pwszCardName);
            }
        }
    }

    if (NULL != pwszCardName)
    {
        HeapFree(GetProcessHeap(), 0, pwszCardName);
    }

    return lReturn;
}

LONG ProcessCard(
    __in SCARDCONTEXT           hSC,
    __in LPSCARD_READERSTATE    pRdr)
{
    LONG        lReturn = NO_ERROR;
    DWORD       dwActiveProtocol = 0;
    DWORD       cbAtr = MAX_ATR_LEN;
    DWORD       dwIndex = 0;
    DWORD       cchCards = SCARD_AUTOALLOCATE;
    LPWSTR      pmszCards = NULL;
    BYTE        rgbAtr[MAX_ATR_LEN] = {0};
    SCARDHANDLE hSCard = NULL;

    // Parameter checks
    if (NULL == hSC || NULL == pRdr)
    {
        wprintf(L"Invalid parameter in ProcessCard.\n");
        return ERROR_INVALID_PARAMETER;
    }

    // Connect to the card in the provided reader in shared mode
    lReturn = SCardConnect(
                    hSC,
                    pRdr->szReader,
                    SCARD_SHARE_SHARED,
                    SCARD_PROTOCOL_T0 | SCARD_PROTOCOL_T1,
                    &hSCard,
                    &dwActiveProtocol);
    if (SCARD_S_SUCCESS != lReturn)
    {
        wprintf(L"Failed to connect to card in reader '%s' with error 0x%x.\n", pRdr->szReader, lReturn);
    }
    else
    {
        wprintf(L"Connected to card in reader '%s'.\n", pRdr->szReader);

        /*
         * In this spot, put any necessary calls needed to identify that this
         * is the type of card you are looking for. Usually this is done via
         * SCardTransmit calls. For this example, we will grab the ATR of every
         * inserted card.
         */

        // Obtain the ATR of the inserted card
        lReturn = SCardGetAttrib(
                            hSCard,
                            SCARD_ATTR_ATR_STRING,
                            rgbAtr,
                            &cbAtr);
        if (SCARD_S_SUCCESS != lReturn)
        {
            wprintf(L"Failed to obtain ATR of card in reader '%s' with error 0x%x.\n", pRdr->szReader, lReturn);
        }
        else
        {
            // Output the ATR
            wprintf(L"ATR of card in reader '%s':", pRdr->szReader);
            for (dwIndex = 0; dwIndex < cbAtr; dwIndex++)
            {
                wprintf(L" %02x", rgbAtr[dwIndex]);
            }
            wprintf(L"\n");

            // Determine if the ATR is already in the Smart Card Database
            lReturn = SCardListCards(
                                hSC,
                                rgbAtr,
                                NULL,
                                0,
                                (LPWSTR)&pmszCards,
                                &cchCards);
            if (SCARD_S_SUCCESS != lReturn)
            {
                wprintf(L"Failed to determine if card in reader '%s' is currently recognized by the system with error 0x%x. Skipping.\n", pRdr->szReader, lReturn);
            }
            else if (NULL == pmszCards || 0 == *pmszCards)
            {
                // Card not found. We need to add it.
                wprintf(L"Card in reader '%s' is not currently recognized by the system. Adding ATR.\n", pRdr->szReader);
                lReturn = IntroduceCardATR(
                                    hSC, 
                                    rgbAtr, 
                                    cbAtr);

                // If an error occurs here, we will continue so we can try the next time
                // the card is inserted as well as examine other readers.
            }
            else
            {
                wprintf(L"Card in reader '%s' is already known by the system. Not adding ATR.\n", pRdr->szReader);
            }
        }
    }

    // Disconnect from the card. We do not need to reset it.
    if (NULL != hSCard)
    {
        SCardDisconnect(hSCard, SCARD_LEAVE_CARD);
    }

    // Free resources
    if (NULL != pmszCards)
    {
        SCardFreeMemory(hSC, pmszCards);
    }

    return lReturn;
}


LONG MonitorReaders(
        __in SCARDCONTEXT hSC)
{
    LPWSTR              pwszReaders = NULL;
    LPWSTR              pwszOldReaders = NULL;
    LPWSTR              pwszRdr = NULL;
    DWORD               dwRet = ERROR_SUCCESS;
    DWORD               cchReaders = SCARD_AUTOALLOCATE;
    DWORD               dwRdrCount = 0;
    DWORD               dwOldRdrCount = 0;
    DWORD               dwIndex = 0;
    LONG                lReturn = NO_ERROR;
    BOOL                fDone = FALSE;
    SCARD_READERSTATE   rgscState[MAXIMUM_SMARTCARD_READERS+1] = {0};
    SCARD_READERSTATE   rgscOldState[MAXIMUM_SMARTCARD_READERS+1] = {0};
    LPSCARD_READERSTATE pRdr = NULL;

    // Parameter check
    if (NULL == hSC)
    {
        wprintf(L"Invalid parameter in MonitorReaders.\n");
        return ERROR_INVALID_PARAMETER;
    }

    // One of the entries for monitoring will be to detect new readers
    // The first time through the loop will be to detect whether
    // the system has any readers.
    rgscState[0].szReader = PNP_READER_NAME;
    rgscState[0].dwCurrentState = SCARD_STATE_UNAWARE;
    dwRdrCount = 1;

    while (!fDone)
    {
        while (!fDone)
        {
            // Wait for status changes to occur
            wprintf(L"Monitoring for changes.\n");
            lReturn = SCardGetStatusChange(
                                    hSC,
                                    INFINITE,
                                    rgscState,
                                    dwRdrCount);
            switch (lReturn)
            {
                case SCARD_S_SUCCESS:
                    // Success
                    break;
                case SCARD_E_CANCELLED:
                    // Monitoring is being cancelled
                    wprintf(L"Monitoring cancelled. Exiting.\n");
                    fDone = TRUE;
                    break;
                default:
                    // Error occurred
                    wprintf(L"Error 0x%x occurred while monitoring reader states.\n", lReturn);
                    fDone = TRUE;
                    break;
            }

            if (!fDone)
            {
                // Examine the status change for each reader, skipping the PnP notification reader
                for (dwIndex = 1; dwIndex < dwRdrCount; dwIndex++)
                {
                    pRdr = &rgscState[dwIndex];

                    // Determine if a card is now present in the reader and
                    // it can be communicated with.
                    if ((pRdr->dwCurrentState & SCARD_STATE_EMPTY ||
                         SCARD_STATE_UNAWARE == pRdr->dwCurrentState) &&
                        pRdr->dwEventState & SCARD_STATE_PRESENT &&
                        !(pRdr->dwEventState & SCARD_STATE_MUTE))
                    {
                        // A card has been inserted and is available.
                        // Grab its ATR for addition to the database.
                        wprintf(L"A card has been inserted into reader '%s'. Grabbing its ATR.\n", pRdr->szReader);
                        lReturn = ProcessCard(hSC, pRdr);

                        // If an error occurs here, we will continue so we can try the next time
                        // the card is inserted as well as examine other readers.
                    }

                    // Save off the new state of the reader
                    pRdr->dwCurrentState = pRdr->dwEventState;
                }

                // Now see if the number of readers in the system has changed.
                // Save its new state as the current state for the next loop.
                pRdr = &rgscState[0];
                pRdr->dwCurrentState = pRdr->dwEventState;
                if (pRdr->dwEventState & SCARD_STATE_CHANGED)
                {
                    wprintf(L"Reader change detected.\n");
                    break;
                }
            }   
        }

        if (!fDone)
        {
            // Clean up previous loop
            if (NULL != pwszOldReaders)
            {
                SCardFreeMemory(hSC, pwszOldReaders);
                pwszOldReaders = NULL;
            }
            pwszReaders = NULL;
            cchReaders = SCARD_AUTOALLOCATE;
            
            // Save off PnP notification reader state and and list of readers previously found in the system
            memcpy_s(&rgscOldState[0], sizeof(SCARD_READERSTATE), &rgscState[0], sizeof(SCARD_READERSTATE));
            memset(rgscState, 0, sizeof(rgscState));
            dwOldRdrCount = dwRdrCount;
            pwszOldReaders = pwszReaders;
            
            // Obtain a list of all readers in the system
            wprintf(L"Building reader list.\n");
            lReturn = SCardListReaders(
                                hSC,
                                NULL,
                                (LPWSTR)&pwszReaders,
                                &cchReaders);
            switch (lReturn)
            {
                case SCARD_S_SUCCESS:
                    // Success
                    break;
                case SCARD_E_NO_READERS_AVAILABLE:
                    // No readers in the system. This is OK.
                    lReturn = SCARD_S_SUCCESS;
                    break;
                default:
                    // Error occurred
                    wprintf(L"Failed to obtain list of readers with error 0x%x.\n", lReturn);
                    fDone = TRUE;
                    break;
            }

            // Build the reader list for monitoring - NULL indicates end-of-list
            // First entry is the PnP Notification entry.
            pRdr = rgscState;
            memcpy_s(&rgscState[0], sizeof(SCARD_READERSTATE), &rgscOldState[0], sizeof(SCARD_READERSTATE));
            pRdr++;
            pwszRdr = pwszReaders;
            while ((NULL != pwszRdr) && (0 != *pwszRdr))
            {
                BOOL fFound = FALSE;
                dwRdrCount++;

                // Look for an existing reader state from a previous loop
                for (dwIndex = 1; dwIndex < dwOldRdrCount; dwIndex++)
                {
                    if ((lstrlen(pwszRdr) == lstrlen(rgscOldState[dwIndex].szReader)) &&
                        (0 == lstrcmpi(pwszRdr, rgscOldState[dwIndex].szReader)))
                    {
                        // Found a match. Copy it.
                        memcpy_s(pRdr, sizeof(SCARD_READERSTATE), &rgscOldState[dwIndex], sizeof(SCARD_READERSTATE));
                        fFound = TRUE;
                        break;
                    }
                }

                if (!fFound)
                {
                    // New reader
                    pRdr->szReader = pwszRdr;
                    pRdr->dwCurrentState = SCARD_STATE_UNAWARE;
                }

                // Increment reader indices
                pRdr++;
                pwszRdr += lstrlen(pwszRdr)+1;
            }
        }
    }

    // Clean up resources
    if (NULL != pwszReaders)
    {
        SCardFreeMemory(hSC, pwszReaders);
    }

    if (NULL != pwszOldReaders)
    {
        SCardFreeMemory(hSC, pwszOldReaders);
    }

    return lReturn;
}

LONG __cdecl main(
        VOID)
{
    DWORD               dwRet = ERROR_SUCCESS;
    SCARDCONTEXT        hSC = NULL;
    LONG                lReturn = NO_ERROR;
    HANDLE              hStartedEvent = NULL;

    // Get handle to event that will be signaled when the Smart Card Service is available
    hStartedEvent = SCardAccessStartedEvent();

    // Wait for the Smart Card Service to become available
    dwRet = WaitForSingleObject(hStartedEvent, INFINITE);
    if (WAIT_OBJECT_0 != dwRet)
    {
        wprintf(L"Wait for Smart Card Service failed with error 0x%x.\n", dwRet);
        lReturn = dwRet;
    }
    else
    {
        // Establish a system-level context with the Smart Card Service
        lReturn = SCardEstablishContext(
                                SCARD_SCOPE_SYSTEM,
                                NULL,
                                NULL,
                                &hSC);
        if (SCARD_S_SUCCESS != lReturn)
        {
            wprintf(L"Failed to establish context with the Smart Card Service with error 0x%x.\n", lReturn);
        }
        else
        {
            // Begin monitoring the readers in the system
            // This routine could be done in a separate thread so it can be cancelled via SCardCancel().
            lReturn = MonitorReaders(hSC);
        }
    }   

    // Cleanup resources
    if (NULL != hSC)
    {
        SCardReleaseContext(hSC);
    }

    if (NULL != hStartedEvent)
    {
        SCardReleaseStartedEvent();
    }

    wprintf(L"Done.\n");

    return lReturn;
}

ÂüÁ¶

½º¸¶Æ® Ä«µå PnP ¹®Á¦ ÇØ°á¿¡ ´ëÇÑ ÀÚ¼¼ÇÑ ³»¿ëÀº ´ÙÀ½ TechNet ¹®¼­¸¦ ÂüÁ¶ÇϽʽÿÀ.
Ç÷¯±× ¾Ø Ç÷¹ÀÌ ½º¸¶Æ® Ä«µå ¹®Á¦ ÇØ°á °¡À̵å
http://technet.microsoft.com/en-us/library/dd979536(WS.10).aspx

¼Ó¼º

±â¼ú ÀÚ·á: 976832 - ¸¶Áö¸· °ËÅä: 2009³â 10¿ù 23ÀÏ ±Ý¿äÀÏ - ¼öÁ¤: 2.0
º» ¹®¼­ÀÇ Á¤º¸´Â ´ÙÀ½ÀÇ Á¦Ç°¿¡ Àû¿ëµË´Ï´Ù.
  • Windows Server 2008 R2 Datacenter
  • Windows Server 2008 R2 Enterprise
  • Windows Server 2008 R2 Standard
  • Windows 7 Enterprise
  • Windows 7 Home Basic
  • Windows 7 Home Premium
  • Windows 7 Professional
  • Windows 7 Starter
  • Windows 7 Ultimate
Ű¿öµå:?
kbmt kbsmartcard kbcodesnippet kbtshoot kbexpertiseinter kbsurveynew kbprb KB976832 KbMtko
±â°è ¹ø¿ªµÈ ¹®¼­
Áß¿ä: º» ¹®¼­´Â Àü¹® ¹ø¿ª°¡°¡ ¹ø¿ªÇÑ °ÍÀÌ ¾Æ´Ï¶ó Microsoft ±â°è ¹ø¿ª ¼ÒÇÁÆ®¿þ¾î·Î ¹ø¿ªÇÑ °ÍÀÔ´Ï´Ù. Microsoft´Â ¹ø¿ª°¡°¡ ¹ø¿ªÇÑ ¹®¼­ ¹× ±â°è ¹ø¿ªµÈ ¹®¼­¸¦ ¸ðµÎ Á¦°øÇϹǷΠMicrosoft ±â¼ú ÀÚ·á¿¡ ÀÖ´Â ¸ðµç ¹®¼­¸¦ Çѱ۷ΠÁ¢ÇÒ ¼ö ÀÖ½À´Ï´Ù. ±×·¯³ª ±â°è ¹ø¿ª ¹®¼­°¡ Ç×»ó ¿Ïº®ÇÑ °ÍÀº ¾Æ´Õ´Ï´Ù. µû¶ó¼­ ±â°è ¹ø¿ª ¹®¼­¿¡´Â ¸¶Ä¡ ¿Ü±¹ÀÎÀÌ Çѱ¹¾î·Î ¸»ÇÒ ¶§ ½Ç¼ö¸¦ ÇÏ´Â °Íó·³ ¾îÈÖ, ±¸¹® ¶Ç´Â ¹®¹ý¿¡ ¿À·ù°¡ ÀÖÀ» ¼ö ÀÖ½À´Ï´Ù. Microsoft´Â ³»¿ë»óÀÇ ¿À¿ª ¶Ç´Â Microsoft °í°´ÀÌ ÀÌ·¯ÇÑ ¿À¿ªÀ» »ç¿ëÇÔÀ¸·Î½á ¹ß»ýÇÏ´Â ºÎ Á¤È®¼º, ¿À·ù ¶Ç´Â ¼ÕÇØ¿¡ ´ëÇØ Ã¥ÀÓÀ» ÁöÁö ¾Ê½À´Ï´Ù. Microsoft´Â ÀÌ·¯ÇÑ ¹®Á¦¸¦ ÇØ°áÇϱâ À§ÇØ ±â°è ¹ø¿ª ¼ÒÇÁÆ®¿þ¾î¸¦ ÀÚÁÖ ¾÷µ¥ÀÌÆ®Çϰí ÀÖ½À´Ï´Ù.

Çǵå¹é º¸³»±â