À©µµ¿ì µð¹ÙÀ̽º µå¶óÀ̹ö¸¦ óÀ½ °³¹ßÇÏ·Á´Â µ¶ÀÚµé°ú ½Ç¹«¿¡¼ ÇÊ¿ä·Î ÇÏ´Â µð¹ÙÀ̽º µå¶óÀ̹ö¸¦ °³¹ßÇÏ´Â µ¥ µµ¿òÀÌ µÇ´Â Áö½ÄÀ» ¾ò°íÀÚ ÇÏ´Â µ¶ÀÚµéÀ» À§Çؼ ÀÛ¼ºµÆ´Ù.
ÀÌ Ã¥Àº Å©°Ô µð¹ÙÀ̽º µå¶óÀ̹ö °³¹ß¿¡ óÀ½ ÀÔ¹®ÇÒ ¶§ ²À ÀоîºÁ¾ß ÇÒ ºÎºÐÀÎ ±âº»Æí(1Àå°ú 2Àå)°ú ½Ç¹«¿¡¼ ÀåÄ¡À¯Çüº°(µð½ºÅ©, HID, I2C, ¿Àµð¿À, Äݹé ÁÖ¼Ò Å×ÀÌºí °¡·Îä±â, PCIe, ¿ÀÅä ¸¶¿ì½º¿Í ¿ÀÅä Å°º¸µå) µð¹ÙÀ̽º µå¶óÀ̹ö¸¦ °³¹ßÇÏ´Â °³¹ßÀÚµéÀ» À§ÇÑ ÀÀ¿ëÆí(3ÀåºÎÅÍ 9Àå±îÁö), µÎ ºÎºÐÀ¸·Î ³ª´¶´Ù. µû¶ó¼ µð¹ÙÀ̽º µå¶óÀ̹ö °³¹ß¿¡ óÀ½ ÀÔ¹®ÇÏ´Â µ¶ÀÚµéÀ̳ª ½Ç¹«¿¡¼ ½ÇÁ¦ Çϵå¿þ¾î¸¦ °¡Áö°í À©µµ¿ì ¿î¿µÃ¼Á¦¿¡¼ µ¿ÀÛÇÏ´Â µð¹ÙÀ̽º µå¶óÀ̹ö¸¦ ¸¸µé¾î¾ß ÇÏ´Â µ¶ÀÚ ¸ðµÎ¸¦ ¸¸Á·½Ãų ¼ö Àִ åÀÌ µÉ °ÍÀÌ´Ù.
2ÆÇ¿¡¼´Â ±âÁ¸ À©µµ¿ì 8 ±â¹ÝÀÇ ³»¿ëÀ» À©µµ¿ì 10À¸·Î ¾÷µ¥ÀÌÆ®ÇÏ´Â µî 1ÆÇ ³»¿ëÀ» ÃֽŠ¹öÀü¿¡ ¸ÂÃç ¼öÁ¤ÇÏ°í ¼³¸íÀ» Ãß°¡Çß´Ù.
ÇöÀç (ÁÖ)ÇÏÁ¦¼ÒÇÁÆ® ´ëÇ¥À̻縦 ¸Ã°í ÀÖ´Ù. 1998³âºÎÅÍ Áö±Ý±îÁö »ï¼ºÃ·´Ü±â¼ú¼¾ÅÍ, »ï¼º21¼¼±â¾ÆÄ«µ¥¹Ì, LG·¯´×¼¾ÅÍ µî¿¡¼ µð¹ÙÀ̽º µå¶óÀ̹ö ±³À°À» ¼öÇàÇØ¿ÔÀ¸¸ç, û°¹®È»ê¾÷´ë ÄÄÇ»ÅÍÁ¤º¸°ú °âÀÓ±³¼ö¿Í Á¤º¸Åë½Å ¹Î°üÇÕµ¿Á¶»ç´Ü Àü¹®°¡·Î È°µ¿Çß´Ù. À©µµ¿ì¿Í ÀÓº£µðµå ½Ã½ºÅÛ ¿î¿µÃ¼Á¦°¡ °ü½É ºÐ¾ßÀ̸ç, ƯÈ÷ ¹ö½º ÀÎÅÍÆäÀ̽º(USB, PCI, 1394 µî)¿Í º¸¾È ½Ã½ºÅÛ¿¡ °ü½ÉÀÌ ¸¹´Ù.
ÁÖ¿ä Àú¼·Î´Â ¡ºWindows CE ½ÇÀü °¡À̵塻(¿¡ÀÌÄÜÃâÆÇ, 2006)¸¦ ºñ·ÔÇØ, ¡ºµð¹ÙÀ̽º µå¶óÀ̹ö ±¸Á¶¿Í ¿ø¸® ±×¸®°í Á¦ÀÛ ³ëÇÏ¿ì¡»(°¡³²»ç, 2004), ¡ºÀ©µµ¿ì µð¹ÙÀ̽º µå¶óÀ̹ö¡»(ÇѺû¹Ìµð¾î, 2009)°¡ ÀÖ´Ù.
1ºÎ. ±âº»Æí
1Àå. °³¹ßȯ°æ
1.1 µð¹ÙÀ̽º µå¶óÀ̹ö
1.1.1 ±âº» ¼³¸í
1.1.2 ·¹°Å½Ã µå¶óÀ̹ö
1.1.3 PNP µå¶óÀ̹ö.
1.2 °³¹ßÅø ¼³Ä¡
1.2.1 WDK
1.2.2 WDM, KMDF ±×¸®°í UMDF
1.3 °³¹ß ½ÃÀÛ Àü °ËÅä»çÇ×
1.4 ¼³Ä¡ ÆÄÀÏ
1.4.1 Version ¼½¼Ç
1.4.2 SourceDisksNames ¼½¼Ç
1.4.3 SourceDisksFiles ¼½¼Ç
1.4.4 DestinationDirs ¼½¼Ç
1.4.5 Manufacturer ¼½¼Ç
1.4.6 Strings ¼½¼Ç
1.4.7 Models ¼½¼Ç
1.4.8 DDInstall ¼½¼Ç
1.4.8.1 DDInstall ¼½¼Ç Áö½ÃÀÚ
1.4.8.2 DDInstall.Service ¼½¼Ç
1.5 ºôµå
1.5.1 WDK 7600 ÄÜ¼Ö ºôµå ȯ°æ
1.5.2 EWDK ºôµå ȯ°æ
1.6 µð¹ö±ë Åø
1.6.1 DebugView.
1.6.1.1 DebugView »ç¿ëÇϱâ
1.6.1.2 DebugView¿Í µð¹ö±× ·Î±× Ãâ·ÂÁ¶°Ç
1.6.2 WinDBG
1.6.2.1 Ÿ°Ù PC ¼³Á¤
1.6.2.2 µð¹ö±ë PC ¼³Á¤
1.6.2.3 ¸Þ¸ð¸® ´ýÇÁ ÆÄÀÏÀ» ÅëÇÑ WinDBG ¿¬°áÇϱâ
1.6.2.4 WinDBG ÇÁ·Î±×·¥ üÇèÇϱâ
1.7 WHQL ¼Ò°³
1.7.1 ȸ»ç ÀÎÁõ¼ Áغñ°úÁ¤
1.7.2 ´ë½Ãº¸µå °¡ÀÔ
1.7.3 WHCK ÇÁ·Î±×·¥ Âü¿©
1.7.4 WHLK ÇÁ·Î±×·¥ Âü¿©
2Àå. µå¶óÀ̹öÀÇ ±âº»
2.1 µð¹ÙÀ̽º ½ºÅÃ
2.2 WDM
2.2.1 IRP
2.2.1.1 IO_STACK_LOCATION.
2.2.1.2 IRP ¿Ï·á
2.2.2 Çʼö ·çƾ
2.2.2.1 DriverEntry
2.2.2.2 AddDevice.
2.2.2.3 PlugNPlayDispatch.
2.2.2.4 PowerDispatch
2.2.2.5 DriverUnload
2.2.3 WDM µå¶óÀ̹ö º¸Ãæ ±â¼ú
2.2.3.1 IoSkipCurrentIrpStackLocation
2.2.3.2 ¿Ï·á ·çƾ
2.2.3.3 IRQL
2.2.3.4 ÇÚµé°ú ÇÁ·Î¼¼½º
2.2.4 WDM µå¶óÀ̹ö »ùÇà ºÐ¼®
2.2.4.1 µå¶óÀ̹ö ºôµå, ¼³Ä¡ ¹× ÀÀ¿ëÇÁ·Î±×·¥ ½ÇÇà
2.3 WDF: KMDF
2.3.1 WDF ÇÁ·¹ÀÓ¿öÅ©
2.3.2 WDF ¿ÀºêÁ§Æ®
2.3.2.1 WdfDriver
2.3.2.2 WdfDevice
2.3.2.3 WdfRequest
2.3.2.4 WdfQueue
2.3.3 À̺¥Æ® ÇÔ¼öµé
2.3.3.1 DRIVER_INITIALIZE
2.3.3.2 EVT_WDF_DRIVER_DEVICE_ADD
2.3.3.3 EVT_WDF_DEVICE_PREPARE_HARDWARE
2.3.3.4 EVT_WDF_IO_QUEUE_IO_READ
2.3.3.5 EVT_WDF_IO_QUEUE_IO_WRITE.
2.3.3.6 EVT_WDF_IO_QUEUE_IO_DEVICE_CONTROL.
2.3.4 WDF(KMDF) µå¶óÀ̹ö »ùÇà ºÐ¼®
2.3.4.1 µå¶óÀ̹ö ºôµå, ¼³Ä¡ ¹× ÀÀ¿ëÇÁ·Î±×·¥ ½ÇÇà
2.3.4.2 µå¶óÀ̹ö ¼Ò½º ¼³¸í
2ºÎ. ÀÀ¿ëÆí
3Àå. µð½ºÅ© µð¹ÙÀ̽º µå¶óÀ̹ö
3.1 µð½ºÅ© µå¶óÀ̹ö¸¦ ¸¸µé±â À§ÇØ ¾Ë¾Æ¾ß ÇÏ´Â °Í
3.1.1 µð½ºÅ© µå¶óÀ̹ö¸¦ ¸¸µé¾î¼ ¹«¾ùÀ» ÇÒ ¼ö ÀÖÀ»±î
3.1.2 WDK
3.2 SATA¿¡ ´ëÇÑ ¼Ò°³
3.2.1 SATAÀÇ °³³ä
3.2.2 AHCIÀÇ ÀÌÇØ
3.2.3 NCQ.
3.3 NVMe¿¡ ´ëÇÑ ¼Ò°³
3.4 À©µµ¿ì ½ºÅ丮Áö µå¶óÀ̹ö ¸ðµ¨
3.4.1 SCSI ¹Ì´ÏÆ÷Æ® µå¶óÀ̹ö
3.4.1.1 DriverEntry: µð¹ÙÀ̽º µå¶óÀ̹ö ·Îµù ½Ã±â¿¡ È£ÃâµÈ´Ù
3.4.1.2 Callback HwScsiFindAdapter: ¹ß°ßµÈ ÀåÄ¡ °ËÁõÀ» À§ÇØ È£ÃâµÈ´Ù
3.4.1.3 Callback HwScsiInitialize: ¹ß°ßµÈ ÀåÄ¡ÀÇ Ãʱâȸ¦ À§ÇØ È£ÃâµÈ´Ù
3.4.1.4 Callback HwScsiInterrupt: ÀÎÅÍ·´Æ® ¼ºñ½º ·çƾÀÇ ¿ªÇÒÀ» ´ã´çÇÑ´Ù
3.4.1.5 Callback HwScsiReset: ¹ß°ßµÈ ÀåÄ¡ÀÇ Ãʱâȸ¦ À§ÇØ È£ÃâµÈ´Ù
3.4.1.6 Callback HwScsiAdapterControl: »çÀü¿¡ Á¤ÀÇµÈ Æ¯º°ÇÑ ¸ñÀûÀ» À§ÇØ È£ÃâµÈ´Ù
3.4.1.7 Callback HwScsiStartIo: ¸ðµç SCSI Request ¸í·É¾î°¡ Àü´ÞµÈ´Ù
3.4.2 SCSI ¹Ì´ÏÆ÷Æ® µå¶óÀ̹ö »ùÇà ºÐ¼®
3.4.2.1 µå¶óÀ̹ö ºôµå¿Í ¼³Ä¡ ¹æ¹ý
3.4.2.2 HwScsiStartIo() Äݹé ÇÔ¼öÀÇ ÁÖ¿ä µ¿ÀÛ ÄÚµå ºÐ¼®
3.4.3 Storport ¹Ì´ÏÆ÷Æ® µå¶óÀ̹ö
3.4.3.1 SCSI ¹Ì´ÏÆ÷Æ® µå¶óÀ̹ö¿Í ±¸ºÐµÇ´Â Ư¡
3.4.3.2 Storport ¹Ì´ÏÆ÷Æ® µå¶óÀ̹ö¿¡¼ º¯°æµÈ Äݹé ÇÔ¼ö
3.4.3.3 Storport ¹Ì´ÏÆ÷Æ® µå¶óÀ̹ö¿Í ½ºÇɶô
3.4.3.4 Storport ¹Ì´ÏÆ÷Æ® µå¶óÀ̹ö »ùÇà ºÐ¼®
3.5 À©µµ¿ì ¾ÖÇø®ÄÉÀ̼ǰú Æнº ½º·ç ÀÎÅÍÆäÀ̽º
3.6 MS WDK°¡ Á¦°øÇÏ´Â AHCI SATA È£½ºÆ® ÄÁÆ®·Ñ·¯ µå¶óÀ̹ö3.6.1 Ataport ¹Ì´ÏÆ÷Æ® µå¶óÀ̹öÀÇ ÁÖ¿ä Äݹé ÇÔ¼ö ¼Ò°³
3.6.2 ¸¶ÀÌÅ©·Î¼ÒÇÁÆ® SATA ¹Ì´ÏÆ÷Æ® µå¶óÀ̹ö »ùÇà ¿¹Á¦ ºÐ¼®309
3.6.2.1 DriverEntry¿¡¼ ÇÏ´Â ÀÏ
3.6.2.2 AhciChannelInitRoutine
3.6.2.3 AhciHwBuildIo
3.6.2.4 AhciHwStartIo
3.6.2.5 AhciHwInterrupt
3.6.3 µå¶óÀ̹ö ¼³Ä¡
3.6.4 À©µµ¿ì ÀÀ¿ëÇÁ·Î±×·¥°ú Æнº ½º·ç ÀÎÅÍÆäÀ̽º(ATA)
3.7 NVMe Æò°¡ÆÇ µå¶óÀ̹ö
3.8 ½ºÅ丮Áö Ŭ·¡½º µå¶óÀ̹ö
3.8.1 ÆÄÀϽýºÅÛ º¼·ý°ú ½ºÅ丮Áö º¼·ý
3.8.2 µð½ºÅ© µå¶óÀ̹ö¿Í ½ºÅ丮Áö º¼·ý
3.8.3 µð½ºÅ© ½ºÅ丮Áö Ŭ·¡½º µå¶óÀ̹ö
4Àå. HID µð¹ÙÀ̽º µå¶óÀ̹ö
4.1 HID µå¶óÀ̹ö¸¦ ¸¸µé±â À§ÇØ ¾Ë¾Æ¾ß ÇÏ´Â °Í
4.1.1 HID µå¶óÀ̹ö¸¦ ¸¸µé¾î¼ ¹«¾ùÀ» ÇÒ ¼ö ÀÖÀ»±î
4.1.2 WDK
4.2 HID¿¡ ´ëÇÑ ¼Ò°³
4.2.1 HID °ü°èµµ¸¦ ÀÌÇØÇÏÀÚ
4.2.2 HID ¾ÖÇø®ÄÉÀÌ¼Ç Ä÷º¼Ç°ú À©µµ¿ì ÀåÄ¡ ¿°Å4.2.3 HID µð½ºÅ©¸³ÅÍ
4.2.4 ¸®Æ÷Æ® µð½ºÅ©¸³ÅÍ
4.2.5 ¾ÆÀÌÅÛÀÇ ÀÌÇØ
4.2.5.1 Input, Output ±×¸®°í Feature Report
4.2.5.2 Report Size, Report Count
4.2.5.3 Usage, Usage ÆäÀÌÁö
4.2.5.4 Logical Minimum, Logical Maximum.
4.2.5.5 Usage Minimum, Usage Maximum
4.2.5.6 Physical Minimum, Maximum, Unit Exponent, Unit
4.2.5.7 ¸®Æ÷Æ® ID
4.2.6 ¾ÆÀÌÅÛÀÇ ÀÎÄÚµù
4.2.6.1 ªÀº ÀÎÄÚµù
4.2.6.2 ±ä ÀÎÄÚµù
4.2.7 ¸®Æ÷Æ® µð½ºÅ©¸³ÅÍÀÇ ¿¹Á¦
4.3 À©µµ¿ì HID Ŭ·¡½º µð¹ÙÀ̽º
4.3.1 HIDCLASS.SYS ¶óÀ̺귯¸®¿Í ¹Ì´Ïµå¶óÀ̹ö
4.3.1.1 ¹Ì´Ïµå¶óÀ̹ö AddDevice Äݹé ÇÔ¼ö 󸮺Î
4.3.1.2 ¹Ì´Ïµå¶óÀ̹ö IRP_MJ_PNP, POWER Äݹé ÇÔ¼ö 󸮺Î
4.3.1.3 ¹Ì´Ïµå¶óÀ̹ö IRP_MJ_INTERNAL_DEVICE_CONTROL Äݹé ÇÔ¼ö 󸮺Î
4.3.2 HID ÀÀ¿ëÇÁ·Î±×·¥ ¶óÀ̺귯¸®
4.3.2.1 Input Report, Feature ReportÀÇ ½ÇÁ¦ ÀǹÌ
4.3.2.2 ÀÀ¿ëÇÁ·Î±×·¥¿¡¼ HID Ŭ·¡½º »ç¿ëÇϱâ
4.4 µð¹ÙÀ̽º µå¶óÀ̹ö ½Ç½À
4.4.1 µå¶óÀ̹ö »ùÇà ºôµå¿Í ¼³Ä¡
4.4.1.1 DEVCON.EXE ºôµåÇϱâ
4.4.1.2 HIDSAMPLE »ùÇà µå¶óÀ̹ö ºôµå
4.4.1.3 HIDSAMPLE µå¶óÀ̹ö ¼³Ä¡Çϱâ
4.4.2 ÀÀ¿ëÇÁ·Î±×·¥ Å×½ºÆ®
4.4.3 ÀÀ¿ëÇÁ·Î±×·¥ ÁÖ¿ä ¼³¸í
4.4.3.1 HID ¾ÖÇø®ÄÉÀÌ¼Ç Ä÷º¼ÇÀ» °Ë»öÇÏ´Â ºÎºÐ
4.4.3.2 °Ë»öµÈ ¾ÖÇø®ÄÉÀÌ¼Ç Ä÷º¼ÇÀ» ¿¾î¼ Á¤º¸¸¦ °¡Á®¿À´Â ºÎºÐ
4.4.4 µå¶óÀ̹ö ÁÖ¿ä ¼Ò½º ¼³¸í
4.4.4.1 ¸®Æ÷Æ® µð½ºÅ©¸³Å͸¦ Á¤ÀÇÇÏ´Â ºÎºÐ
4.4.4.2 HID µð½ºÅ©¸³Å͸¦ Á¤ÀÇÇÏ´Â ºÎºÐ
4.4.4.3 DriverEntry
4.4.4.4 HIDSAMPLE_AddDevice
4.4.4.5 IRP_MJ_POWER IRP ¸í·É¾î Äݹé ÇÔ¼ö
4.4.4.6 IRP_MJ_PNP IRP ¸í·É¾î Äݹé ÇÔ¼ö
4.4.4.7 IRP_MJ_INTERNAL_DEVICE_CONTROL IRP ¸í·É¾î Äݹé ÇÔ¼ö
4.5 HID ÇÏÀ§ ÇÁ·ÎÅäÄÝ
4.5.1 HID Over USB
4.5.1.1 ¿°Å
4.5.1.2 HID ¸®Äù½ºÆ®
4.5.2 HID Over I2C
4.5.2.1 ¿°Å
4.5.2.2 HID ¸®Äù½ºÆ®
4.6 ¸ÎÀ½¸»
5Àå. I2C µå¶óÀ̹ö
5.1 I2C Ŭ¶óÀ̾ðÆ® µå¶óÀ̹ö¸¦ ¸¸µé±â À§ÇØ ¾Ë¾Æ¾ß ÇÏ´Â °Í
5.1.1 I2C Ŭ¶óÀ̾ðÆ® µå¶óÀ̹ö¸¦ ¸¸µé¾î¼ ¹«¾ùÀ» ÇÒ ¼ö ÀÖÀ»±î
5.1.2 WDK
5.2 I2C¿¡ ´ëÇÑ ¼Ò°³
5.2.1 I2C °ü°èµµ¸¦ ÀÌÇØÇÏÀÚ
5.2.2 I2C ±âº» Åë½Å±Ô¾à
5.3 À©µµ¿ì¿Í I2C ¹ö½º.
5.3.1 ACPI¿Í I2C
5.3.1.1 DSDT
5.3.1.2 I2C È£½ºÆ® ÄÁÆ®·Ñ·¯, I2C ÅÍÄ¡Æе带 ¼¼úÇÏ´Â DSDT ¿¹½Ã
5.3.1.3 ACPI À̸§ ¿ÀºêÁ§Æ®¿Í À©µµ¿ì
5.3.2 SPB ÇÁ·¹ÀÓ¿öÅ©
5.3.2.1 I2C È£½ºÆ® ÄÁÆ®·Ñ·¯ µå¶óÀ̹ö(SPB ÄÁÆ®·Ñ·¯ µå¶óÀ̹ö)
5.3.2.2 I2C Ŭ¶óÀ̾ðÆ® µå¶óÀ̹ö(SPB ÁÖº¯ µð¹ÙÀ̽º µå¶óÀ̹ö)
5.4 µð¹ÙÀ̽º µå¶óÀ̹ö ½Ç½À
5.4.1 ¼Ö·ç¼Ç ºôµå
5.4.2 ¼³Ä¡ ÆÄÀÏ ºÐ¼®
5.4.3 ÀÀ¿ëÇÁ·Î±×·¥, µå¶óÀ̹ö ÁÖ¿ä ¼Ò½º ºÐ¼®
5.4.3.1 driver.cppÀÇ DriverEntry
5.4.3.2 driver.cppÀÇ OnDeviceAdd
5.4.3.3 device.cppÀÇ OnPrepareHardware
5.4.3.4 device.cppÀÇ OnIoDeviceControl
5.4.3.5 peripheral.cppÀÇ SpbPeripheralWriteRead ³»ºÎ ÇÔ¼ö
5.5 Âü°í »çÀÌÆ® Á¤º¸
6Àå. ¿Àµð¿À µð¹ÙÀ̽º µå¶óÀ̹ö
6.1 ¿Àµð¿À µå¶óÀ̹ö¸¦ ¸¸µé±â À§ÇÑ Áغñ
6.1.1 ¿Àµð¿À µå¶óÀ̹ö¸¦ ¸¸µé¾î¼ ¹«¾ùÀ» ÇÒ ¼ö ÀÖÀ»±î
6.1.2 WDK
6.1.3 ³»°¡ ºÎÁ·ÇÑ °ÍÀº ¹«¾ùÀΰ¡
6.1.3.1 ÇÁ·Î±×·¡¹Ö ¾ð¾î¿¡ ´ëÇÑ °æÇè(C ¾ð¾î)
6.1.3.2 ÇÁ·Î±×·¡¹Ö ¾ð¾î¿¡ ´ëÇÑ Ãß°¡ÀûÀÎ °æÇè(C++ ¾ð¾î)
6.1.3.3 COM¿¡ ´ëÇÑ ÀÌÇØ
6.1.3.4 WDM À©µµ¿ì Ä¿³Î ·¹º§ µå¶óÀ̹ö¿¡ ´ëÇÑ ÀÌÇØ
6.1.3.5 °³¹ßÀڷμÀÇ ¸¶À½°¡Áü
6.2 º»°ÝÀûÀ¸·Î °øºÎÇغ¸ÀÚ
6.2.1 C++°ú COM ÀÎÅÍÆäÀ̽º¿¡ ´ëÇÑ °£´ÜÇÑ ÇнÀ
6.2.1.1 °£´ÜÇÑ COM ÀÎÅÍÆäÀ̽º Á¤ÀÇ¿Í ±¸Çö
6.2.1.2 2°³ÀÇ COM ÀÎÅÍÆäÀ̽º Á¤Àǹ®°ú Ŭ·¡½º Á¤ÀÇ ¹× ±¸Çö
6.2.1.3 AddRef( ) ÇÔ¼ö¿Í Release( ) ÇÔ¼ö
6.2.1.4 ¿Àµð¿À µå¶óÀ̹ö COM ÀÎÅÍÆäÀ̽ºÀÇ ÃÖ»óÀ§ ÀÎÅÍÆäÀ̽º(IUnknown)
6.2.1.5 ÀÎÅÍÆäÀ̽º °£ÀÇ »ó¼Ó°ú Ŭ·¡½º Á¤ÀÇ
6.2.2 WDK ¹®¼¸¦ ÅëÇÑ ÇнÀ
6.2.2.1 WDK¿¡¼ ¼Ò°³ÇÏ´Â ¿Àµð¿À µå¶óÀ̹ö °èÃþµµ
6.2.2.2 ¾î¶² Æ÷Æ® ÇÊÅ͸¦ ¼±ÅÃÇÒ °ÍÀΰ¡
6.2.2.3 ÅäÆú·ÎÁö¸¦ ÀÛ¼ºÇÑ´Ù
6.2.2.4 ÇÉÀÌ ´Ù·ê ½ºÆ®¸² µ¥ÀÌÅÍ Æ÷¸ËÀ» °áÁ¤ÇÑ´Ù
6.2.2.5 ÇÊÅÍÀÇ °³³äÀÌ ¾Æ´Ñ, µå¶óÀ̹ö ÀÔÀå¿¡¼ÀÇ ¼Ò°³
6.2.2.6 ÇÉ ÆÑÅ丮
6.2.2.7 WaveXxx ÇÊÅÍ¿Í ÅäÆú·ÎÁö ÇÊÅÍ
6.2.2.8 ÅäÆú·ÎÁö ÇÊÅ͸¦ À§ÇÑ ÅäÆú·ÎÁö ±¸Á¶µµ ¿¹½Ã
6.2.2.9 ¿Àµð¿À µå¶óÀ̹ö¸¦ ÀÛ¼ºÇÏ´Â µ¥ »ç¿ëµÇ´Â COM ÀÎÅÍÆäÀ̽º
6.2.2.10 COM ÀÎÅÍÆäÀ̽º¸¦ »ó¼Ó¹Þ¾Æ Á¤ÀÇÇÏ´Â ¿Àµð¿À µå¶óÀ̹ö Ŭ·¡½ºÀÇ ¿¹
6.2.2.11 ¿Àµð¿À µå¶óÀ̹ö µ¿ÀÛ È帧
6.3 °£´ÜÇÑ ¿Àµð¿À µå¶óÀ̹ö¸¦ ¸¸µéÀÚ
6.3.1 °£´ÜÇÑ ¿Àµð¿À µå¶óÀ̹ö¸¦ ¼³Ä¡Çϱâ À§ÇÑ ¼³Ä¡ ÆÄÀÏ ±¸¼º(INF)
6.3.2 °£´ÜÇÑ ¿Àµð¿À µå¶óÀ̹ö¸¦ ºôµåÇϱâ À§ÇÑ ÆÄÀÏ ±¸¼º
6.3.3 °£´ÜÇÑ ¿Àµð¿À µå¶óÀ̹öÀÇ ºôµå, ¼³Ä¡, ¿î¿ë
6.3.4 °£´ÜÇÑ ¿Àµð¿À µå¶óÀ̹ö Áß¿ä ÄÚµå ºÐ¼®
6.4 AVStream µå¶óÀ̹ö ¸ðµ¨ ¼Ò°³
6.4.1 AVStream °´Ã¼ °èÃþµµ¿Í ÇÊÅÍ »ý¼º
6.4.2 ÇÊÅÍ Áß½É/ÇÉ Á᫐ AVStream µå¶óÀ̹ö °³¹ß ¹æ¹ý
6.4.2.1 ÇÊÅÍ Á᫐ µå¶óÀ̹öÀÇ Process Äݹé ÇÔ¼ö
6.4.2.2 ÇÉ Á᫐ µå¶óÀ̹öÀÇ Process Äݹé ÇÔ¼ö
7Àå. ÄݹéÁÖ¼Ò Å×ÀÌºí °¡·Îä±â
7.1 ÀÌ Ã¥¿¡¼ ¸»ÇÏ´Â ¡®°¡·Îä±â¡¯¶õ?
7.2 DRIVER_OBJECT¿Í µå¶óÀ̹ö Äݹé ÇÔ¼ö Å×À̺í
7.2.1 DRIVER_OBJECT¿Í Äݹé ÇÔ¼öµé
7.2.2 DRIVER_OBJECT¿Í DEVICE_OBJECT
7.2.3 DRIVER_OBJECT, DEVICE_OBJECT ±×¸®°í MajorFunction
7.2.4 IRP¿Í »ó°ü¾ø´Â Äݹé ÇÔ¼öµé
7.2.4.1 DriverUnload Äݹé ÇÔ¼ö
7.2.4.2 AddDevice Äݹé ÇÔ¼ö
7.3 ƯÁ¤ µå¶óÀ̹öÀÇ µ¿ÀÛÀ» °¨½ÃÇÏ´Â ¸ñÀûÀÇ Å×ÀÌºí °¡·Îä±â
7.3.1 ƯÁ¤ µå¶óÀ̹öÀÇ DRIVER_OBJECT¸¦ ±¸ÇÏ´Â ÀÛ¾÷
7.3.1.1 µå¶óÀ̹ö À̸§À» »ç¿ëÇؼ DRIVER_OBJECT¸¦ ±¸Çϱâ
7.3.1.2 µð¹ÙÀ̽º ½ºÅÃÀÇ ÇÊÅ͸¦ »ç¿ëÇؼ DRIVER_OBJECT ±¸Çϱâ
7.3.2 DRIVER_OBJECT Å×ÀÌºí °¡·Îä±â
7.4 °³¹ßÀÚ Àü¿ë ÀÀ¿ëÇÁ·Î±×·¥°ú Åë½ÅÇϴ ä³ÎÀ» ¸¸µé±â À§ÇÑ Å×ÀÌºí °¡·Îä±â
7.4.1 FILE_OBJECT¿Í DEVICE_OBJECTÀÇ ¿¬°á
7.4.2 ÆÄÀÏ ÀÔÃâ·Â API¿Í IRP
7.4.3 ¹Ì´ÏÆ÷Æ® µå¶óÀ̹ö¿¡¼ Å×ÀÌºí °¡·Îä±â
7.4.3.1 Æ÷Æ® µå¶óÀ̹ö°¡ ¼³Á¤ÇÑ Å×ÀÌºí °¡·Îä±â
7.4.3.2 ¹Ì´ÏÆ÷Æ® µå¶óÀ̹ö¸¦ À§ÇÑ Custom DEVICE_OBJECT¸¦ »ý¼ºÇϱâ
7.4.3.3 »õ·Ó°Ô ¼³Ä¡µÈ °¡·Îä±â ÇÔ¼ö°¡ ÇÏ´Â ÀÏ654
7.4.3.4 IRP ÈÄó¸® °¡·Îä±â
7.4.3.5 ±× ¹Û¿¡ °í·ÁÇÒ °Íµé
7.5.1 ½Ç½À ¿¹Á¦ È®ÀÎ
7.5.3 ¼³Ä¡
7.5.4 Å×½ºÆ®
7.5.5 ¸ÎÀ½¸»
8Àå PCI/PCIe µð¹ÙÀ̽º µå¶óÀ̹ö 671
8.1 PCI ¹ö½º¿Í PCIe ¹ö½º¿¡ ´ëÇÑ ¼Ò°³
8.1.1 PCI ¹ö½º
8.1.1.1 PCI ¹ö½º ÁÖ¼Ò
8.1.1.2 PCI ¹ö½º°¡ Á¦°øÇÏ´Â ¸í·É(Function)
8.1.1.3 PCI ¹ö½º ±¸¼º °úÁ¤
8.1.1.4 PCI ¹ö½º¿Í ÀÎÅÍ·´Æ®
8.1.2 PCIe ¹ö½º
8.2 À©µµ¿ì¿Í PCI/PCIe ¹ö½º
8.3 PCI µð¹ÙÀ̽º µå¶óÀ̹öÀÇ ±âº» ±¸Á¶
8.3.1 PCI µð¹ÙÀ̽º µå¶óÀ̹ö ÀÛ¼ºÀÚ°¡ ÀÚÁÖ »ç¿ëÇÏ´Â ¿î¿µÃ¼Á¦ Á¦°ø ÇÔ¼ö
8.3.2 ¼³Ä¡ ÆÄÀÏ¿¡¼ °í·ÁÇÒ ºÎºÐ
8.3.3 ¸®¼Ò½º ´Ù·ç±â
8.3.3.1 PCI BAR ÁÖ¼Ò ´Ù·ç±â
8.3.3.2 Interrupt ó¸®(MSI ÀÎÅÍ·´Æ®).
8.4 WDM PCI »ùÇà µå¶óÀ̹ö ¼Ò°³
8.4.1 PCI »ùÇà µå¶óÀ̹ö ¼³Ä¡¿Í Å×½ºÆ® ÀÀ¿ëÇÁ·Î±×·¥ ½ÇÇà
8.4.2 PCI »ùÇà µå¶óÀ̹ö ¼Ò½º ºÐ¼®
8.4.2.1 IOCTL_PCISAMPLE_REGISTER_SHARED_EVENT
8.4.2.2 IOCTL_PCISAMPLE_GET_CONFIGURATION_REGISTER
8.4.2.3 IOCTL_PCISAMPLE_MAPPING_MEMORY
8.4.2.4 IOCTL_PCISAMPLE_UNMAPPING_MEMORY
8.4.2.5 IOCTL_PCISAMPLE_ALLOCATE_CONTIGUOUS_MEMORY_FOR_DMA
8.4.2.6 IOCTL_PCISAMPLE_FREE_CONTIGUOUS_MEMORY_FOR_DMA
9Àå. ¿ÀÅä Å°º¸µå¿Í ¿ÀÅä ¸¶¿ì½º
9.1 ÀÌ Ã¥¿¡¼ ¸»ÇÏ´Â ¡®¿ÀÅä Å°º¸µå¿Í ¿ÀÅä ¸¶¿ì½º¡¯¶õ?
9.2 ¿¹Á¦¿¡ Æ÷ÇԵŠÀÖ´Â ÇÁ·ÎÁ§Æ®µé¿¡ ´ëÇؼ
9.2.1 ClientIoCall ÀÀ¿ëÇÁ·Î±×·¥ ¿¹Á¦
9.2.1.1 °øÅëÄÚµå
9.2.1.2 Å°º¸µå LED Å×½ºÆ®1
9.2.1.3 Å°º¸µå LED Å×½ºÆ®2
9.2.1.4 ¸¶¿ì½º ÁÂÇ¥ Å×½ºÆ®
9.2.2 DriverApi ¶óÀ̺귯¸® ÇÁ·ÎÁ§Æ®
9.2.2.1 DriverApi ¶óÀ̺귯¸®°¡ Á¦°øÇÏ´Â API ÇÔ¼ö ¸®½ºÆ®
9.2.2.2 DriverApi ¶óÀ̺귯¸® ÄÚµå ºÐ¼®
9.2.3 ClientIoDevice µå¶óÀ̹ö ÇÁ·ÎÁ§Æ®
9.2.3.1 ClientIoDevice µå¶óÀ̹ö ¼³Ä¡ÆÄÀÏ
9.2.3.2 ClientIoDevice µå¶óÀ̹ö ¼Ò½ºÆÄÀÏ ºÐ¼® Áغñ
9.2.3.3 ClientIoDevice µå¶óÀ̹ö ¼Ò½ºÆÄÀÏ ºÐ¼®
9.3 »ùÇà ºôµå
9.4 ¸ÎÀ½¸»