NDIS_PAGABLE_FUNCTION
NDIS_PAGABLE_FUNCTION(FunctionName)
|
NDIS_PAGABLE_FUNCTION ÇÔ¼ö´Â ÆäÀÌÀúºí ÄÚµå·Î½á µå¶óÀ̹ö ÇÔ¼ö¸¦ Ư¡Áþ±â À§Çؼ »ç¿ëµÈ ¸ÅÅ©·ÎÀÌ´Ù.
¸Å°³º¯¼ö
- FunctionName
- ÆäÀÌÀúºíµÇ´Â µå¶óÀ̹ö ÇÔ¼öÀÇ À̸§À» ¼¼úÇÑ´Ù.
ÁÖ¼®
NDIS_PAGABLE_FUNCTIONÀ» °¡Áö°í Ư¡Áö¾îÁø ¾î¶² µå¶óÀ̹ö ÇÔ¼ö´Â ÅëÁ¦¸¦ ¸®ÅÏÇÒ ¶§ ¸Þ¸ð¸® ¹ÛÀ¸·Î ÆäÀÌÁöµÉ ¼ö ÀÖ´Ù. ±×¸®°í ¼øÂ÷ÀûÀ¸·Î È£ÃâµÈ´Ù¸é ¸Þ¸ð¸® ¾ÈÀ¸·Î ÆäÀÌÁöµÈ´Ù.
¿¹¸¦µé¾î ±×·¯ÇÑ ÇÔ¼ö´Â ´ÙÀ½°ú °°ÀÌ µå¶óÀ̹ö ¼Ò½º¿¡¼ ¼±¾ðµÈ´Ù:
VOID miniportXxx(...);
#pragma NDIS_PAGABLE_FUNCTION(miniportXxx)
... // ´Ù¸¥ ÇÔ¼ö ¼±¾ð
VOID
miniportXxx(...)
{
...
}
...
À©µµ¿ìÁî 2000¿¡¼ ÆäÀÌÁö ¿¬»êÀÌ IRQL < DISPATCH_LEVEL¿¡¼ ½ÇÇàµÇ±â ¶§¹®¿¡ IRQL >= DISPATCH_LEVEL¿¡¼ ½ÇÇàÇÒ ¼ö ÀÖ´Â ¾î¶² µå¶óÀ̹ö ÇÔ¼ö´Â ÆäÀÌÀúºíµÉ ¼ö ¾ø´Ù. IRQL >= DISPATCH_LEVEL¿¡¼ÀÇ ½ÇÇàµÉ ¶§ µå¶óÀ̹ö ÇÔ¼ö¸¦ ÆäÀÌÀúºíÇÏ´Â °ÍÀº ±× µå¶óÀ̹ö¿¡¼ Ä¡¸íÀûÀÎ ÆäÀÌÁöÆúÆ®¸¦ ¾ß±âÇÒ ¼ö ÀÖ´Ù.
º¸Åë NIC µå¶óÀ̹ö´Â ±×µéÀÇ MiniportInitialize³ª MiniportHalt ÇÔ¼ö¿¡¼ ÀÌ ¸ÅÅ©·Î¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù. ¶ÇÇÑ ¹Ì´ÏÆ÷Æ®´Â ÆäÀÌÀúºí·Î Ư¡Áö¾îÁø ÇÔ¼ö°¡ NdisAcquireSpinLock ÇÔ¼öó·³ IRQLÀ» »ó½Â½ÃŰ´Â ¾î¶² NdisXxx ÇÔ¼ö¸¦ È£ÃâÇÏÁö ¾Ê´Â ÇÑMiniportInitialize³ª MiniportHalt ÇÔ¼ö¿¡¼¸¸ È£ÃâµÇ´Â ³»ºÎÀÇ µå¶óÀ̹ö ÇÔ¼ö¿¡¼ ÀÌ ¸ÅÅ©·Î¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù.
NDIS ÇÁ·ÎÅäÄÝ µå¶óÀ̹ö´Â IRQL < DISPATCH_LEVEL¿¡¼ Ç×»ó ½ÇÇàÇÏ´Â ¾î¶² µå¶óÀ̹ö ÇÔ¼ö¿¡¼ ÀÌ ¸ÅÅ©·Î¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù. ±×·¯ÇÑ ÇÔ¼ö´Â »ó½ÂµÈ IRQL¿¡¼ Àý´ë È£ÃâµÇÁö ¾Ê´Â´Ù. ±×·¯ÇÑ ÇÔ¼ö´Â IRQL >= DISPATCH_LEVEL¿¡¼ ½ÇÇàÇÏ´Â ½Ã½ºÅÛ Á¦°ø ÇÔ¼ö ȤÀº µå¶óÀ̹ö¸¦ È£ÃâÇÒ ¼ö ¾ø´Ù.
|