NdisMRegisterDevice
NDIS_STATUS
NdisMRegisterDevice(
IN NDIS_HANDLE NdisWrapperHandle,
IN PNDIS_STRING DeviceName,
IN PNDIS_STRING SymbolicName,
IN PDRIVER_DISPATCH MajorFunctions[],
OUT PDEVICE_OBJECT *pDeviceObject,
OUT NDIS_HANDLE *NdisDeviceHandle
);
|
NdisMRegisterDevice ÇÔ¼ö´Â ÀåÄ¡ °´Ã¼¿Í ÀåÄ¡ °´Ã¼¿Í ±× ÀåÄ¡¸¦ À§ÇÑ »ç¿ëÀÚ ÂÊ À̸§ »çÀÌ¿¡ À̸§À» °¡Áø ½Éº¼¸¯ ¸µÅ©¸¦ ¸¸µç´Ù.
¸Å°³º¯¼ö
- NdisWrapperHandle
- NdisMInitializeWrapper¿¡ ÀÇÇØ ¸®ÅÏµÈ ÇÚµéÀ» ÁöÁ¤ÇÑ´Ù.
- DeviceName
- ÀåÄ¡ °´Ã¼¸¦ °¡¸®Å°´Â 0À¸·Î ³¡³ª´Â À¯´ÏÄÚµå ¹®ÀÚ¿À» Æ÷ÇÔÇÏ´Â ¹öÆÛ¸¦ °¡¸®Å²´Ù. ¹®ÀÚ¿Àº ¿ÏÀüÇÑ ÆÐ½º À̸§À» °¡Áø´Ù. ¿¹·Î \Device\DeviceName
- SymbolicName
- µî·ÏµÈ ÀåÄ¡ÀÇ Win32¿¡¼ »ç¿ëÇÏ´Â À̸§À» ³ªÅ¸³»´Â ¹öÆÛÈµÈ À¯´ÏÄÚµå ¹®ÀÚ¿À» °¡¸®Å²´Ù. ÀüÇüÀûÀ¸·Î SymbolicNameÀº ´ÙÀ½°ú °°Àº Æ÷¸ËÀ» °¡Áø´Ù. \DosDevices\SymbolicName.
- MajorFunctions
- ÀåÄ¡ µå¶óÀ̹öÀÇ µð½ºÆÐÄ¡ ·çƾµéÀ» À§ÇÑ Çϳª³ª ±× ÀÌ»óÀÇ ¿£Æ®¸® Æ÷ÀÎÆ®µéÀÇ ¹è¿À» °¡¸®Å²´Ù. µå¶óÀ̹ö´Â µå¶óÀ̹ö°¡ ÀåÄ¡ °´Ã¼¸¦ À§ÇØ ´Ù·ç´Â IRP_MJ_XXXÄÚµåµé°ú °°Àº ¸¹Àº ´Ù¸¥ µð½ºÆÐÄ¡ ¿£Æ®¸® Æ÷ÀÎÆ®µéÀ» ¼³Á¤ÇØ¾ß ÇÑ´Ù. °¢ µð½ºÆÐÄ¡ ·çƾµéÀº ´ÙÀ½°ú °°ÀÌ ¼±¾ðµÇ¾îÁø´Ù.
NTSTATUS
(*PDRIVER_DISPATCH) (
IN PDEVICE_OBJECT Device Object,
IN PIRP Irp
);
µå¶óÀ̹ö´Â ¸¸µé¾îÁø °´Ã¼°¡ ½ÇÁ¦ ÀåÄ¡°¡ ¾Æ´Ï°í ±×·¯¹Ç·Î Ç÷¯±× ¾Ø Ç÷¹À̳ª ÆÄ¿ö °ü¸® IRPµéÀ» ¹ÞÀ» ¼ö ¾ø±â ¶§¹®¿¡ Ç÷¯±×¾ØÇ÷¹ÀÌ¿Í Àü¿ø°ü¸® Çڵ鷯¸¦ À§ÇÑ ¿£Æ®¸® Æ÷ÀÎÆ®µéÀ» Á¦°øÇÏÁö ¾Ê´Â´Ù.
- pDeviceObject
- ¸¸¾à È£ÃâÀÌ ¼º°øÀûÀ̸éÀº »õ·Ó°Ô ¸¸µé¾îÁø ÀåÄ¡ °´Ã¼¸¦ °¡¸®Å²´Ù.
- NdisDeviceHandle
- ¸¸¾à ¼º°øÀûÀÌ´Ù¸éÀº ÀåÄ¡ °´Ã¼¿¡ ´ëÇÑ ÇÚµéÀ» ¸®ÅÏÇϴ ȣÃâÀÚ Á¦°ø º¯¼ö¸¦ °¡¸®Å²´Ù. ÀÌ ÇÚµéÀº µå¶óÀ̹ö°¡ ³ªÁß¿¡ È£ÃâÇÏ´Â NdisMDeregisterDevice ÇÔ¼ö¿¡ ÇÊ¿äÇÑ ¸Å°³º¯¼öÀÌ´Ù.
¸®Åϰª
NdisMRegisterDevice´Â ¸¸¾à ¼º°øÇÑ´Ù¸éÀº STATUS_SUCCESS¸¦ ¸®ÅÏÇϰí È£ÃâÀÚ°¡ NDIS ¹Ì´ÏÆ÷Æ®°¡ ¾Æ´Ï¸éÀº NDIS_STATUS_NOT_SUPPORTEDÀÌ°í ½ÇÆÐÇϸéÀº ½ÇÆÐ ÄÚµåÀÌ´Ù.
ÁÖ¼®
ÀÎÅ͹̵ð¾ù µå¶óÀ̹ö³ª ȤÀº ¹Ì´ÏÆ÷Æ® µå¶óÀ̹ö´Â ºÐ¸®µÈ ȤÀº È¥ÀÚÀÇ(stand-alone) ÀåÄ¡ °´Ã¼¸¦ ¿ä±¸ÇÒ °ÍÀÌ´Ù. ¿¹¸¦ µé¾î, ÀÎÅ͹̵ð¾ù ¹Ì´ÏÆ÷Æ®´Â stand-alone ÀåÄ¡ °´Ã¼µéÀÌ NIC ¹Ì´ÏÆ÷Æ®°¡ upµÇÁö ¾Ê°í ½ÇÇàÇÒ ¶§ ¾Æ·¡ NIC¿¡ »óŸ¦ ¸ð´ÏÅÍÇϱâ À§ÇØ ¿ä±¸µÇ¾îÁø´Ù. ±×·¯ÇÑ °æ¿ì¿¡ NIC »óŸ¦ ¾ò±â À§ÇØ »ç¿ëÀÚ ¸ðµå ¾îÇø®ÄÉÀÌ¼Ç È¤Àº ȯ°æÀûÀÎ ¼ºê ½Ã½ºÅÛÀº IRP¸¦ ÀåÄ¡ °´Ã¼¿¡ º¸³½´Ù. IRP´Â ÀÎÅ͹̵ð¾ù µå¶óÀ̹ö¿¡ ÀÇÇØ 󸮵ǾîÁø´Ù. stand-alone ÀåÄ¡ °´Ã¼ ¾øÀÌ NICÀÇ »óÅ´ ´ÜÁö NIC ¹Ì´ÏÆ÷Æ®°¡ upµÇ°í ½ÇÇàµÉ ¶§ ÀÌ¿ëÇÒ ¼ö ÀÖ´Ù.
ÀÎÅ͹̵ð¾ù µå¶óÀ̹ö³ª ¹Ì´ÏÆ÷Æ®´Â DriverEntry°¡ NdisMInitializeWrapper¸¦ È£ÃâÇÑ ÈÄ DriverEntry ÇÔ¼ö·ÎºÎÅÍ NdisMRegisterDevice¸¦ È£ÃâÇÔÀ¸·Î½á ÀåÄ¡ °´Ã¼¸¦ ¸¸µç´Ù. NdisMRegisterDevice´Â À̸§À» °¡Áø ÀåÄ¡ °´Ã¼¸¦ ¸¸µé°í ¶ÇÇÑ ÀåÄ¡ °´Ã¼ À̸§°ú ±× ÀåÄ¡¿¡ ´ëÇÑ »ç¿ëÀÚ°¡ »ç¿ëÇÏ´Â À̸§ »çÀÌ¿¡ ½Éº¼¸¯ ¿¬°áÀ» ¸¸µç´Ù. NdisMRegisterDevice¿¡ ´ëÇÑ È£ÃâÀÌ ¼º°øÀûÀ̸éÀº, I/O ¸Å´ÏÀú´Â ÀåÄ¡ °´Ã¼¸¦ À§ÇØ ±×¸®°í µå¶óÀ̹ö È®Àå ³»¿ëµéÀ» (Device Extension) Æ÷ÇÔÇÑ ÀåÄ¡ °´Ã¼¿Í °ü·ÃµÈ ¸ðµç ´Ù¸¥ µ¥ÀÌÅÍ ±¸Á¶Ã¼À» À§ÇØ ºñÆäÀÌÁöÈµÈ pool³»¿¡ ÀúÀå °ø°£À» ÇÒ´çÇÑ´Ù. NdisMRegisterDevice·Î ¸¸µé¾îÁø °´Ã¼¸¦ À§ÇÑ ÀåÄ¡ È®ÀåÀº NDIS¿¡ ÀÇÇØ »ç¿ëÀÌ ¿¹¾àµÇ¾ú°í µå¶óÀ̹ö¿¡ ÀÇÇØ »ç¿ëµÉ ¼ö ¾ø´Ù.
NdisMRegisterDevice·Î ¸¸µé¾îÁø °´Ã¼´Â IoCreateDevice¿Í IoCreateSymbolicLink·Î °¢°¡ ¸¸µé¾îÁø ÀåÄ¡ °´Ã¼¿Í ½Éº¼¸¯ ¸µÅ©¿Í °°Àº ±â´ÉÀ» ÇÑ´Ù. ÀåÄ¡ °´Ã¼¿¡ º¸³»Áö´Â IRPµéÀº NDIS°¡ ¾Æ´Ï¶ó ÀåÄ¡ °´Ã¼¸¦ ¸¸µç µå¶óÀ̹ö¿¡ ÀÇÇØ 󸮵ǾîÁø´Ù. µå¶óÀ̹ö´Â NdisMRegisterDeviceÀÇ MajorFunctions Æ÷ÀÎÅÍ¿¡ Á¦°øµÉ ¶§ µî·ÏµÇ¾îÁö´Â µð½ºÆÐÄ¡ ·çƾµéÀ» »ç¿ëÇÏ¿© ÀåÄ¡ °´Ã¼¿¡ º¸³»Áø IRPµéÀ» ó¸®ÇÑ´Ù. ÀåÄ¡ °´Ã¼µé, IRPµé, µð½ºÆÐÄ¡ ·çƾµé¿¡ ´ëÇÑ ´õ ÀÚ¼¼ÇÑ Á¤º¸´Â Kernel-mode Driver Design Guide¸¦ º¸¶ó.
NDIS µå¶óÀ̹öµéÀº °áÄÚ IoCreateDevice ȤÀº IoCreateSymbolicLinkÀ» È£ÃâÇϸéÀº ¾ÈµÈ´Ù. ±× ´ë½Å¿¡ NDIS µå¶óÀ̹ö´Â ÀåÄ¡ °´Ã¼¸¦ ¸¸µé ¶§ NdisMRegisterDevice¸¦ È£ÃâÇØ¾ß ÇÑ´Ù.
NdisMRegisterDevice¿¡ ÀÇÇØ ¸¸µé¾îÁø ÀåÄ¡ °´Ã¼´Â ½ÇÁ¦ ÀåÄ¡ °´Ã¼°¡ ¾Æ´Ï¹Ç·Î Plug and Play³ª ȤÀº ÆÄ¿ö °ü¸® IRPµéÀ» ¼ö½ÅÇÏÁö ¾Ê´Â´Ù. NdisMRegisterDevice È£ÃâÀÚ´Â ±×·¯¹Ç·Î MajorFunctions¿¡ ÀÇÇØ °¡¸®Å°´Â ¹è¿³»¿¡ PnP¿Í ÆÄ¿ö °ü¸® Çڵ鷯¸¦ À§ÇØ ¿£Æ®¸® Æ÷ÀÎÆ®µéÀº ºüÁ®¾ß ÇÑ´Ù.
¸¸¾à NdisMRegisterDevice¿¡ ´ëÇÑ È£ÃâÀÌ ½ÇÆÐÇÑ´Ù¸éÀº, µå¶óÀ̹ö´Â stand-alone ÀåÄ¡ °´Ã¼°¡ µå¶óÀ̹ö ¿¬»êÀ» À§ÇØ ¾ó¸¶³ª Å©¸®Æ¼ÄÃÇÏ´ÂÁö¿¡ µû¶ó °è¼ÓÇØ¼ ·ÎµåµÉ ¼ö ÀÖ°í ±×·¸Áö ¾ÊÀ» ¼ö ÀÖ´Ù.
NdisMRegisterDeviceÀÇ È£ÃâÀÚ´Â IRQL PASSIVE_LEVEL¿¡¼ ½ÇÇàÇÑ´Ù.
|