TdiBuildInternalDeviceControlIrp

PIRP
   TdiBuildInternalDeviceControlIrp (
       IN CCHAR IrpSubFunction,
       IN PDEVICE_OBJECT DeviceObject,
       IN PFILE_OBJECT FileObject,
       IN PKEVENT Event,
       IN PIO_STATUS_BLOCK IoStatusBlock
  
   );

TdiBuildInternalDeviceControlIrp ÇÔ¼ö´Â Ŭ¶óÀÌ¾ðÆ®°¡ ½ÃÀÛÇÏ´Â ³»ºÎ ÀåÄ¡ ÅëÁ¦ ¸®Äù½ºÆ®¸¦ À§Çؼ­ IRP¸¦ ÇÒ´çÇÑ´Ù. ±×°ÍÀÌ ¸®ÅÏÇÑ ÈÄ¿¡ Ŭ¶óÀÌ¾ðÆ®´Â IoCallDriver ÇÔ¼ö¸¦ °¡Áö°í ¸®Äù½ºÆ®¸¦ ÇϱâÀü¿¡ ÇϺΠƮ·£½ºÆ÷Æ® µå¶óÀ̹öÀÇ I/O ½ºÅà ·ÎÄÉÀ̼ÇÀ» ¼³Á¤Çϱâ À§Çؼ­ ¸®ÅÏµÈ IRP¸¦ °¡Áö°í ¶Ç´Ù¸¥ TdiBuildXxx ¸ÅÅ©·Î¸¦ È£ÃâÇÑ´Ù.

¸Å°³º¯¼ö

IrpSubFunction
¸®ÅÏµÈ IRP¸¦ À§Çؼ­ MinorFunction·Î½á TdiBuildXxx ¸ÅÅ©·Î·ÎÀÇ ¼øÂ÷ÀûÀΠȣÃâ¿¡¼­ ¼³Á¤µÉ TDI_XXX Äڵ带 ¼­¼úÇÑ´Ù. ÀÌ ¸Å°³º¯¼ö´Â ´ÙÀ½Áß Çϳª°¡ µÉ ¼ö ÀÖ´Ù:

TDI_ASSOCIATE_ADDRESS
È£ÃâÀÚ´Â TdiBuildAssociateAddress ÇÔ¼ö·Î ¸®ÅÏµÈ IRP¸¦ Àü´ÞÇÒ °ÍÀÌ´Ù.

TDI_DISASSOCIATE_ADDRESS
È£ÃâÀÚ´Â TdiBuildDisassociateAddress ÇÔ¼ö·Î ¸®ÅÏµÈ IRP¸¦ Àü´ÞÇÒ °ÍÀÌ´Ù.

TDI_CONNECT
È£ÃâÀÚ´Â TdiBuildConnect ÇÔ¼ö·Î ¸®ÅÏµÈ IRP¸¦ Àü´ÞÇÒ °ÍÀÌ´Ù.

TDI_LISTEN
È£ÃâÀÚ´Â TdiBuildListen ÇÔ¼ö·Î ¸®ÅÏµÈ IRP¸¦ Àü´ÞÇÒ °ÍÀÌ´Ù.

TDI_ACCEPT
È£ÃâÀÚ´Â TdiBuildAccept ÇÔ¼ö·Î ¸®ÅÏµÈ IRP¸¦ Àü´ÞÇÒ °ÍÀÌ´Ù.

TDI_DISCONNECT
È£ÃâÀÚ´Â TdiBuildDisconnect ÇÔ¼ö·Î ¸®ÅÏµÈ IRP¸¦ Àü´ÞÇÒ °ÍÀÌ´Ù.

TDI_SEND
È£ÃâÀÚ´Â TdiBuildSend ÇÔ¼ö·Î ¸®ÅÏµÈ IRP¸¦ Àü´ÞÇÒ °ÍÀÌ´Ù.

TDI_RECEIVE
È£ÃâÀÚ´Â TdiBuildReceive ÇÔ¼ö·Î ¸®ÅÏµÈ IRP¸¦ Àü´ÞÇÒ °ÍÀÌ´Ù.

TDI_SEND_DATAGRAM
È£ÃâÀÚ´Â TdiBuildSendDatagram ÇÔ¼ö·Î ¸®ÅÏµÈ IRP¸¦ Àü´ÞÇÒ °ÍÀÌ´Ù.

TDI_RECEIVE_DATAGRAM
È£ÃâÀÚ´Â TdiBuildReceiveDatagram ÇÔ¼ö·Î ¸®ÅÏµÈ IRP¸¦ Àü´ÞÇÒ °ÍÀÌ´Ù.

TDI_SET_EVENT_HANDLER
È£ÃâÀÚ´Â TdiBuildSetEventHandler ÇÔ¼ö·Î ¸®ÅÏµÈ IRP¸¦ Àü´ÞÇÒ °ÍÀÌ´Ù.

TDI_QUERY_INFORMATION
È£ÃâÀÚ´Â TdiBuildQueryInformation ÇÔ¼ö·Î ¸®ÅÏµÈ IRP¸¦ Àü´ÞÇÒ °ÍÀÌ´Ù.

TDI_SET_INFORMATION
È£ÃâÀÚ´Â TdiBuildSetInformation ÇÔ¼ö·Î ¸®ÅÏµÈ IRP¸¦ Àü´ÞÇÒ °ÍÀÌ´Ù.

TDI_ACTION
È£ÃâÀÚ´Â TdiBuildAction ÇÔ¼ö·Î ¸®ÅÏµÈ IRP¸¦ Àü´ÞÇÒ °ÍÀÌ´Ù.

DeviceObject
ÇϺÎÀÇ TDI Æ®·£½ºÆ÷Æ® µå¶óÀ̹ö¿¡ ÀÇÇØ¼­ »ý¼ºµÈ ÀåÄ¡ °´Ã¼¸¦ °¡¸®Å²´Ù.

FileObject
ÁÖ¾îÁø IrpSubFunction¿¡ ÀÇÁ¸ÇÏ¿© ÁÖ¼Ò, ¿¬°á ¿£µåÆ÷ÀÎÆ®, ÅëÁ¦ ä³ÎÀ» ±¸ÇöÇÏ´Â ÆÄÀÏ °´Ã¼¸¦ °¡¸®Å²´Ù.

Event
È£ÃâÀÚ°¡ ÀúÀå¼Ò¸¦ Á¦°øÇϱâ À§Çؼ­ ÃʱâÈ­µÈ À̺¥Æ® °´Ã¼¸¦ °¡¸®Å²´Ù.

IoStatusBlock
IO_STATUS_BLOCK ŸÀÔÀÇ È£ÃâÀÚ Á¦°ø º¯¼ö¸¦ °¡¸®Å²´Ù.

¸®Åϰª

TdiBuildInternalDeviceControlIrp ÇÔ¼ö´Â ÇÒ´çµÈ IRP¿¡ ´ëÇÑ Æ÷ÀÎÅ͸¦ ¸®ÅÏÇÑ´Ù. ÇÒ´ç ½Ãµµ°¡ ½ÇÆÐÇÑ´Ù¸é NULLÀ» ¸®ÅÏÇÑ´Ù.

ÁÖ¼®

TDI Æ®·£½ºÆ÷Æ®ÀÇ Ä¿³Î ¸ðµå Ŭ¶óÀÌ¾ðÆ®´Â TdiBuildInternalDeviceControlIrp ÇÔ¼öÀÇ È£Ãâ¾øÀÌ IRP¸¦ TdiBuildXxx ¸ÅÅ©·Î·Î Á÷Á¢ ¿©ÀüÈ÷ »óÀ§ ·¹º§ÀÎ ´ÏÆ®¿÷ ÄÄÆ÷³ÍÆ®¿¡ ÀÇÇØ¼­ ¹ØÀ¸·Î Àü´ÞµÈ´Ù.

±×·¯³ª ±×·¯ÇÑ Å¬¶óÀÌ¾ðÆ®´Â µé¾î¿À´Â IRP¸¦ ÇÏÀÌÀçÅ·ÇØ¼­´Â ¾ÈµÈ´Ù. ±×¸®°í ±× ´ë½Å¿¡ ÇϺΠƮ·£½ºÆ÷Æ®·ÎÀÇ ³»ºÎ ÀåÄ¡ ÅëÁ¦ ¸®Äù½ºÆ®¸¦ Çϱâ À§Çؼ­ ±×°ÍÀ» Àç»ç¿ëÇÑ´Ù. ´ë½Å¿¡ Ŭ¶óÀÌ¾ðÆ®´Â ±×·¯ÇÑ ¸®Äù½ºÆ®¸¦ °¡Áö°í ÀÚ½ÅÀÇ IRP¸¦ ¾ò±â À§Çؼ­ TdiBuildInternalDeviceControlIrp ÇÔ¼ö¸¦ È£ÃâÇÒ ¼ö ÀÖ´Ù.

TdiBuildInternalDeviceControl ÇÔ¼ö°¡ IRP¿¡ ´ëÇÑ Æ÷ÀÎÅ͸¦ ¸®ÅÏÇÑ ÈÄ¿¡ Ŭ¶óÀÌ¾ðÆ®´Â IoCallDriver ÇÔ¼ö¸¦ °¡Áö°í Æ®·£½ºÆ÷Æ®ÂÊÀ¸·Î IRP¸¦ Àü´ÞÇϱâ Àü¿¡ TDI_XXX¸¦ ¿ä±¸ÇÏ´Â Ãß°¡ÀûÀÎ ¸Å°³º¯¼ö¿¡ µû¶ó¼­ ÀûÀýÇÑ TdiBuildXxx ¸ÅÅ©·Î·Î IRP¸¦ Àü´ÞÇØ¾ßÇÑ´Ù. TdiBuildInternalDeviceControl ÇÔ¼ö´Â ÇÒ´çµÈ IRP¾È¿¡¼­ ÇϺΠƮ·£½ºÆ÷Æ®ÀÇ I/O ½ºÅà ·ÎÄÉÀ̼ÇÀ» ºÎºÐÀûÀ¸·Î ¼³Á¤ÇÑ´Ù. ±×·¯³ª TdiBuildXxx ¸ÅÅ©·Î°¡ ÇÏ´Â °Íó·³ TDI_XXX ¸®Äù½ºÆ®¸¦ À§Çؼ­ TDI Æ®·£½ºÆ÷Æ®ÀÇ ¿¹»ó¿¡ µû¶ó¼­ I/O ½ºÅà ·ÎÄÉÀ̼ÇÀ» Æ÷¸ËÇÏÁö´Â ¾Ê´Â´Ù.

IoCallDriver ÇÔ¼ö·ÎÀÇ È£Ãâ¿¡ ´ëÇÑ Æ¯Â¡¿¡ ´ëÇØ¼­´Â Ä¿³Î ¸ðµå µå¶óÀ̹ö ·¹ÆÛ·±½º¸¦ ºÁ¶ó.

Ŭ¶óÀÌ¾ðÆ®°¡ TdiBuildInternalDeviceControlIrp ÇÔ¼ö¸¦ È£ÃâÇßÀ» ¶§ À̺¥Æ® Æ÷ÀÎÅ͸¦ Á¦°øÇÏ´Ù¸é I/O ¸Å´ÏÀú´Â IRP°¡ ÇÏÀ§ µå¶óÀ̹ö¿¡ ÀÇÇØ¼­ ¿Ï·áµÉ ¶§ À̺¥Æ®¸¦ ½Ã±×³Î »óÅ·Π¼³Á¤ÇÒ °ÍÀÌ´Ù. ±×·¯³ª Ŭ¶óÀÌ¾ðÆ®´Â Å¬¶óÀÌ¾ðÆ® »ý¼º ½º·¹µå³ª °¡´ÉÇÏ´Ù¸é À̰ÍÀÌ È£ÃâµÇ¾úÀ» ¶§ ½ÇÇàµÇ´Â ½º·¹µåó·³ ÀûÀýÇÑ ½º·¹µå ÄÁÅØ½ºÆ®¿¡¼­ IRQL PASSIVE_LEVEL¿¡¼­ ±â´Ù¸®Áö ¾Ê´Â´Ù¸é IRPÀÇ ¿Ï·á¸¦ À§Çؼ­ ±× À̺¥Æ®¿¡¼­ ±â´Ù¸± ¼ö ¾ø´Ù.

TdiBuildInternalDeviceControlIrp ÇÔ¼öÀÇ È£ÃâÀÚ´Â IRQL PASSIVE_LEVEL¿¡¼­ ½ÇÇàµÇ¾î¾ßÇÑ´Ù. °á°úÀûÀ¸·Î Ŭ¶óÀÌ¾ðÆ®´Â ÀÌ ÇÔ¼ö¸¦ °¡Áö°í ¸î¸î IRP¸¦ ¹Ì¸® ÇÒ´çÇØ¾ßÇÑ´Ù. ±×·¡¼­ Ŭ¶óÀÌ¾ðÆ®´Â »óÀ§ IRQL¿¡¼­ ½ÇÇàµÉ ¶§ ±×°ÍÀ» TDI_XXX ¸®Äù½ºÆ®¸¦ Á¦ÃâÇϱâ À§Çؼ­ »ç¿ëÇÒ ¼ö ÀÖ´Ù.