TdiRegisterPnPHandlers
NTSTATUS
TdiRegisterPnPHandlers(
IN PTDI_CLIENT_INTERFACE_INFO ClientInterfaceInfo,
IN ULONG InterfaceInfoSize,
OUT HANDLE *BindingHandle
);
TdiRegisterPnPHandlers ÇÔ¼ö´Â ±â°è¿¡¼ »õ·Î¿î NIC ¹ß°ßÀ̳ª ±â°è¿¡¼ Á¸ÀçÇÏ´Â NICÀÇ Á¦°Å, ½Ã½ºÅÛ Àü¿ø»óÅ º¯È, ±×¸®°í ÇϺÎÀÇ Æ®·£½ºÆ÷Æ®¿¡ ÀÇÇØ¼ µî·ÏµÇ°í µî·ÏÇØÁ¦µÇ´Â ³×Æ®¿÷ ÁÖ¼ÒÀÇ Ãâ¹ß°ú µµÂø°ú °°Àº µ¿Àû PnP À̺¥Æ®ÀÇ ¼øÂ÷ÀûÀÎ Å뺸¸¦ ¹Þ±âÀ§Çؼ Ŭ¶óÀÌ¾ðÆ® Á¦°ø ClientPnPXxx ·çƾÀÇ ¸ðÀ½À» µî·ÏÇÑ´Ù.
¸Å°³º¯¼ö
- ClientInterfaceInfo
- ½ºÅÿ¡¼ ÀÌ ±¸Á¶Ã¼·Î ȤÀº ´ÙÀ½°ú °°ÀÌ Æ÷¸ËµÇ´Â È£ÃâÀÚ ÇÒ´ç, ±×¸®°í 0À¸·Î ÃʱâÈµÈ ¹öÆÛ¸¦ °¡¸®Å²´Ù:
typedef struct _TDI20_CLIENT_INTERFACE_INFO {
union {
struct {
UCHAR MajorTdiVersion; // ÇöÀç 2
UCHAR MinorTdiVersion; // ÇöÀç 0
};
// ´ÙÀ½Àº »ç¿ëÇÏÁö ¾Ê´Â´Ù. (¾²ÀÌÁö¾Ê´Â Æ®·£½ºÆ÷Æ®)
USHORT TdiVersion;
};
USHORT Unused;
PUNICODE_STRING ClientName;
TDI_PNP_POWER_HANDLER PnPPowerHandler;
union {
TDI_BINDING_HANDLER BindingHandler;
// ´ÙÀ½Àº »ç¿ëÇÏÁö ¾Ê´Â´Ù. (¾²ÀÌÁö¾Ê´Â Æ®·£½ºÆ÷Æ®)
struct {
TDI_BIND_HANDLER BindHandler;
TDI_UNBIND_HANDLER UnBindHandler;
};
};
union {
struct {
TDI_ADD_ADDRESS_HANDLER_V2 AddAddressHandlerV2;
TDI_DEL_ADDRESS_HANDLER_V2 DelAddressHandlerV2;
};
// ´ÙÀ½Àº »ç¿ëÇÏÁö ¾Ê´Â´Ù. (¾²ÀÌÁö¾Ê´Â Æ®·£½ºÆ÷Æ®)
struct {
TDI_ADD_ADDRESS_HANDLER AddAddressHandler;
TDI_DEL_ADDRESS_HANDLER DelAddressHandler;
};
};
} TDI20_CLIENT_INTERFACE_INFO, *PTDI20_CLIENT_INTERFACE_INFO;
typedef TDI20_CLIENT_INTERFACE_INFO TDI_CLIENT_INTERFACE_INFO;
- InterfaceInfoSize
- ClientInterfaceInfo¿¡ ¹öÆÛÀÇ ¹ÙÀÌÆ® ¼ö¸¦ ¼¼úÇÑ´Ù.
- BindingHandle
- TdiRegisterPnPHandlers ÇÔ¼ö°¡ È£ÃâÀ» ¼º°øÇÑ´Ù¸é ºÒÅõ¸íÇÑ TDI Á¦°ø ÇÚµéÀ» ¸®ÅÏÇϴ ȣÃâÀÚ Á¦°ø º¯¼öÀÇ ÁÖ¼Ò¸¦ ¼¼úÇÑ´Ù. È£ÃâÀÚ´Â TdiDeregisterPnPHandlers ÇÔ¼ö³ª ¸Å¿ì µå¹°°Ô TdiEnumerateAddresses ÇÔ¼ö·ÎÀÇ ¼øÂ÷ÀûÀΠȣÃâÀ» À§Çؼ ÀÌ ÇÚµéÀ» ÀúÀåÇØ¾ßÇÑ´Ù.
¸®Åϰª
TdiRegisterPnPHandlers ÇÔ¼ö´Â Á¦°øµÈ ClientPnPXxx ·çƾÀÌ ¼øÂ÷ÀûÀÎ PnP¿Í Àü¿ø»óÅ º¯È À̺¥Æ®¸¦ ÀνÄÇÑ´Ù¸é STATUS_SUCCESS¸¦ ¸®ÅÏÇÑ´Ù. ±×·¸Áö ¾ÊÀ¸¸é ´ÙÀ½Áß Çϳª¸¦ ¸®ÅÏÇÒ ¼ö ÀÖ´Ù:
- TDI_STATUS_BAD_VERSION
- È£ÃâÀÚ°¡ TDI_CURRENT_VERSIONº¸´Ù Å« ¹«¾ð°¡·Î ClientInterfaceInfo¿¡ ±¸Á¶Ã¼ ¾È¿¡ ¹öÀü ¸â¹ö¸¦ ¼³Á¤ÇÑ´Ù¸é È£ÃâÀÚ´Â »óÀ§ ·¹º§ ³×Æ®¿÷ ÄÄÆ÷³ÍÆ®·Î ÀÌ ¸®ÅϰªÀ» Àü´ÞÇÏÁö ¸»¾Æ¾ßÇÑ´Ù.
- TDI_STATUS_BAD_CHARACTERISTICS
- ÁÖ¾îÁø InterfaceInfoSize °ªÀÌ sizeof(TDI_CLIENT_INTERFACE_INFO)º¸´Ù ÀÛ´Ù. È£ÃâÀÚ´Â »óÀ§ ·¹º§ ³×Æ®¿÷ ÄÄÆ÷³ÍÆ®·Î ÀÌ ¸®ÅϰªÀ» Àü´ÞÇÏÁö ¸»¾Æ¾ßÇÑ´Ù.
- STATUS_INSUFFICIENT_RESOURCES
- TDI´Â µî·Ï ¸®Äù½ºÆ®¸¦ ó¸®Çϱâ À§Çؼ ÇÊ¿äÇÑ Å¬¶óÀ̾ðÆ®ÀÇ Å뺸¿Í ´Ù¸¥ ÀÚ¿øÀ» À§Çؼ »óŸ¦ À¯ÁöÇÏ´Â ¹öÆÛ¸¦ ÇÒ´çÇÏÁö ¾Ê¾Ò´Ù.(¾Æ¸¶µµ TdiRegisterPnPHandlers ÇÔ¼ö·ÎÀÇ ¼øÂ÷ÀûÀΠȣÃâÀº ÇöÀç »ç¿ëÁßÀÎ ÀÚ¿øÀÌ ÇØÁ¦µÈ´Ù¸é ÀÌ ÀÌÀ¯¸¦ À§Çؼ ½ÇÆÐÇÏÁö ¾ÊÀ» °ÍÀÌ´Ù.)
ÁÖ¼®
È£ÃâÀÚ´Â PnP/Àü¿ø»óÅ º¯È, ¹ÙÀεù º¯È, ±×¸®°í ³×Æ®¿÷ ÁÖ¼Ò º¯ÈÀÇ ¼øÂ÷ÀûÀÎ Å뺸¸¦ ¹Þ±â À§Çؼ ClientInterfaceInfo¿¡ ´ÙÀ½ Á¤º¸¸¦ Á¦°øÇؾßÇÑ´Ù:
- MajorTdiVersionÀº 2³ª TDI_CURRENT_MAJOR_VERSIONÀ¸·Î ¼³Á¤ÇÑ´Ù.
- MinorTdiVersionÀº 0À̳ª TDI_CURRENT_MINOR_VERSIONÀ¸·Î ¼³Á¤ÇÑ´Ù.
- ClientNameÀº ·¹Áö½ºÆ®¸® registry HKLM\System\CCS\Services Æ®¸®¿¡ Ŭ¶óÀÌ¾ðÆ®·Î ¸í¸íµÈ ۸¦ ¼¼úÇÏ´Â ¹öÆÛÈµÈ À¯´ÏÄÚµåÀÇ ÁÖ¼Ò¸¦ ¼³Á¤ÇÑ´Ù.
- PnPPowerHandler´Â È£ÃâÀÚÀÇ ClientPnPPowerChange ·çƾÀÇ ¿£Æ®¸® Æ÷ÀÎÆ®¸¦ ¼³Á¤ÇÑ´Ù.
- BindingHandler´Â È£ÃâÀÚÀÇ ClientPnPBindingChange ·çƾÀÇ ¿£Æ®¸® Æ÷ÀÎÆ®¸¦ ¼³Á¤ÇÑ´Ù.
- AddAddressHandlerV2´Â È£ÃâÀÚÀÇ ClientPnPAddNetAddress ·çƾÀÇ ¿£Æ®¸® Æ÷ÀÎÆ®¸¦ ¼³Á¤ÇÑ´Ù.
- DelAddressHandlerV2´Â È£ÃâÀÚÀÇ ClientPnPDelNetAddress ·çƾÀÇ ¿£Æ®¸® Æ÷ÀÎÆ®¸¦ ¼³Á¤ÇÑ´Ù.
TdiRegisterPnPHandlers ÇÔ¼ö¿¡ ´ëÇÑ ¼º°øÀûÀΠȣÃâÀÇ ¸®ÅÏ¿¡¼ ClientPnPBindingChange¿Í ClientPnPAddNetAddress ·çƾÀº ÀÌ¹Ì µî·ÏµÈ ³×Æ®¿÷ ÁÖ¼Ò¿Í Æ®·£½ºÆ÷Æ®¿¡ ´ëÇØ¼ TDI°¡ ÇöÀç ÀÌ¿ëÇÒ ¼ö ÀÖ´Â ¸ðµç ½Ã½ºÅÛ ¼³Á¤ ½Ã°£ Á¤º¸¸¦ °¡Áö°í ÇѹøÀÌ»ó È£ÃâµÆ´Ù. Áï TDI´Â ¹æ±Ý µî·ÏµÈ Ŭ¶óÀ̾ðÆ®ÀÇ PnP ·çƾÀ¸·Î ´ÙÀ½ÀÇ ÃʱâȽÿ¡ È£ÃâÀ» ÇÑ´Ù:
- ClientPnPBindingChange ÇÔ¼ö´Â ÀÌ¹Ì TDI¸¦ °¡Áö°í µî·ÏµÈ Æ®·£½ºÆ÷Æ®¿¡ ÀÇÇØ¼ ¼º¸³µÈ Æ®·£½ºÆ÷Æ®¿Í NICÀÇ ¹ÙÀεùÀ» ±¸ÇöÇϱâ À§Çؼ »ý¼ºµÈ ÀåÄ¡ °´Ã¼ÀÇ ¹öÆÛÈµÈ À̸§°ú °ªÀÌ TDI_PNP_OP_ADDÀÎ PnPOpcode¸¦ °¡Áö°í ÇѹøÀÌ»ó È£ÃâµÆ´Ù. ¶ÇÇÑ ClientPnPBindingChange ÇÔ¼ö´Â ±â´ëµÇ´Â Æ®·£½ºÆ÷Æ®¿Í NICÀÇ ¹ÙÀεù¿¡¼ ³×Æ®¿÷ I/O ¿¬»êÀ» ¼öÇàÇϱâ À§Çؼ ÁغñµÈ ÀÚ½ÅÀ» ¼±¾ðÇÑ TDI Æ®·£½ºÆ÷Æ® µå¶óÀ̹öÀÇ ¹öÆÛÈµÈ À̸§°ú °ªÀÌ TDI_PNP_OP_PROVIDERREADYÀÎ PnPOpcode¸¦ °¡Áö°í ÇѹøÀÌ»ó È£ÃâµÆ´Ù.
°ªÀÌ TDI_PNP_OP_ADDÀÎ PnPOpcode¸¦ °¡Áø ClientPnPBindingChange ÇÔ¼ö·ÎÀÇ °¢°¢ÀÇ È£Ãâ¿¡¼ ÀÌ ·çƾÀº ZwCreateFile ÇÔ¼ö·ÎÀÇ È£ÃâÀ» °¡Áö°í ÇϺÎÀÇ Æ®·£½ºÆ÷Æ®¿Í NICÀÇ ¹ÙÀεù¿¡ ÀÚ½ÅÀ» ¹ÙÀεùÇÒ °ÍÀÎÁö¸¦ °áÁ¤ÇÑ´Ù.(ZwCreateFile ÇÔ¼ö È£Ãâ¿¡ ´ëÇÑ Æ¯Â¡¿¡ ´ëÇØ¼´Â Ä¿³Î ¸ðµå ·¹ÆÛ·±½º¸¦ ºÁ¶ó.)
- ClientPnPAddNetAddress ÇÔ¼ö´Â TdiRegisterNetworkAddress ÇÔ¼ö·ÎÀÇ È£ÃâÀ» °¡Áö°í ¼º¸³µÈ ¹ÙÀεù»ó¿¡¼ Æ®·£½ºÆ÷Æ®°¡ ÀÌ¹Ì µî·ÏÇÑ °¢°¢ÀÇ ³×Æ®¿÷ ÁÖ¼Ò¸¦ °¡Áö°í ÇѹøÀÌ»ó È£ÃâµÆ´Ù.
ClientPnPAddNetAddress ÇÔ¼ö·ÎÀÇ °¢°¢ÀÇ È£Ãâ¿¡¼ ÀÌ ·çƾÀº ÀÌ ³×Æ®¿÷ ÇÁ·ÎÅäÄÝÀ» ÀνÄÇϰí Áï½Ã ÅëÁ¦¸¦ ¸®ÅÏÇÏ´ÂÁö¸¦ °áÁ¤Çϱâ À§Çؼ ÀÔ·Â Address¿¡ ±¸Á¶Ã¼ÀÇ AddressType ¸â¹ö¸¦ °Ë»çÇÑ´Ù. ±×·¸Áö ¾ÊÀ¸¸é ClientPnPAddNetAddress ÇÔ¼ö´Â Ŭ¶óÀÌ¾ðÆ®°¡ ÀÌ¹Ì ÀÌ Æ®·£½ºÆ÷Æ®¿Í ÀÚ½ÅÀ» ¹ÙÀεùÇß´ÂÁö¸¦ °áÁ¤Çϱâ À§Çؼ DeviceName¿¡ ¹öÆÛÈµÈ ¹®ÀÚ¿À» °Ë»çÇÑ´Ù. ±×·¸´Ù¸é ClientPnpAddNetAddress ÇÔ¼ö´Â À¯È¿ÇÏ°í µî·ÏµÈ ³×Æ®¿÷ ÁÖ¼ÒÀÇ Å¬¶óÀÌ¾ðÆ® ÇÒ´ç ³»ºÎ ¸®½ºÆ®¿¡ ´ëÇÑ ¿£Æ®¸®¸¦ Ãß°¡Çϱâ À§Çؼ ÀÔ·Â ÇÁ·ÎÅäÄÝ Æ¯Á¤ ÁÖ¼Ò Á¤º¸¸¦ »ç¿ëÇÑ´Ù. Ŭ¶óÀÌ¾ðÆ®´Â ³×Æ®¿÷ ÁÖ¼Ò¸¦ ¿°í ´Ù½Ã ZwCreateFile ÇÔ¼öÀÇ È£ÃâÀ» °¡Áö°í ±× ÈÄ¿¡ ¼øÂ÷ÀûÀÎ ³×Æ®¿÷ I/O ¸®Äù½ºÆ®¸¦ À§Çؼ µî·ÏµÈ ³×Æ®¿÷ ÁÖ¼Ò¸¦ »ç¿ëÇÑ´Ù.
ClientPnPBindingChange ÇÔ¼ö´Â ¶Ç´Ù¸¥ Æ®·£½ºÆ÷Æ®¿Í NICÀÇ ¹ÙÀεùÀÌ ¼º¸³µÇ°í Æ®·£½ºÆ÷Æ®°¡ TdiRegisterDeviceObject, (ÇѹøÀÌ»óÀÇ ClientPnPAddNetAddress ÇÔ¼ö È£ÃâÀ» ¾ß±âÇÏ´Â) TdiRegisterNetworkAddress, TdiProviderReady ÇÔ¼ö·ÎÀÇ ¼º°øÀûÀΠȣÃâÀ» ÇÑ´Ù¸é ½Ã½ºÅÛ ¼³Á¤ µ¿¾È¿¡ ¼øÂ÷ÀûÀ¸·Î °ªÀÌ TDI_PNP_OP_ADD¿Í TDI_PNP_OP_PROVIDERREADYÀÎ PnPOpcode¸¦ °¡Áö°í È£ÃâµÉ ¼ö ÀÖ´Ù.
°Ô´Ù°¡ TDI°¡ ÄÄÇ»Å͸¦ À§Çؼ ±¸¼ºµÈ ¸ðµç °¡´ÉÇÑ Æ®·£½ºÆ÷Æ®¿Í NIC°úÀÇ ¹ÙÀεùÀÌ ¼º¸³µÆ°í ¸ðµç Æ®·£½ºÆ÷Æ®°¡ ³×Æ®¿÷ µ¥ÀÌŸ¸¦ Àü¼ÛÇϱâ À§Çؼ ±× Áغñ¸¦ ÀεðÄÉÀÌÆ®Çß´Ù´Â °ÍÀ» °áÁ¤ÇßÀ» ¶§ TDI´Â °ªÀÌ TDI_PNP_OP_NETREADYÀÎ PnPOpcode¿Í NULL DeviceName Æ÷ÀÎÅ͸¦ °¡Áö°í ÇѹøÀÌ»ó ¸ðµç µî·ÏµÈ ClientPnPBindingChange ·çƾÀ» È£ÃâÇÑ´Ù. ClientPnPBindingChange ÇÔ¼ö·ÎÀÇ ¸¶Áö¸· ÃʱâȽÿ¡ È£ÃâÀº ³×Æ®¿÷ Åë½Å ¼³Á¤ÀÇ ½Ã½ºÅÛ ÃʱâÈ ½Ã±â°¡ Áö±Ý ÇàÇØÁ³À½À» ¾Ë¸°´Ù.
½Ã½ºÅÛ ¼³Á¤¿¡ µû¶ó TDI´Â Ŭ¶óÀÌ¾ðÆ®°¡ *BindingHandle¿¡ ¸®ÅÏµÈ ÇÚµéÀ» °¡Áö°í TdiDeregisterPnPHandlers ÇÔ¼ö·ÎÀÇ »óÈ£ÀûÀΠȣÃâÀ» ÇÒ ¶§±îÁö Ŭ¶óÀÌ¾ðÆ®°¡ ¹ÙÀεùÇÑ Æ®·£½ºÆ÷Æ®°¡ TdiRegisterDeviceObject, TdiDeregisterDeviceObject, TdiRegisterNetAddress, TdiDeregisterNetAddress, ±×¸®°í TdiPnPPowerRequest ÇÔ¼ö·ÎÀÇ ½Ç½Ã°£ È£ÃâÀ» ÇÒ ¶§ µî·ÏµÈ ClientPnPXxx ·çƾÀ¸·ÎÀÇ µ¿ÀûÀΠȣÃâÀ» ÇÑ´Ù.
TdiRegisterPnPHandlers ÇÔ¼öÀÇ È£ÃâÀÚ´Â IRQL < DISPATCH_LEVEL¿¡¼ ½ÇÇàµÇ¾î¾ßÇÑ´Ù.
|