|
|
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.