|
|
1.1 ! root 1: #include <windows.h> ! 2: ! 3: #include "hellowin.h" ! 4: ! 5: ULONG Filters[6]={0, ! 6: NDIS_PACKET_TYPE_DIRECTED, ! 7: NDIS_PACKET_TYPE_MULTICAST, ! 8: NDIS_PACKET_TYPE_BROADCAST, ! 9: NDIS_PACKET_TYPE_ALL_MULTICAST, ! 10: NDIS_PACKET_TYPE_PROMISCUOUS}; ! 11: ! 12: static char szbuff[40]; ! 13: ! 14: char szChildAppName[]="hexdump"; ! 15: ! 16: ! 17: HFONT hFont; ! 18: HWND hwndchild; ! 19: ! 20: HINSTANCE hInst; ! 21: ! 22: ADAPTER Adapter; ! 23: ! 24: UINT showdump=0; ! 25: ! 26: LRESULT FAR PASCAL WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam); ! 27: ! 28: LRESULT FAR PASCAL ChildWndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam); ! 29: ! 30: ! 31: HFONT GetFont(void); ! 32: ! 33: DWORD GetTextSize(HWND hWnd, HFONT hFont); ! 34: ! 35: LRESULT ! 36: HandleCommands( ! 37: HWND hWnd, ! 38: UINT uMsg, ! 39: UINT wParam, ! 40: LONG lParam ! 41: ); ! 42: ! 43: BOOLEAN ! 44: CreateAdapter( ! 45: IN PADAPTER pAdapter ! 46: ); ! 47: ! 48: BOOLEAN ! 49: CloseAdapter( ! 50: IN PADAPTER pAdapter ! 51: ); ! 52: ! 53: ! 54: int PASCAL WinMain (HINSTANCE hInstance, ! 55: HINSTANCE hPrevInstance, ! 56: LPSTR lpszCmdParam, ! 57: int nCmdShow) ! 58: ! 59: ! 60: ! 61: ! 62: { ! 63: static char szAppName[]="HelloWin"; ! 64: HWND hwnd; ! 65: MSG msg; ! 66: WNDCLASS wndclass; ! 67: ! 68: hInst=hInstance; ! 69: ! 70: if (!hPrevInstance) ! 71: { ! 72: wndclass.style = CS_HREDRAW | CS_VREDRAW; ! 73: wndclass.lpfnWndProc = WndProc; ! 74: wndclass.cbClsExtra = 0; ! 75: wndclass.cbWndExtra = 0; ! 76: wndclass.hInstance = hInstance; ! 77: wndclass.hIcon = LoadIcon (NULL, IDI_APPLICATION); ! 78: wndclass.hCursor = LoadCursor(NULL, IDC_ARROW); ! 79: wndclass.hbrBackground= GetStockObject(WHITE_BRUSH); ! 80: wndclass.lpszMenuName = "GenericMenu"; ! 81: wndclass.lpszClassName= szAppName; ! 82: ! 83: RegisterClass(&wndclass); ! 84: } ! 85: ! 86: ! 87: if (!hPrevInstance) ! 88: { ! 89: wndclass.style = CS_HREDRAW | CS_VREDRAW | CS_DBLCLKS | ! 90: CS_BYTEALIGNCLIENT; ! 91: wndclass.lpfnWndProc = ChildWndProc; ! 92: wndclass.cbClsExtra = 0; ! 93: wndclass.cbWndExtra = 0; ! 94: wndclass.hInstance = hInstance; ! 95: wndclass.hIcon = LoadIcon (hInstance,MAKEINTRESOURCE(1000)); ! 96: wndclass.hCursor = LoadCursor(NULL, IDC_ARROW); ! 97: wndclass.hbrBackground= GetStockObject(WHITE_BRUSH); ! 98: wndclass.lpszMenuName = NULL; ! 99: wndclass.lpszClassName= szChildAppName; ! 100: ! 101: RegisterClass(&wndclass); ! 102: ! 103: } ! 104: ! 105: ! 106: ! 107: hwnd = CreateWindow (szAppName, ! 108: "the hello world program", ! 109: WS_OVERLAPPEDWINDOW, ! 110: CW_USEDEFAULT, ! 111: CW_USEDEFAULT, ! 112: CW_USEDEFAULT, ! 113: CW_USEDEFAULT, ! 114: NULL, ! 115: NULL, ! 116: hInstance, ! 117: NULL); ! 118: ! 119: ShowWindow (hwnd,nCmdShow); ! 120: UpdateWindow(hwnd); ! 121: ! 122: while (GetMessage (&msg, NULL, 0,0)) ! 123: { ! 124: TranslateMessage(&msg); ! 125: DispatchMessage(&msg); ! 126: } ! 127: ! 128: return (msg.wParam); ! 129: } ! 130: ! 131: LRESULT FAR PASCAL WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) ! 132: ! 133: { ! 134: HDC hdc; ! 135: PAINTSTRUCT ps; ! 136: RECT rect; ! 137: ! 138: ! 139: switch (message) ! 140: { ! 141: case WM_COMMAND: ! 142: HandleCommands(hwnd, message, wParam, lParam); ! 143: return 0; ! 144: ! 145: case WM_LBUTTONDOWN: ! 146: if (!showdump) { ! 147: hwndchild = CreateWindow (szChildAppName, ! 148: "Hex Dump", ! 149: WS_CHILD | WS_CAPTION | WS_SYSMENU | WS_VSCROLL | ! 150: WS_VISIBLE | WS_THICKFRAME | WS_CLIPSIBLINGS, ! 151: 0,0, ! 152: 300,100, ! 153: hwnd, ! 154: (HMENU) 1, ! 155: hInst, ! 156: NULL); ! 157: } else { ! 158: ! 159: SendMessage(hwndchild,WM_DUMPCHANGE,0,0l); ! 160: } ! 161: ! 162: showdump=1; ! 163: return 0; ! 164: ! 165: ! 166: ! 167: case WM_CREATE: ! 168: ! 169: /* Open a handle to the SC Manager database. */ ! 170: ! 171: Adapter.schSCManager = OpenSCManager( ! 172: NULL, /* local machine */ ! 173: NULL, /* ServicesActive database */ ! 174: SC_MANAGER_ALL_ACCESS); /* full access rights */ ! 175: ! 176: if (Adapter.schSCManager == NULL) { ! 177: ! 178: MessageBox(NULL,TEXT("Could not open SC"),TEXT("Hellwin"),MB_OK); ! 179: ! 180: } else { ! 181: ! 182: Adapter.ServiceHandle=OpenService(Adapter.schSCManager, ! 183: TEXT("Packet"), ! 184: SERVICE_START); ! 185: ! 186: if (Adapter.ServiceHandle == NULL) { ! 187: ! 188: MessageBox(NULL,TEXT("Could not open service"),TEXT("Hellwin"),MB_OK); ! 189: ! 190: } ! 191: ! 192: StartService(Adapter.ServiceHandle, ! 193: 0, ! 194: NULL ! 195: ); ! 196: ! 197: } ! 198: ! 199: ! 200: lstrcpy(Adapter.AdapterName, ! 201: "\\\\.\\Packet"); ! 202: ! 203: Adapter.BufferSize=1514; ! 204: ! 205: Adapter.hMem=GlobalAlloc(GMEM_MOVEABLE,1514); ! 206: ! 207: Adapter.lpMem=GlobalLock(Adapter.hMem); ! 208: ! 209: Adapter.hMem2=GlobalAlloc(GMEM_MOVEABLE,1514); ! 210: ! 211: Adapter.lpMem2=GlobalLock(Adapter.hMem2); ! 212: ! 213: ! 214: return 0; ! 215: ! 216: ! 217: ! 218: case WM_KEYDOWN: ! 219: ! 220: ! 221: ! 222: return 0; ! 223: ! 224: case WM_PAINT: ! 225: hdc=BeginPaint(hwnd,&ps); ! 226: GetClientRect (hwnd,&rect); ! 227: ! 228: EndPaint(hwnd,&ps); ! 229: return 0; ! 230: ! 231: ! 232: case WM_DESTROY: ! 233: PostQuitMessage(0); ! 234: return 0; ! 235: } ! 236: return DefWindowProc(hwnd,message, wParam, lParam); ! 237: } ! 238: ! 239: ! 240: ! 241: ! 242: ! 243: LRESULT ! 244: HandleCommands( ! 245: HWND hWnd, ! 246: UINT uMsg, ! 247: UINT wParam, ! 248: LONG lParam ! 249: ) ! 250: ! 251: { ! 252: ULONG Filter; ! 253: ULONG BytesReturned; ! 254: BOOLEAN Result; ! 255: ! 256: ! 257: UINT i; ! 258: ! 259: ! 260: OVERLAPPED OverLapped; ! 261: ! 262: switch (wParam) { ! 263: ! 264: case IDM_OPEN: ! 265: ! 266: Result=CreateAdapter(&Adapter); ! 267: ! 268: if (Result) { ! 269: ! 270: SetWindowText(hWnd,Adapter.AdapterName); ! 271: ! 272: } ! 273: ! 274: ! 275: return TRUE; ! 276: ! 277: ! 278: case IDM_CLOSE: ! 279: ! 280: CloseHandle(Adapter.hFile); ! 281: ! 282: return TRUE; ! 283: ! 284: ! 285: case IDM_NO_FILTER: ! 286: ! 287: case IDM_DIRECTED: ! 288: ! 289: case IDM_MULTICAST: ! 290: ! 291: case IDM_BROADCAST: ! 292: ! 293: case IDM_ALL_MULTICAST: ! 294: ! 295: case IDM_PROMISCUOUS: ! 296: ! 297: ! 298: Filter=Filters[wParam-IDM_NO_FILTER]; ! 299: ! 300: DeviceIoControl(Adapter.hFile, ! 301: (DWORD)IOCTL_PROTOCOL_SET_FILTER, ! 302: &Filter, ! 303: 4, ! 304: NULL, ! 305: 0, ! 306: &BytesReturned, ! 307: NULL); ! 308: ! 309: ! 310: ! 311: ! 312: ! 313: return TRUE; ! 314: ! 315: case IDM_RESET: ! 316: ! 317: DeviceIoControl(Adapter.hFile, ! 318: (DWORD)IOCTL_PROTOCOL_RESET, ! 319: &Filter, ! 320: 4, ! 321: NULL, ! 322: 0, ! 323: &BytesReturned, ! 324: NULL); ! 325: ! 326: ! 327: ! 328: ! 329: ! 330: return TRUE; ! 331: ! 332: ! 333: ! 334: case IDM_READ: ! 335: ! 336: ! 337: ! 338: OverLapped.Offset=0; ! 339: OverLapped.OffsetHigh=0; ! 340: OverLapped.hEvent=Adapter.hEvent; ! 341: ! 342: ! 343: Result=ReadFile(Adapter.hFile, ! 344: Adapter.lpMem, ! 345: 1500, ! 346: &BytesReturned, ! 347: &OverLapped); ! 348: ! 349: ! 350: return TRUE; ! 351: ! 352: ! 353: case IDM_SEND: ! 354: ! 355: OverLapped.Offset=0; ! 356: OverLapped.OffsetHigh=0; ! 357: OverLapped.hEvent=Adapter.hEvent; ! 358: ! 359: ! 360: ! 361: Adapter.lpMem2[0]=(UCHAR)0xff; ! 362: Adapter.lpMem2[1]=(UCHAR)0xff; ! 363: Adapter.lpMem2[2]=(UCHAR)0xff; ! 364: Adapter.lpMem2[3]=(UCHAR)0xff; ! 365: Adapter.lpMem2[4]=(UCHAR)0xff; ! 366: Adapter.lpMem2[5]=(UCHAR)0xff; ! 367: ! 368: for (i=0;i<5;i++) { ! 369: ! 370: Result=WriteFile(Adapter.hFile, ! 371: Adapter.lpMem2, ! 372: 64, ! 373: &BytesReturned, ! 374: &OverLapped); ! 375: } ! 376: ! 377: ! 378: return TRUE; ! 379: ! 380: ! 381: default: ! 382: ! 383: return 0; ! 384: ! 385: } ! 386: ! 387: ! 388: } ! 389: ! 390: ! 391: ! 392: ! 393: BOOLEAN ! 394: CreateAdapter( ! 395: IN PADAPTER pAdapter ! 396: ) ! 397: ! 398: { ! 399: ! 400: pAdapter->hEvent=CreateEvent(NULL, ! 401: FALSE, ! 402: FALSE, ! 403: "Protocol_Event"); ! 404: ! 405: if (pAdapter->hEvent == NULL) { ! 406: return 0; ! 407: } ! 408: ! 409: pAdapter->hFile=CreateFile(pAdapter->AdapterName, ! 410: GENERIC_WRITE | GENERIC_READ, ! 411: 0, ! 412: NULL, ! 413: CREATE_ALWAYS, ! 414: FILE_FLAG_OVERLAPPED, ! 415: 0 ! 416: ); ! 417: ! 418: if (pAdapter->hFile == INVALID_HANDLE_VALUE) { ! 419: CloseHandle(pAdapter->hEvent); ! 420: return 0; ! 421: } ! 422: ! 423: ! 424: ! 425: ! 426: return TRUE; ! 427: ! 428: } ! 429: ! 430: ! 431: ! 432: BOOLEAN ! 433: CloseAdapter( ! 434: IN PADAPTER pAdapter ! 435: ) ! 436: ! 437: { ! 438: ! 439: CloseHandle(pAdapter->hFile); ! 440: ! 441: CloseHandle(pAdapter->hEvent); ! 442: ! 443: pAdapter->hFile=NULL; ! 444: ! 445: return TRUE; ! 446: } ! 447: ! 448: ! 449: ! 450: ! 451: ! 452: ! 453: ! 454: ! 455: LRESULT FAR PASCAL ChildWndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) ! 456: ! 457: { ! 458: HDC hdc; ! 459: PAINTSTRUCT ps; ! 460: RECT rect; ! 461: UINT i,j; ! 462: char szbuff[100],szbuff2[8],szbuff3[17]; ! 463: UINT limit; ! 464: LPSTR lpMem; ! 465: static HFONT hOldFont; ! 466: static UINT cyclient,cxclient,lines,dumppos,oldpos,paragphs,cychar; ! 467: static WORD start; ! 468: ! 469: switch (message) ! 470: { ! 471: case WM_CREATE: ! 472: cychar = HIWORD(GetTextSize(hwnd,hFont)); ! 473: ! 474: ! 475: case WM_DUMPCHANGE: ! 476: oldpos=0; ! 477: dumppos=0; ! 478: wsprintf(szbuff,"Hex Dump--"); ! 479: SetWindowText(hwnd,szbuff); ! 480: ! 481: limit=Adapter.BufferSize; ! 482: ! 483: paragphs=(short)((limit & 0xffff) >> 4); ! 484: SetScrollRange(hwnd,SB_VERT,0,(WORD)paragphs,0); ! 485: SetScrollPos(hwnd,SB_VERT,(WORD)dumppos,1); ! 486: ! 487: InvalidateRect(hwnd,NULL,1); ! 488: return 0; ! 489: ! 490: case WM_SIZE: ! 491: cyclient=HIWORD(lParam); ! 492: cxclient=LOWORD(lParam); ! 493: lines=cyclient/cychar; ! 494: return 0; ! 495: ! 496: ! 497: case WM_PAINT: ! 498: hdc=BeginPaint(hwnd,&ps); ! 499: hOldFont=SelectObject(hdc,hFont); ! 500: ! 501: if (1) ! 502: { ! 503: limit=Adapter.BufferSize; ! 504: ! 505: ! 506: limit=limit & 0xffff; ! 507: ! 508: lpMem=(LPSTR)Adapter.lpMem; ! 509: ! 510: start=dumppos*cychar; ! 511: ! 512: for (i=start ;((i<limit) && ((i-start)/cychar<lines));i+=16) ! 513: { ! 514: wsprintf(szbuff,"%08lx ",i); ! 515: for (j=0;(j<16 && (j+i<limit));j++) ! 516: { ! 517: wsprintf(szbuff2,"%02hX ",((WORD)lpMem[i+j] & 0xff)); ! 518: lstrcat(szbuff,szbuff2); ! 519: if (j==3 || j==7 || j==11) ! 520: lstrcat(szbuff," "); ! 521: wsprintf(&szbuff3[j],"%c",lpMem[i+j]); ! 522: if (szbuff3[j]=='\0') ! 523: szbuff3[j]='.'; ! 524: } ! 525: szbuff3[j]='\0'; ! 526: lstrcat(szbuff,szbuff3); ! 527: TextOut(hdc,0,i-start,szbuff,strlen(szbuff)); ! 528: } ! 529: } ! 530: ! 531: ! 532: SelectObject(hdc,hOldFont); ! 533: EndPaint(hwnd,&ps); ! 534: return 0; ! 535: ! 536: case WM_VSCROLL: ! 537: oldpos=dumppos; ! 538: switch(wParam) ! 539: { ! 540: case SB_PAGEDOWN: ! 541: dumppos+=lines; ! 542: break; ! 543: ! 544: case SB_LINEDOWN: ! 545: dumppos+=1; ! 546: break; ! 547: ! 548: case SB_THUMBPOSITION: ! 549: dumppos=LOWORD(lParam); ! 550: break; ! 551: ! 552: case SB_LINEUP: ! 553: dumppos-=1; ! 554: break; ! 555: ! 556: case SB_PAGEUP: ! 557: dumppos-=lines; ! 558: break; ! 559: ! 560: default: ! 561: return 0; ! 562: } ! 563: ! 564: limit=Adapter.BufferSize; ! 565: ! 566: paragphs=(short)((limit & 0xffff) >> 4); ! 567: ! 568: if (dumppos<0) ! 569: dumppos=0; ! 570: else ! 571: if (dumppos>paragphs) ! 572: dumppos=paragphs; ! 573: ! 574: if (((oldpos-dumppos==1) || (dumppos-oldpos==1))) ! 575: { ! 576: rect.left=0; ! 577: rect.top=0; ! 578: rect.right=cxclient; ! 579: rect.bottom=lines*cychar; ! 580: ScrollWindow(hwnd,0,cychar*(oldpos-dumppos),&rect,NULL); ! 581: UpdateWindow(hwnd); ! 582: } ! 583: else ! 584: InvalidateRect(hwnd,NULL,1); ! 585: ! 586: SetScrollPos(hwnd,SB_VERT,(WORD)dumppos,1); ! 587: return 0; ! 588: ! 589: ! 590: } ! 591: return DefWindowProc(hwnd,message, wParam, lParam); ! 592: } ! 593: ! 594: ! 595: HFONT GetFont(void) ! 596: { ! 597: static LOGFONT logfont; ! 598: ! 599: logfont.lfHeight=16; ! 600: logfont.lfCharSet=ANSI_CHARSET; ! 601: logfont.lfQuality=PROOF_QUALITY; ! 602: logfont.lfPitchAndFamily=FIXED_PITCH | FF_MODERN; ! 603: lstrcpy((LPSTR)&logfont.lfFaceName,(LPSTR)"Courier"); ! 604: ! 605: return CreateFontIndirect(&logfont); ! 606: } ! 607: ! 608: DWORD GetTextSize(HWND hWnd, HFONT hFont) ! 609: { ! 610: TEXTMETRIC Metrics; ! 611: HDC hDC; ! 612: HFONT hOldFont; ! 613: ! 614: hDC = GetDC(hWnd); ! 615: hOldFont=SelectObject(hDC,hFont); ! 616: GetTextMetrics(hDC,&Metrics); ! 617: SelectObject(hDC,hOldFont); ! 618: ReleaseDC(hWnd,hDC); ! 619: ! 620: return MAKELONG(Metrics.tmAveCharWidth, ! 621: Metrics.tmHeight+Metrics.tmExternalLeading); ! 622: ! 623: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.