NdisAcquireReadWriteLock
VOID
NdisAcquireReadWriteLock(
IN PNDIS_RW_LOCK Lock,
IN BOOLEAN fWrite,
IN PLOCK_STATE LockState
);
|
NdisAcquireReadWriteLockÇÔ¼ö´Â È£ÃâÀÚ°¡ µå¶óÀ̹ö ½º·¹µåµé »çÀÌ¿¡ °øÀ¯µÈ ¸®¼Ò½ºµé¿¡ ÀбâȤÀº ¾²±â Á¢±ÙÀ» »ç¿ëÇÏ´Â ¶ôÀ» Çã¿ëÇÑ´Ù.
¸Å°³º¯¼ö
- Lock
- ¶ôÀ» ³ªÅ¸³»´Â ¸ðÈ£ÇÑ º¯¼öÀÇ Æ÷ÀÎÅÍ. È£ÃâÀÚ´Â °øÀ¯¸®¼Ò½º¿¡ Á¢±ÙÇϱâÀ§ÇØ À̶ôÀ» »ç¿ëÇÒ¼öÀÖ´Ù.
- fWrite
- ºÒ¸°Çü º¯¼ö¸¦ ³ªÅ¸³½´Ù. ¸¸¾à º¯¼ö°¡ TRUE¸é, ÀÌÇÔ¼ö´Â °øÀ¯ ¸®¼Ò½º¿¡ ¾²±â Á¢±ÙÀ¸·Î Á¦°øµÇ°í, ¸¸¾à FALSEÀ̸é, ÀÌÇÔ¼ö´Â Àбâ Á¢±ÙÀ¸·Î Á¦°øµÈ´Ù.
- LockState
- ¶ôÀÇ »óŸ¦ ³ªÅ¸³»´Â ¸ðÈ£ÇÑ º¯¼öÀÇ Æ÷ÀÎÅÍ. ÀÌ º¯¼ö´Â È£ÃâÀÚ°¡ ¶ôÀ» Çã¿ëÇϰųª ÇØÁ¦ÇÏ´Â ½Ã°£ »çÀÌÀÇ ÀÎÅ͹ú¿¡¼ Á¸ÀçÇÑ´Ù. È£ÃâÀÚ´Â °°Àº nonISRµå¶óÀ̹ö ½º·¹µå·ÎºÎÅÍ ¶ôÀ» Çã¿ëÇϵµ·Ï ÇÏ´Â °¢°¢ÀÇ ½Ãµµ¿¡´ëÇÑ LOCK_SATAEŸÀÔÀÇ ´Ù¸¥ º¯¼ö¸¦ »ç¿ëÇØ¾ßÇÑ´Ù.
ÁÖ¼®
µå¶óÀ̹ö°¡ ¾î¶² ´Ù¸¥ Ndis..ReadWriteLockÇÔ¼ö¸¦ È£ÃâÇϱâÀü¿¡ µå¶óÀ̹ö´Â NdisInitializeReadWriteLockÇÔ¼ö¸¦ »ç¿ëÇØ NDIS_RW_LOCKº¯¼ö¸¦ ÃʱâÈÇØ¾ßÇÑ´Ù. µå¶óÀ̹ö´Â »ç¿ëÇÒ ¶ôµé¿¡ ´ëÇÑ Á¸ÀçÇÏ´Â ÀúÀå¼Ò¸¦ Á¦°øÇؾ߸¸ ÇÑ´Ù.
NdisAcquireReadWriteLockÇÔ¼öÀÇ »ç¿ë¿¡ÀÇÇÑ ¶ôÀÇ Çã¿ëÈÄ, È£ÃâÀÚ´Â NdisReleaseReadWriteLockÇÔ¼ö¸¦ »ç¿ëÇØ ¶ôÀ» ÇØÁ¦Çؾ߸¸ ÇÑ´Ù. ¶ôÀÇ ·¹ÆÛ·±½º Ä«¿îÅ͸¦ ÁÙÀ̱âÀ§ÇØ, µå¶óÀ̹ö´Â NdisAcquireReadWriteLockÇÔ¼öÀÇ °¢°¢ È£Ãâ¿¡´ëÇØ NdisReleaseReadWriteLockÇÔ¼ö¸¦ È£ÃâÇØ¾ß¸¸ ÇÑ´Ù.
µå¶óÀ̹ö ½º·¹µåµé »çÀÌÀÇ °øÀ¯µÈ ¸®¼Ò½ºµéÀ» ¼öÁ¤ÇϱâÀ§ÇØ, µå¶óÀ̹ö ½º·¹µå´Â ¾²±â ¶ôÀ» Çã¿ëÇØ¾ß¸¸ ÇÑ´Ù. ÀÌ·¯ÇÑ ¸®¼Ò½ºµéÀ» °£´ÜÈ÷ ¸ð´ÏÅ͸µÀ» À§ÇØ, µå¶óÀ̹ö ½º·¹µå´Â ÀбâÀü¿ë ¶ôÀ» Çã¿ëÇØ¾ß¸¸ÇÑ´Ù. ÀбâÁ¢±ÙÀº ½ºÇɶôµé¿¡´ëÇÑ interlocked¿¬»êȤÀº ÄÁÅÙÃ÷¸¦ ¿ä±¸ÇÑ´Ù. ÀбâÀü¿ë Á¢±ÙÀ» »ç¿ëÇϴ°ÍÀº ¿î¿µÃ¼Á¦¿Í µå¶óÀ̹öÀÇ ÁÁÀº ÆÛÆ÷¸Õ½º¸¦ À¯ÁöÇϴµ¥ µµ¿òÀ» ÁØ´Ù.
µå¶óÀ̹ö ½º·¹µå´Â 25¹Ð¸®ÃÊÀÌ»óµ¿¾È ¾²±â ¶ôÀ» °áÄÚ Àâ¾Æ¼´Â ¾ÈµÈ´Ù. ¿¬ÀåµÈ ±â°£µ¿¾È¿¡´ëÇÑ ¾²±âÁ¢±ÙÀ» Àâ°íÀִ°ÍÀº ¿î¿µÃ¼Á¦¿Í µå¶óÀ̹öÀÇ ÆÛÆ÷¸Õ½º¸¦ ¶³¾î¶ß¸°´Ù.
Á¢±Ù ¾÷±×·¹À̵å´Â Àб⿡´ëÇØ ¾ò¾îÁø ¾²±â¿¡´ëÇÑ °°Àº ¶ôÀ» ¾ò±âÀ§ÇØ »ç¿ëµÇ¾îÁú¼ö ÀÖ´Ù. ±×·¯³ª ¸®¼Ò½º Á¢±ÙÀ» ¾÷±×·¹À̵带 À§ÇÑ Á¢±Ù ¾÷±×·¹À̵åÀÇ »ç¿ë¿¡ ÀÖ¾î ÁÖÀǸ¦ ÇØ¾ßÇÑ´Ù. ¿¹¸¦µé¾î, µå¶óÀ̹ö´Â óÀ½ Àб⠶ôÀ» Çã¿ëÇϵµ·Ï ÇÁ·Î±×·¥µÆ´Ù. ÀÌ µå¶óÀ̹ö°¡ ¸¹Àº ¹Ýº¹ÈÄ ¾²±â¿¡ ´ëÇØ ÀÌ ¶ôÀ» Çã¿ëÇÏ´Â ÇÔ¼ö¸¦ È£ÃâÇϵµ·Ï ÇÁ·Î±×·¥µÇ¾ú´Ù°í °¡Á¤Çضó. ÀÌ Á¢±Ù ¾÷±×·¹À̵å´Â ÇÔ¼ö È£Ãâ³»¿¡¼ ¹ö·ÁÁö±â¶§¹®¿¡, À̵å¶óÀ̹ö´Â ÀÌ·¯ÇÑ ¸®¼Ò½ºµéÀÌ ÇÔ¼ö È£ÃâÀÇ °á°ú·Î º¯ÈµÉ°ÍÀ̶ó´Â°ÍÀ» ¿¹»óÇϰí ÇÁ·Î±×·¥ µÇ¾î¾ßÇÑ´Ù.
Á¢±Ù °ÝÇÏ(DOWNGRADE)´Â Áö¿øµÇÁö¾Ê´Â´Ù. Á¢±Ù °ÝÇÏ´Â ¾²±â¿¡´ëÇØ ¾òÀº Àб⿡´ëÇÑ °°Àº ¶ôÀ» ¾ò´Âµ¥ »ç¿ëµÈ´Ù.
µå¶óÀ̹ö ¾²·¹µå´Â Àб⠶ôÀ» ¾²±â ¶ôÀ¸·Î Çã¿ëÇÏ´Â ¾÷±×·¹ÀÌµå¾øÀÌ °øÀ¯¸®¼Ò½º¸¦ ¼öÁ¤ÇÒ¼öÀÖ´Ù. ±×·¯³ª, ¿î¿µÃ¼Á¦¿Í NDIS°¡ ÀÌ¿¬»êÀ» Çã¿ëÇÏ´õ¶óµµ, ¿¡·¯¸¦ ÃÊ·¡ÇÑ´Ù.
µå¶óÀ̹ö´Â ´Ù¸¥ ÇÔ¼öµéÀÌ MiniportISR and/or MiniportDisableInterruptÇÔ¼öµé·Î °øÀ¯ÇÏ´Â Àбâ ȤÀº ¾²±â Á¢±ÙÀ¸·ÎºÎÅÍÀÇ ¸®¼Ò½ºµéÀ» º¸È£ÇϱâÀ§ÇÑ ¶ôÀ» »ç¿ëÇÒ¼ö¾ø´Ù. ´ë½Å¿¡, µå¶óÀ̹ö´Â MiniportSynchronizeISRÇÔ¼ö°¡ MiniportISR and/or MiniportDisableInterruptÇÔ¼ö°¡ ÇÏ´Â °°Àº DIRQL¿¡¼ÀÇ °øÀ¯µÈ ¸®¼Ò½ºµéÀ» Á¢±ÙÇϱâÀ§ÇØ NdisMSynchronizeWithInterrupt ÇÔ¼ö¸¦ È£ÃâÇÑ´Ù.
NdisAcquireReadWriteLockÇÔ¼öÀÇ È£ÃâÀÚ´Â IRQL <= DISPATCH_LEVEL¿¡¼ µ¿ÀÛÇÑ´Ù.
|