TdiBuildSetEventHandler
VOID
TdiBuildSetEventHandler (
IN PIRP Irp,
IN PDEVICE_OBJECT DevObj,
IN PFILE_OBJECT FileObj,
IN PVOID CompRoutine,
IN PVOID Contxt,
IN LONG InEventType,
IN PVOID InEventHandler,
IN PVOID InEventContext
);
TdiBuildSetEventHandler ÇÔ¼ö´Â ·ÎÄÃÀÇ Å¬¶óÀÌ¾ðÆ®°¡ ÁÖ¼Ò¸¦ ±¸ÇöÇÏ´Â ÆÄÀÏ °´Ã¼¸¦ ÀÌ¹Ì ¿¬ ÇϺÎÀÇ Æ®·£½ºÆ÷Æ®·Î TDI_SET_EVENT_HANDLER ¸®Äù½ºÆ®¸¦ À§Çؼ ³»ºÎÀÇ ÀåÄ¡ ÅëÁ¦ IRP¸¦ ¼³Á¤ÇÑ´Ù.
¸Å°³º¯¼ö
- Irp
- ´õ »óÀ§ ·¹º§ ³×Æ®¿÷ ÄÄÆ÷³ÍÆ®¿¡¼ ¹ß»ýÇϰųª TdiBuildInternalDeviceControlIrp ÇÔ¼ö¸¦ °¡Áö°í ÇÒ´çµÈ Ŭ¶óÀÌ¾ðÆ® Á¦°ø IRP¸¦ °¡¸®Å²´Ù.
- DevObj
- ÇϺÎÀÇ TDI Æ®·£½ºÆ÷Æ® µå¶óÀ̹ö¿¡ ÀÇÇØ¼ »ý¼ºµÈ ÀåÄ¡ °´Ã¼¸¦ °¡¸®Å²´Ù.
- FileObj
- ÁÖ¼Ò¸¦ ±¸ÇöÇÏ´Â ÆÄÀÏ °´Ã¼¸¦ °¡¸®Å²´Ù.
- CompRoutine
- Ŭ¶óÀÌ¾ðÆ® Á¦°ø IoCompletion ·çƾÀÇ ¿£Æ®¸® Æ÷ÀÎÆ®¸¦ ¼¼úÇϰųª NULLÀÌ´Ù. Ŭ¶óÀÌ¾ðÆ®°¡ ÀÌ ¸Å°³º¯¼ö¸¦ NULL·Î ¼³Á¤ÇÏÁö ¾Ê´Â´Ù¸é ÁÖ¾îÁø IRP°¡ ¿Ï·áµÉ ¶§ I/O ¸Å´ÏÀú´Â ÀÌ ·çƾÀ» È£ÃâÇÑ´Ù.
- Contxt
- Ŭ¶óÀÌ¾ðÆ® °áÁ¤ ÄÁÅØ½ºÆ®¸¦ °¡¸®Å²´Ù. ÀÌ Å¬¶óÀÌ¾ðÆ® Á¦°ø Æ÷ÀÎÅÍ´Â ¿Ï·áµÈ IRP¸¦ °¡Áö°í È£ÃâµÉ ¶§ IoCompletion ·çƾÀ¸·Î Àü´ÞµÈ´Ù. CompRoutineÀÌ NULLÀ̸é Contxt´Â NULLÀÌ´Ù.
- InEventType
- ´ÙÀ½Áß Çϳª·Î½á µî·ÏµÇ´Â À̺¥Æ® Çڵ鷯ÀÇ Å¸ÀÔÀ» ¼¼úÇÑ´Ù:
- TDI_EVENT_CONNECT
- ¿ø°ÝÁö¿¡ ÀÇÇØ¼ ¿£µåÆ÷ÀÎÆ® ´ë ¿£µåÆ÷ÀÎÆ® ¿¬°áÀÌ Á¦°øµÆÀ» ¶§ È£ÃâµÇ´Â ÁÖ¾îÁø ClientEventConnect Çڵ鷯¸¦ µî·ÏÇÑ´Ù.
- TDI_EVENT_DISCONNECT
- ¿ø°ÝÁö¿¡ ÀÇÇØ¼ ¼º¸³µÈ ¿£µåÆ÷ÀÎÆ® ´ë ¿£µåÆ÷ÀÎÆ® ¿¬°áÀÌ ´ÝÈú ¶§ È£ÃâµÇ´Â ÁÖ¾îÁø ClientEventDisconnect Çڵ鷯¸¦ µî·ÏÇÑ´Ù.
- TDI_EVENT_RECEIVE
- Á¤»óÀûÀÎ ¸®½Ãºê°¡ ¿ø°ÝÁö·ÎºÎÅÍ ¿£µåÆ÷ÀÎÆ® ´ë ¿£µåÆ÷ÀÎÆ® ¿¬°á·Î µé¾î¿Ã ¶§ È£ÃâµÇ´Â ÁÖ¾îÁø ClientEventReceive Çڵ鷯¸¦ µî·ÏÇϰí Ŭ¶óÀÌ¾ðÆ®´Â ¹öÆÛÈµÈ TSDUÀÇ ÀϺΠȤÀº ÀüºÎ¸¦ º¹»çÇÒ ±âȸ¸¦ ¾ò´Â´Ù.
- TDI_EVENT_CHAINED_RECEIVE
- Á¤»óÀûÀÎ ¸®½Ãºê°¡ ¿ø°ÝÁö·ÎºÎÅÍ ¿£µåÆ÷ÀÎÆ® ´ë ¿£µåÆ÷ÀÎÆ® ¿¬°á·Î µé¾î¿Ã ¶§ È£ÃâµÇ´Â ÁÖ¾îÁø ClientEventChainedReceive Çڵ鷯¸¦ µî·ÏÇϰí Ŭ¶óÀÌ¾ðÆ®´Â TdiReturnChainedReceives ÇÔ¼ö¸¦ È£ÃâÇÒ ¶§±îÁö ¹öÆÛÈµÈ Àüü TSDU¿¡ ´ëÇØ¼ Àбâ Àü¿ë Á¢±Ù¸¸À» ¾ò´Â´Ù.
- TDI_EVENT_RECEIVE_EXPEDITED
- ½Å¼ÓÇÑ ¸®½Ãºê°¡ ¿ø°ÝÁö·ÎºÎÅÍ ¿£µåÆ÷ÀÎÆ® ´ë ¿£µåÆ÷ÀÎÆ® ¿¬°á·Î µé¾î¿Ã ¶§ È£ÃâµÇ´Â ÁÖ¾îÁø ClientEventReceiveExpedited Çڵ鷯¸¦ µî·ÏÇϰí Ŭ¶óÀÌ¾ðÆ®´Â ¹öÆÛÈµÈ TSDUÀÇ ÀϺΠȤÀº ÀüºÎ¸¦ º¹»çÇÒ ±âȸ¸¦ ¾ò´Â´Ù.
- TDI_EVENT_CHAINED_RECEIVE_EXPEDITED
- ½Å¼ÓÇÑ ¸®½Ãºê°¡ ¿ø°ÝÁö·ÎºÎÅÍ ¿£µåÆ÷ÀÎÆ® ´ë ¿£µåÆ÷ÀÎÆ® ¿¬°á·Î µé¾î¿Ã ¶§ È£ÃâµÇ´Â ÁÖ¾îÁø ClientEventChainedReceiveExpedited Çڵ鷯¸¦ µî·ÏÇϰí Ŭ¶óÀÌ¾ðÆ®´Â TdiReturnChainedReceives ÇÔ¼ö¸¦ È£ÃâÇÒ ¶§±îÁö ¹öÆÛÈµÈ Àüü TSDU·ÎÀÇ ÀбâÀü¿ë Á¢±Ù¸¸À» ¾ò´Â´Ù.
- TDI_EVENT_RECEIVE_DATAGRAM
- ¿ø°ÝÁö·ÎºÎÅÍ µ¥ÀÌŸ±×·¥ÀÌ µé¾î¿Ã ‹š È£ÃâµÇ´Â ÁÖ¾îÁø ClientEventReceiveDatagram Çڵ鷯¸¦ µî·ÏÇϰí Ŭ¶óÀÌ¾ðÆ®´Â ¹öÆÛÈµÈ TSDUÀÇ ÀϺΠȤÀº ÀüºÎ¸¦ º¹»çÇÒ ±âȸ¸¦ ¾ò´Â´Ù.
- TDI_EVENT_CHAINED_RECEIVE_DATAGRAM
- ¿ø°ÝÁö·ÎºÎÅÍ µ¥ÀÌŸ±×·¥ÀÌ µé¾î¿Ã ‹š È£ÃâµÇ´Â ÁÖ¾îÁø ClientEventChainedReceiveDatagram Çڵ鷯¸¦ µî·ÏÇϰí Ŭ¶óÀÌ¾ðÆ®´Â TdiReturnChainedReceives ÇÔ¼ö¸¦ È£ÃâÇÒ ¶§±îÁö ¹öÆÛÈµÈ Àüü TSDU·ÎÀÇ ÀбâÀü¿ë Á¢±ÙÀ» ¾ò´Â´Ù.
- TDI_EVENT_SEND_POSSIBLE
- Àü¿¡ STATUS_DEVICE_NOT_READY¸¦ °¡Áö°í Á¦½ÃµÈ º¸³»±â ¸®Äù½ºÆ®¸¦ ¸®ÅÏÇÑ ÇϺÎÀÇ Æ®·£½ºÆ÷Æ®°¡ ´Ù½Ã Á¦½ÃµÈ Ŭ¶óÀÌ¾ðÆ® Á¦°ø µ¥ÀÌŸ¸¦ º¹»çÇÒ ¼ö ÀÖ´Â ³»ºÎÀÇ ¹öÆÛ°ø°£À» ´Ù½Ã °¡Áú ¶§ È£ÃâµÇ´Â ÁÖ¾îÁø ClientEventSendPossible Çڵ鷯¸¦ µî·ÏÇÑ´Ù.
- TDI_EVENT_ERROR
- ÀÌ ·ÎÄà ÁÖ¼Ò¿¡¼ ³×Æ®¿÷ I/O°¡ ºñ½Å¿ëÀûÀÎ ÇϺÎÀÇ µå¶óÀ̹ö¿¡¼ ¿¡·¯°¡ ¹ß»ýÇÑ´Ù¸é È£ÃâµÇ´Â ÁÖ¾îÁø ClientEventError Çڵ鷯¸¦ µî·ÏÇÑ´Ù.
- TDI_EVENT_ERROR_EX
- ÀÌ ·ÎÄà ÁÖ¼Ò¿¡¼ ³×Æ®¿÷ I/O°¡ ºñ½Å¿ëÀûÀÎ ÇϺÎÀÇ µå¶óÀ̹ö¿¡¼ ¿¡·¯°¡ ¹ß»ýÇÑ´Ù¸é È£ÃâµÇ´Â ÁÖ¾îÁø ClientEventErrorEx Çڵ鷯¸¦ µî·ÏÇÑ´Ù. ÇϺÎÀÇ µå¶óÀ̹ö°¡ ÀÌ ÀεðÄÉÀ̼ÇÀ» Áö¿øÇÑ´Ù¸é ClientEventError º¸´Ù´Â ClientEventErrorEx ÇÔ¼ö·Î ±×·¯ÇÑ ¿¡·¯¿¡ ´ëÇØ¼ ¹öÆÛÈµÈ Ãß°¡Á¤º¸¸¦ Á¦°øÇÑ´Ù.
¾Õ¼± ½Ã½ºÅÛ Á¤ÀÇ À̺¥Æ®¿¡ Ãß°¡ÇÏ¿© Æ®·£½ºÆ÷Æ®´Â Ŭ¶óÀÌ¾ðÆ®·Î À̺¥Æ®ÀÇ Æ®·£½ºÆ÷Æ® ƯÁ¤ Å뺸¸¦ Áö¿øÇϱâ À§Çؼ ÀÌ ÀÎÅÍÆäÀ̽º¸¦ ¿¬ÀåÇÑ´Ù. ±×·¯ÇÑ Æ®·£½ºÆ÷Æ®´Â °¡Àå Áß¿äÇÑ ºñÆ®°¡ ¼³Á¤µÈ TDI_EVENT_XXX Äڵ带 Á¤ÀÇÇØ¾ßÇÑ´Ù.
- InEventHandler
- µî·ÏµÇ´Â ClientEventXxx Çڵ鷯ÀÇ ¿£Æ®¸® Æ÷ÀÎÆ®¸¦ ¼¼úÇÑ´Ù. Ŭ¶óÀÌ¾ðÆ®´Â Àü¿¡ µî·ÏµÈ À̺¥Æ® Çڵ鷯·ÎÀÇ Å뺸¸¦ µð½º¿¡À̺íÇϱâ À§Çؼ ÀÌ ¸Å°³º¯¼ö¸¦ NULL·Î ¼³Á¤ÇÒ ¼ö ÀÖ´Ù.
- InEventContext
- Æ®·£½ºÆ÷Æ®¿¡ ÀÇÇØ¼ È£ÃâµÆÀ» ¶§ ClientEventXxx ·çƾÀ¸·Î Àü´ÞµÇ´Â È£ÃâÀÚ °áÁ¤ ÄÁÅØ½ºÆ®¸¦ °¡¸®Å²´Ù. InEventHandler°¡ NULLÀ̸é ÀÌ ¸Å°³º¯¼ö´Â NULLÀ̾î¾ßÇÑ´Ù.
ÁÖ¼®
Ŭ¶óÀÌ¾ðÆ®°¡ ÁÖ¼Ò¸¦ ±¸ÇöÇÏ´Â ÆÄÀÏ °´Ã¼¸¦ óÀ½ ¿¾úÀ» ¶§ ÇϺÎÀÇ Æ®·£½ºÆ÷Æ®´Â ¸ðµç À̺¥Æ® Çڵ鷯¸¦ NULL·Î ÃʱâÈÇÑ´Ù.
TdiBuildSetEventHandler ÇÔ¼ö´Â ÁÖ¾îÁø IRPÀÇ Æ®·£½ºÆ÷Æ® I/O ½ºÅà ·ÎÄÉÀ̼Ǿȿ¡ MajorFunction·Î½á IRP_MJ_INTERNAL_DEVICE_CONTROLÀ» ¼³Á¤Çϰí MinorFunction·Î½á TDI_SET_EVENT_HANDLER¸¦ ¼³Á¤ÇÑ´Ù.
TdiBuildSetEventHandler ÇÔ¼ö¿¡ ÀÇÇØ¼ ¼³Á¤µÇ°í IoCallDriver ÇÔ¼ö¸¦ °¡Áö°í ÇϺÎÀÇ Æ®·£½ºÆ÷Æ®·Î Á¦½ÃµÈ °¢°¢ÀÇ IRP¸¦ °¡Áö°í Ŭ¶óÀÌ¾ðÆ®´Â Æ¯Á¤ Æ®·¡½ºÆ÷Æ® ÁÖ¼Ò»ó¿¡¼ ¹ß»ýÇÒ ¼ö ÀÖ´Â ÁÖ¾îÁø À̺¥Æ® ŸÀÔÀ» À§Çؼ ÇϳªÀÇ À̺¥Æ® Çڵ鷯¸¦ µî·ÏÇÑ´Ù. Æ®·£½ºÆ÷Æ®¿¡ ÀÇÇØ¼ ClientEventXxx ·çƾÀ¸·Î Àü´ÞµÇ´Â ´õ ÇÏÀ§ ·¹º§ÀÇ NDIS µå¶óÀ̹ö·ÎºÎÅÍÀÇ ÀεðÄÉÀ̼ÇÀº º¸Åë IRQL DISPATCH_LEVEL¿¡¼ ¹ß»ýÇÑ´Ù. ÀÌ Å¬¶óÀÌ¾ðÆ® Á¦°ø À̺¥Æ® Çڵ鷯¸¦ À§Çؼ È£ÃâÀÚ´Â ºñÆäÀÌÁöÈµÈ Ç®·ÎºÎÅÍ InEventContext¿¡ °ø°£À» ÇÒ´çÇØ¾ßÇÑ´Ù.
Ŭ¶óÀÌ¾ðÆ®´Â ZwCreateFile ÇÔ¼ö·ÎÀÇ ¼º°øÀûÀΠȣÃâÀ» °¡Áö°í ÁÖ¼Ò¸¦ ±¸ÇöÇÏ´Â ÆÄÀÏ °´Ã¼¸¦ ¿ÀÚ¸¶ÀÚ ClientEvent(Chained)ReceiveDatagram°ú ClientEventError(Ex) Çڵ鷯¸¦ µî·ÏÇÒ ¼ö ÀÖ´Ù. ÁÖ¼Ò¿Í ¿¬°á ¿£µåÆ÷ÀÎÆ®¸¦ ±¸ÇöÇÏ´Â ÆÄÀÏ °´Ã¼¸¦ ¿°í ÇϺÎÀÇ Æ®·£½ºÆ÷Æ®·Î ÁÖ¼Ò¸¦ ¿¬°ü½ÃŰ´Â ¸®Äù½ºÆ®¸¦ ¼º°øÇÏÀÚ¸¶ÀÚ Å¬¶óÀÌ¾ðÆ®´Â ClientEventConnect Çڵ鷯¸¦ µî·ÏÇÒ ¼ö ÀÖ´Ù.
¸î¸î InEventType °ª¿¡ ´ëÇØ¼ ÁÖ¾îÁø ÆÄÀÏ °´Ã¼¿¡ ÀÇÇØ¼ ±¸ÇöµÈ ÁּҴ Ŭ¶óÀÌ¾ðÆ®°¡ ClientEventXxx Çڵ鷯¸¦ µî·ÏÇϱâ Àü¿¡ Ŭ¶óÀÌ¾ðÆ®¿¡ ÀÇÇØ¼ ¿¬°á ¿£µåÆ÷ÀÎÆ®¿Í ¿¬°üµÇ¾î¾ßÇÑ´Ù. ƯÈ÷ Ŭ¶óÀÌ¾ðÆ®´Â ¿¬°á ƯÁ¤ ±âº»¿¡¼ ¸¸µé¾îÁø ³×Æ®¿÷ Àü¼ÛÀ» À§Çؼ ClientEvent(Chained)Receive(Expedited), ClientEventDisconnect, ±×¸®°í ClientEventSendPossible Çڵ鷯¸¦ µî·ÏÇϱâ Àü¿¡ ·ÎÄà ÁÖ¼Ò¸¦ °¡Áö°í ¿¬°á ¿£µåÆ÷ÀÎÆ®¸¦ ¿¬°ü½ÃÄѾßÇÑ´Ù. Æ®·£½ºÆ÷Æ®°¡ Áö¿¬µÈ ¿¬°á ½ÂÀÎÀ» Áö¿øÇÏÁö ¾Ê´Â´Ù¸é Ŭ¶óÀÌ¾ðÆ®´Â À̺¥Æ® Çڵ鷯¸¦ µî·ÏÇÏ´Â À̺¥Æ® Çڵ鷯 ¼³Á¤ ¸®Äù½ºÆ®¸¦ ÇÒ ¶§ ÁÖ¼Ò¸¦ ±¸ÇöÇÏ´Â ¿¸° ÆÄÀÏ °´Ã¼¿Í ÀÌ¹Ì ¿¬°üµÈ ¿£µåÆ÷ÀÎÆ® ´ë ¿£µåÆ÷ÀÎÆ® ¿¬°áÀÌ È°¼ºÈµÆ´Ù°í °¡Á¤ÇÑ´Ù.
³»ºÎÀûÀ¸·Î º¸³»±â µ¥ÀÌŸ¸¦ ¹öÆÛÈÇÑ Æ®·£½ºÆ÷Æ®ÀÇ Å¬¶óÀÌ¾ðÆ®¸¸ÀÌ ClientEventSendPossible Çڵ鷯¸¦ µî·ÏÇÒ ¼ö ÀÖ´Ù.
ÀϹÝÀûÀ¸·Î TDI Æ®·£½ºÆ÷Æ®´Â °°Àº Á¾·ùÀÇ À̺¥Æ®°¡ ÁøÇàÁßÀÎ µ¿¾È¿¡ Ŭ¶óÀÌ¾ðÆ®·Î À̺¥Æ®¸¦ ÀεðÄÉÀÌÆ®ÇÒ ¼ö ÀÖ´Ù. ´Ù½Ã¸»Çϸé ClientEventXxx Çڵ鷯´Â ´Ù½Ã ½ÇÇàÇÑ´Ù. ¶ÇÇÑ ÀÌ ·çƾÁß¿¡ Çϳª¸¦ µî·ÏÇϴ Ŭ¶óÀ̾ðÆ®ÀÇ À̺¥Æ® Çڵ鷯 ¼³Á¤ IRP°¡ ¿Ï·áµÇ±â Àü¿¡ Æ®·£½ºÆ÷Æ®´Â ClientEvent(Chained)Receive(Expedited) ȤÀºClientEvent(Chained)Receive(Datagram) ÇÔ¼ö¸¦ È£ÃâÇÒ ¼ö ÀÖ´Ù. °á±¹ Ŭ¶óÀÌ¾ðÆ®´Â ClientEvent(Chained)Receive(Xxx) Çڵ鷯ÀÇ µî·ÏÀ» ¸®Äù½ºÆ®ÇÏÀÚ¸¶ÀÚ ¸®½ÃºêÀÇ Ã³¸®¸¦ ÁغñÇØ¾ßÇÑ´Ù.
Ŭ¶óÀÌ¾ðÆ®°¡ ÇϺÎÀÇ Æ®·£½ºÆ÷Æ®·Î TdiBuildReceive ȤÀº TdiBuildReceiveDatagram ÇÔ¼ö¸¦ °¡Áö°í ¼³Á¤µÈ ¸®½Ãºê ȤÀº ¸®½Ãºê µ¥ÀÌŸ±×·¥ IRP¸¦ Á¦½ÃÇÒ ¶§¸¶´Ù µî·ÏµÈ ClientEvent(Chained)Receive(Xxx) Çڵ鷯·ÎÀÇ È£ÃâÀº µð½º¿¡À̺íµÈ´Ù. ÇϺÎÀÇ Æ®·£½ºÆ÷Æ®°¡ ±×·¯ÇÑ IRP¸¦ °¡Áö°í È£ÃâµÈ ÈÄ¿¡ ÇϺÎÀÇ Æ®·£½ºÆ÷Æ®´Â µé¾î¿À´Â ¸®½Ãºê ÀεðÄÉÀ̼ÇÀ» °¡Áö°í µî·ÏµÈ ClientEvent(Chained)Receive(Xxx) ·çƾÀÇ È£ÃâÀ» ´Ù½Ã ½ÃÀÛÇϱâ Àü¿¡ ±× IRP¸¦ ¿Ï·áÇϱâ À§Çؼ ÇÊ¿äÇÑ ¸ðµç ¿¬»êÀ» ¼öÇàÇÑ´Ù.
°°Àº InEventTypeÀ» °¡Áö°í ¶Ç´Ù¸¥ À̺¥Æ® Çڵ鷯 ¼³Á¤ ¸®Äù½ºÆ®¸¦ ÇϹǷνá Ŭ¶óÀÌ¾ðÆ®´Â µî·ÏµÈ À̺¥Æ® Çڵ鷯¸¦ µð½º¿¡À̺íÇÒ ¼ö ÀÖ´Ù. ÇÏÁö¸¸ TdiBuildSetEventHandler Çڵ鷯ÀÇ InEventHandler¿Í InEventContext ¸Å°³º¯¼ö·Î½á NULLÀ» ¼¼úÇÑ´Ù.
PnP¿Í Àü¿ø »óÅ º¯ÈÅ뺸¸¦ À§ÇØ ClientPnPXxx Çڵ鷯¸¦ µî·ÏÇÏ·Á¸é Ŭ¶óÀÌ¾ðÆ®´Â IoCallDriver ÇÔ¼ö¿¡ ÀÇÇØ¼ µÚµû¸£´Â TdiBuildSetEventHandler ÇÔ¼öº¸´Ù´Â TdiRegisterPnPHandlers ÇÔ¼ö¸¦ È£ÃâÇÑ´Ù.
|