ÄÚµù Áú¹® µå¸³´Ï´Ù... c++

isaiah   
   Á¶È¸ 5599   Ãßõ 0    

 

코딩 질문이라곤 했지만 딱히 논리적으로 어려운 부분에 대한 질문은 아니고요..

제가 코딩에 기초가 없다보니 글을 못읽어서 생기는 문제인것 같은데요...

 

 최근에 WOL 관련으로 삽질을 좀 하고 있습니다.

 WOL match pattern 의 수행이 맘대로 되지 않아서 그러는데요.

 검색을 했더니 NDIS 필터드라이버 셈플을 수정해서 드라이버 단위에서 성정되는 WOL match pattern 을 따거나 설정할 수 있을것 같더군요.

 그래서 일단은 기본적인 설정에서 어떤 패턴을 기록하는지 따 보려고 대충 해보고 있는데요..

 

https://msdn.microsoft.com/en-us/library/windows/hardware/ff566768(v=vs.85).aspx

이 구조체에 관해서 이해가 안되는 부분이 있습니다.

 

typedef struct _NDIS_PM_WOL_PATTERN {
  NDIS_OBJECT_HEADER     Header;
  ULONG                  Flags;
  ULONG                  Priority;
  NDIS_PM_WOL_PACKET     WoLPacketType;
  NDIS_PM_COUNTED_STRING FriendlyName;
  ULONG                  PatternId;
  ULONG                  NextWoLPatternOffset;
  union _WOL_PATTERN {
    struct _IPV4_TCP_SYN_WOL_PACKET_PARAMETERS {
      ULONG  Flags;
      UCHAR  IPv4SourceAddress[4];
      UCHAR  IPv4DestAddress[4];
      USHORT TCPSourcePortNumber;
      USHORT TCPDestPortNumber;
    } IPv4TcpSynParameters;
    struct _IPV6_TCP_SYN_WOL_PACKET_PARAMETERS {
      ULONG  Flags;
      UCHAR  IPv6SourceAddress[16];
      UCHAR  IPv6DestAddress[16];
      USHORT TCPSourcePortNumber;
      USHORT TCPDestPortNumber;
    } IPv6TcpSynParameters;
    struct _EAPOL_REQUEST_ID_MESSAGE_WOL_PACKET_PARAMETERS {
      ULONG Flags;
    } EapolRequestIdMessageParameters;
    struct _WOL_BITMAP_PATTERN {
      ULONG Flags;
      ULONG MaskOffset;
      ULONG MaskSize;
      ULONG PatternOffset;
      ULONG PatternSize;
    } WoLBitMapPattern;
  } WoLPattern;
} NDIS_PM_WOL_PATTERN, *PNDIS_PM_WOL_PATTERN;

 

제 내트워크 환경에서 프로토콜 드라이버가 네트워크 미니포트 드라이버로 내려보네는 WOL 패턴 설정 요청은 단 하나고.

 

그 요청의 인포메이션 버퍼가 지시하는 NDIS_PM_WOL_PATTERN 내의 WoLPacketType; 변수를 까 봤더니 비트맵 패턴이였습니다.

비트맵 패턴은 union _WOL_PATTERN 공용체에서 

 

    struct _WOL_BITMAP_PATTERN {
      ULONG Flags;
      ULONG MaskOffset;
      ULONG MaskSize;
      ULONG PatternOffset;
      ULONG PatternSize;
    } WoLBitMapPattern;

이부분을 이용한다고 하는데 해당 공용체의 다른 구조체 항목들은 쉽게 이해가 가는데 이건 잘 안되더라고요.. 설명을 읽어 봐도 말이죠..

각각의 값은

MaskOffset 208

PatternOffset 196

PatternOffset 85 

PatternSize 12

로 찎혀 있던데.. 설명은 아래와 같았습니다..

 

WoLBitMapPattern

A structure that specifies a WOL bitmap pattern. For more information about bitmap patterns, see      the Remarks section. The structure has the following members:

Flags

A ULONG value that contains a bitwise OR of flags. This member is reserved for NDIS.

MaskOffset

The offset, in bytes, for a mask buffer from the beginning of the NDIS_PM_WOL_PATTERN        structure.

The mask specifies which bytes in incoming packets should be matched against the bitmap pattern.        Each bit in the bitmask corresponds to a byte in the pattern. If a bit is zero, the corresponding        byte in the incoming packet should not be pattern-matched. If the bit is one, the network adapter compares the        byte to the incoming packet with the byte specified in the pattern.

MaskSize

The size, in bytes, of the mask.

PatternOffset

The offset, in bytes, for a pattern buffer from the beginning of the NDIS_PM_WOL_PATTERN       structure.

PatternSize

The size, in bytes, of the pattern.

 

이것이 NDIS_PM_WOL_PATTERN 구조체의 처음으로 부터 208번쨰 바이트에서 부터 시작해서 85바이트 만큼 분량이 mask 이고 이걸 변수로는 접근 못한다는 소리인가요?

 패턴은 196 바이트에서 부터 시작해서 12바이트 분량이고요?

 

 만약에 그렇다면 해당 정보를 string으로 따 네려면 어떻게 해야 할까요?


ªÀº±Û Àϼö·Ï ½ÅÁßÇÏ°Ô.
¹«¾Æ 2016-06
strncpy ÇÔ¼ö¸¦ ½á¼­ µû³»¸é µÉ °Ì´Ï´Ù.

PNDIS_PM_WOL_PATTERN myPattern;
//mypattern ¿¡ ¸Þ¸ð¸® ÇÒ´çÀÌ µÇ°í ÆÐŶÀ¸·Î ¾²¿©Áö°Å³ª ¿øÇÏ´Â ÆÐŶÀÇ ¸Þ¸ð¸®  assignÀÌ µÇ¸é
char* src = (char*) myPattern;
char desMask[85 + 1]; // string À¸·Î µý´Ù±æ·¡ ³Îij¸¯ÅÍ ÀÚ¸® 1°³  Ãß°¡ÇÑ °ÍÀÔ´Ï´Ù.
char desPettern[12 + 1]; // string À¸·Î µý´Ù±æ·¡ ³Îij¸¯ÅÍ ÀÚ¸® 1°³  Ãß°¡ÇÑ °ÍÀÔ´Ï´Ù.
strncpy(desMask, src + 208, 85);
strncpy(desPettern, src + 196, 12);
desMask[85] = 0;  // string À¸·Î µý´Ù±æ·¡ ³Îij¸¯ÅÍ Ãß°¡ÇÑ °ÍÀÔ´Ï´Ù.
desPettern[12] = 0;  // string À¸·Î µý´Ù±æ·¡ ³Îij¸¯ÅÍ Ãß°¡ÇÑ °ÍÀÔ´Ï´Ù.

¾Æ´Ï¸é »ç¿ëÇÒ¶§ Å©±â¸¦ ¿°µÎÇصΰí Àß ¾µ °ÍÀ̸é
char* desMask = ((char*)myPattern) + 208;
char* desPettern = ((char*)myPattern) + 196;
À¸·Î µÎ°í ½áµµ µÉ °Ì´Ï´Ù.
     
isaiah 2016-06
Á¦°¡ ÀÌÇØÇÑ°Ô ¸ÂÀº°Ç ¸Â³ª¿ä? Çѹø Çغ¸°Ú½À´Ï´Ù °¨»çÇÕ´Ï´Ù.


QnA
Á¦¸ñPage 2245/5598
2014-05   4510397   Á¤ÀºÁØ1
2015-12   1062240   ¹é¸Þ°¡
2016-06   8096   ÀÌ»óÀ±SY
2016-06   3527   ±è°Ç¿ì
2016-06   4895   Â÷³ÝÄÄÇ»ÅÍ
2016-06   4666   ½Öcpu
2016-06   5376   FullMoon
2016-06   7865   ¹Ì¼ö¸Ç
2016-06   4004   ³ªÆÄÀÌ°­½ÂÈÆ
2016-06   4593   ³ªÆÄÀÌ°­½ÂÈÆ
2016-06   9705   PCMaster
2016-06   3704   ´ÃÆĶõ
2016-06   3375   ´ÃÆĶõ
2016-06   15252   NeOpLE
2016-06   4553   ´ÃÆĶõ
2016-06   4048   ·ê·ç¶ö¶ó
2016-06   3342   justin1
2016-06   4751   dz°æ1
2016-06   3851   ¹Ì¼ö¸Ç
2016-06   3465   ȸ¿øK
2016-06   3490   À嵿°Ç2014
2016-06   5942   1ȸ¿ëÀÓ·¹¾Ë