ClientPnPPowerChange
NTSTATUS
ClientPnPPowerChange(
IN PUNICODE_STRING DeviceName,
IN PNET_PNP_EVENT PowerEvent,
IN PTDI_PNP_CONTEXT Context1,
IN PTDI_PNP_CONTEXT Context2
);
TDI´Â TdiPnPPowerRequest ÇÔ¼ö·ÎÀÇ Æ®·£½ºÆ÷Æ® È£ÃâÀÇ °á°ú·Î½á ClientPnPPowerChange ÇÔ¼ö¸¦ È£ÃâÇÑ´Ù. ȤÀº NDIS¿¡ ÀÇÇÑ È£ÃâÀÇ °á°ú·Î½á »ç¿ëÀÚ ÃÊ±â ³×Æ®¿÷ À籸¼ºÀ» À§Çؼµµ ±×·¯ÇÏ´Ù.
¸Å°³º¯¼ö
- DeviceName
- ƯÁ¤ Æ®·£½ºÆ÷Æ® ȤÀº Æ®·£½ºÆ÷Æ®¿Í NIC°úÀÇ ¹ÙÀεùÀ» ÅëÇØ Ŭ¶óÀ̾ðÆ®ÀÇ ³×Æ®¿÷ I/O¿¡ ´ëÇÑ Å¸°ÙÀ» ±¸ÇöÇÏ´Â Æ®·£½ºÆ÷Æ® »ý¼º ÀåÄ¡ °´Ã¼¸¦ ÀϹÝÀûÀ¸·Î È®ÀÎÇÏ´Â ¹öÆÛÈµÈ À¯´ÏÄÚµå ¹®ÀÚ¿À» °¡¸®Å²´Ù.
- PowerEvent
- ´ÙÀ½Áß ÇϳªÀÇ Å¸ÀÔÀÌ µÉ ¼ö ÀÖ´Â Å뺸¸¦ ÀεðÄÉÀÌÆ®ÇÏ´Â NET_PNP_EVENT ŸÀÔÀÇ ±¸Á¶Ã¼¸¦ °¡¸®Å²´Ù:
- ÀÌ ±¸Á¶Ã¼ÀÇ NetEvent ¸â¹ö´Â ÇϺÎÀÇ Æ®·£½ºÆ÷Æ®¿¡ ÀÇÇØ¼ NetEventSetPower, NetEventQueryPower, NetEventQueryRemoveDevice, ȤÀº NetEventCancelRemoveDevice·Î ¼³Á¤µÈ´Ù. (NetEventQueryRemoveDeviceÀÇ ½ÇÆÐ¿¡ À̾î¼).
- ÀÌ ±¸Á¶Ã¼ÀÇ NetEvent ¸â¹ö´Â NDIS¿¡ ÀÇÇØ¼ NetEventBindList³ª NetEventReconfigure·Î ¼³Á¤µÈ´Ù. Áï TDI·ÎºÎÅÍ ClientPnPPowerChange ÇÔ¼ö·ÎÀÇ ·±Å¸ÀÓ È£ÃâÀº ¿¬°áÆú´õ¿¡¼ ¸¶Áö¸· »ç¿ëÀÚ Ãʱ⠺¯ÈÀÇ °á°ú·Î½á ¹ß»ýÇÒ ¼ö ÀÖ´Ù.
- Context1
- ÇϺÎÀÇ Æ®·£½ºÆ÷Æ®°¡ TdiPnPPowerRequest ÇÔ¼ö¸¦ È£ÃâÇÑ´Ù¸é ÀÌ Å뺸¿Í ¿¬°üµÈ ÇÁ·ÎÅäÄÝ °áÁ¤ ÄÁÅØ½ºÆ®¸¦ °¡¸®Å²´Ù. ¿¹¸¦µé¾î TCP/IP´Â ÀÌ Å뺸ÀÇ ÄÁÅØ½ºÆ®¿Í ¿¬°üµÈ ÁÖ¼Ò ¸®½ºÆ®¿¡ ´ëÇÑ Æ÷ÀÎÅ͸¦ Àü´ÞÇÑ´Ù.
±×·¸Áö ¾ÊÀ¸¸é À̰ÍÀº ³×Æ®¿÷ ±¸¼º¿¡¼ »ç¿ëÀÚ ½ÃÀÛ º¯ÈÀÇ °á°ú·Î½á NDIS¿¡ ÀÇÇØ¼ TDI·Î Á¦°øµÈ ÄÁÅØ½ºÆ®¸¦ °¡¸®Å²´Ù. ¿¹¸¦µé¾î »ç¿ëÀÚ°¡ ¿¬°á Æú´õ¿¡¼ ³×Æ®¿÷À» À籸¼ºÇÑ´Ù¸é ±×·¡¼ Á¸ÀçÇÏ´Â ³×Æ®¿÷ ¹ÙÀεù¿¡¼ º¯È°¡ ¸®Äù½ºÆ®µÈ´Ù¸é NDIS´Â ±×µéÀÇ ClientPnPXxx Çڵ鷯¸¦ µî·ÏÇϰųª µî·ÏÇØÁ¦ÇÏ´Â ±âȸ¸¦ ±×µé¿¡°Ô ÁÖ±â À§Çؼ ±×·¯ÇÑ ¹ÙÀεù º¯È¿¡ ¿µÇâÀ» ¹Þ´Â ÇöÀçÀÇ ¸ðµç µî·ÏµÈ TDI Ŭ¶óÀÌ¾ðÆ®¿¡°Ô ¾Ë·Á¾ßÇÑ´Ù.
- Context2
- ÀÌ Å뺸¿Í ¿¬°üµÈ ÇÁ·ÎÅäÄÝ °áÁ¤ ÄÁÅØ½ºÆ®¸¦ °¡¸®Å²´Ù. ¿¹¸¦µé¾î TCP/IP´Â ¹ß»ýµÈ ÀÌ·¯ÇÑ Å뺸»ó¿¡¼ ¹°¸® ÀåÄ¡ÀÇ PDO¿¡ ´ëÇÑ Æ÷ÀÎÅ͸¦ ¸®ÅÏÇÑ´Ù.
¹Ý¸é¿¡ À̰ÍÀº À籸¼ºµÇ´Â ÇϺΠNICÀÇ PDO¿¡ ´ëÇÑ Æ÷ÀÎÅÍ¿Í °°ÀÌ ³×Æ®¿÷ ±¸¼º¿¡¼ »ç¿ëÀÚ Ãʱ⠺¯ÈÀÇ °á°ú·Î½á NDIS¿¡ ÀÇÇØ¼ TDI·Î Á¦°øµÈ ÄÁÅØ½ºÆ®¸¦ °¡¸®Å²´Ù.
¸®Åϰª
Ŭ¶óÀÌ¾ðÆ®°¡ ÀÚ½ÅÀÇ Å¬¶óÀÌ¾ðÆ®¿¡°Ô Àü¿ø»óÅÂ, ÀåÄ¡ Á¦°Å Äõ¸®, ÀåÄ¡ Á¦°Å À̺¥Æ®¸¦ ¾Ë·Á¾ßÇÑ´Ù¸é ClientPnPPowerChange ÇÔ¼ö´Â STATUS_PENDINGÀ» ¸®ÅÏÇÒ ¼ö ÀÖ´Ù. ±×·¸Áö ¾ÊÀ¸¸é STATUS_SUCCESS¸¦ ¸®ÅÏÇØ¾ßÇϰí ÀÚ½ÅÀÇ Å¬¶óÀÌ¾ðÆ® Áß Çϳª°¡ Áú¹®¿¡¼ ÇöÀç ÇϺÎÀÇ NIC¿¡ ÀÇÁ¸Çϰí ÀÖ´Ù¸é NetEventSetPowerDevice ŸÀÔ È¤Àº NetEventQueryRemoveDevice ŸÀÔÀÇ ¸®Äù½ºÆ®¸¦ °ÅÀýÇϱâ À§Çؼ STATUS_FILES_OPENÀ̳ª STATUS_UNSUCCESSFUL°ú °°Àº Ŭ¶óÀÌ¾ðÆ® °áÁ¤ ½ÇÆÐ »óŸ¦ ¸®ÅÏÇØ¾ßÇÑ´Ù.
ClientPnPPowerChange ÇÔ¼ö´Â NetEventBindList³ª NetEventReconfigure Å뺸¸¦ °¡Áö°í È£ÃâµÉ ¶§ STATUS_SUCCESS¸¦ ¸®ÅÏÇÒ ¼ö ÀÖ´Ù. ¿Ö³ÄÇÏ¸é ¿ø·¡ µ¿±âÀûÀÎ ¿¬»êÀ̱⠶§¹®ÀÌ´Ù.
ÁÖ¼®
PnP¸¦ Áö¿øÇÏ´Â Æ®·£½ºÆ÷Æ® ȤÀº NDIS°¡ TdiPnPPowerRequest ÇÔ¼ö¸¦ È£ÃâÇÒ ¶§¸¶´Ù Ŭ¶óÀÌ¾ðÆ®´Â ÀÌ Å뺸ÀÇ ¼ö½ÅÀ» ½ÃÀÛÇϱâ À§Çؼ TdiRegisterPnPHandlers ÇÔ¼ö·ÎÀÇ È£ÃâÀ» °¡Áö°í ClientPnPPowerChange ·çƾÀ» µî·ÏÇØ¾ßÇÑ´Ù. Áï ClientPnPPowerChange ÇÔ¼ö´Â ¹ÙÀεùÀÌ µÇÁö¾ÊÀº Æ®·£½ºÆ÷Æ®¿¡ ÀÇÇØ¼ Á¦°øµÈ DeviceName Æ÷ÀÎÅ͸¦ °¡Áö°í È£ÃâµÉ ¼ö ÀÖ´Ù. °á±¹ ClientPnPPowerChange ÇÔ¼ö´Â Ŭ¶óÀÌ¾ðÆ®°¡ DeviceName¿¡¼ È®ÀÎµÈ Æ®·£½ºÆ÷Æ®¸¦ ÀνÄÇÏÁö ¸øÇÑ´Ù¸é Áï½Ã ÅëÁ¦¸¦ ¸®ÅÏÇØ¾ßÇÑ´Ù. ȤÀº »ç¿ëÀÚ ÃÊ±â ³×Æ®¿÷ À籸¼º¿¡ ´ëÇØ¼ Å뺸µÆÀ» ¶§ Ŭ¶óÀÌ¾ðÆ®°¡ »õ·Ó°Ô ¼º¸³ÇÒ ÀÌÀ¯°¡ ¾ø´Ù°Å³ª Á¸ÀçÇÏ´Â Æ®·£½ºÆ÷Æ®¿Í NOC°úÀÇ ¹ÙÀεùÀ» ÇØÁ¦ÇÑ´Ù°í °áÁ¤ÇÑ´Ù¸é Áï½Ã ÅëÁ¦¸¦ ¸®ÅÏÇØ¾ßÇÑ´Ù.
¹Ý¸é¿¡ Ŭ¶óÀÌ¾ðÆ®°¡ NDIS·ÎºÎÅÍ NetEventBindingList³ª NetEventReconfigure Å뺸ÀÇ °á°ú·Î½á Æ®·£½ºÆ÷Æ®»ó¿¡¼ PnP Çڵ鷯¸¦ µî·ÏÇϰųª µî·ÏÇØÁ¦Çϱ⸦ °áÁ¤ÇÑ´Ù¸é ÁÖ¾îÁø Æ®·£½ºÆ÷Æ®´Â »õ·Î¿î NIC°ú ÀÚ½ÅÀ» ¹ÙÀεùÇϱâ À§Çؼ È£ÃâµÉ ¼ö ÀÖ°í ÇöÀç ¹ÙÀεùµÈ NICÀ¸·ÎºÎÅÍ ¾ð¹ÙÀεùÀ» À§Çؼµµ È£ÃâµÉ ¼ö ÀÖ´Ù. Áï NDIS´Â ÀÌ Å¬¶óÀÌ¾ðÆ®¸¦ ´ë½ÅÇÏ¿© Æ®·£½ºÆ÷Æ® ½ºÅÃÀÇ ÇϺο¡¼ ProtocolBindAdapter³ª ProtocolUnbindAdapter ÇÔ¼ö¸¦ È£ÃâÇÑ´Ù. TdiRegisterDeviceObject³ª TdiDeregisterDeviceObject ÇÔ¼ö·ÎÀÇ Æ®·£½ºÆ÷Æ®ÀÇ ¼øÂ÷ÀûÀΠȣÃâÀº ±³´ë·Î Ŭ¶óÀ̾ðÆ®ÀÇ ClientPnPBindingChange ÇÔ¼öÀÇ È£ÃâÀ» ¾ß±âÇÑ´Ù.
ClientPnPPowerChange ÇÔ¼ö°¡ ŸÀÔÀÌ NetEventQueryRemoveDeviceÀÎ ÀÔ·Â PowerEvent¸¦ °¡Áø È£ÃâÀ» À§Çؼ STATUS_SUCCESS¸¦ ¸®ÅÏÇÑ´Ù¸é Ŭ¶óÀÌ¾ðÆ®´Â ¶È°°Àº Æ®·£½ºÆ÷Æ®¿Í NIC ½ºÅÿ¡ ¹ÙÀεùµÈ ¸ðµç ´Ù¸¥ Ŭ¶óÀÌ¾ðÆ®°¡ ÀÌ Å뺸¸¦ ¼º°øÇÒ ¶§ PnPOpcode TDI_PNP_OP_DELÀ» °¡Áö°í ClientPnPBindingChange ·çƾÀ¸·ÎÀÇ ¼øÂ÷ÀûÀΠȣÃâÀ» ±â´ëÇÒ ¼ö ÀÖ´Ù. ±×·¸Áö ¾Ê´Ù¸é Ŭ¶óÀÌ¾ðÆ®´Â Å¸ÀÔÀÌ NetEventCancelRemoveDeviceÀÎ ÀÔ·Â PowerEvent¸¦ °¡Áö°í ClientPnPPowerChange ÇÔ¼ö·ÎÀÇ ¶Ç´Ù¸¥ È£ÃâÀ» ±â´ëÇÒ ¼ö ÀÖ´Ù.
ÀϹÝÀûÀ¸·Î ClientPnPPowerChange ÇÔ¼ö´Â NetEventQueryPowerDevice¿Í NetEventSetPowerDevice Å뺸¸¦ ¹Þ¾ÒÀ» ¶§ ÀÚ½ÅÀÇ Å¬¶óÀÌ¾ðÆ®¿¡°Ô ¾Ë·È´ÂÁö¸¦ °áÁ¤ÇؾßÇÑ´Ù. ¿¹¸¦µé¾î µ¿ÀÛÇÏÁö ¾Ê´Â »óÅ·ΠÇϺΠNICÀÇ Àü¿øÀÌ ´Ù¿îµÆÀ½À» ÀεðÄÉÀÌÆ®ÇÏ´Â Àü¿ø¼³Á¤ Å뺸¿¡¼ ClientPnPPowerChange ÇÔ¼ö´Â ÁÖ¾îÁø ¹ÙÀεù »ó¿¡¼ ³×Æ®¿÷ I/O ¿¬»êÀ» ¹Ýµå½Ã ¼öÇàÇϵµ·Ï ±â´ëµÇ´Â °Í°ú °ü·ÃÇØ¼ ÀÚ½ÅÀÇ Å¬¶óÀÌ¾ðÆ®¿Í ÇÔ²² °Ë»çÇϱâ À§Çؼ STATUS_PENDINGÀ» ¸®ÅÏÇÑ´Ù. ±×·¯³ª ƯÁ¤ NIC¿¡¼ ³×Æ®¿÷ I/O ¿ä±¸°¡ ¾ø´Â ½Ã½ºÅÛ °áÁ¤ ±â°£ÈÄ¿¡ NetEventSetPowerDevice ŸÀÔÀÇ Å뺸°¡ ¹ß»ýÇÑ´Ù. ±×·¡¼ Ŭ¶óÀÌ¾ðÆ®´Â º¸Åë ÀÚ½ÅÀÇ Å¬¶óÀÌ¾ðÆ®°¡ ÀÌ Å¸ÀÔÀÇ Å뺸¿¡ ´ëÇØ¼ ÇÊ¿äÇÏÁö ¾Ê´Ù°í °¡Á¤ÇÑ´Ù.
ClientPnPPowerChange ÇÔ¼ö°¡ STATUS_PENDINGÀ» ¸®ÅÏÇÑ´Ù¸é Ŭ¶óÀÌ¾ðÆ®´Â ÀÌ Å뺸¿¡¼ ½ÃÀÛµÈ ¿¬»êÀ» ¿Ï·áÇÏÀÚ¸¶ÀÚ TdiPnPPowerComplete ÇÔ¼ö¸¦ È£ÃâÇØ¾ßÇÑ´Ù.
TdiDeregisterPnPHandlers ÇÔ¼ö·ÎÀÇ »ó¹ÝµÈ È£ÃâÀº ClientPnPPowerChange ÇÔ¼ö·ÎÀÇ ¼øÂ÷ÀûÀΠȣÃâÀ» µð½º¿¡À̺íÇÑ´Ù.
TDI´Â IRQL < DISPATCH_LEVEL¿¡¼ ClientPnPPowerChange ÇÔ¼ö¸¦ È£ÃâÇÑ´Ù.
|