-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathwindis.c
executable file
·104 lines (70 loc) · 2.23 KB
/
windis.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
#include "common.h"
#include "W32ndis.h"
#include "windis.h"
HANDLE g_hDevice = INVALID_HANDLE_VALUE;
OVERLAPPED g_OverLapped;
VOID DisplayError(char *function, BOOL bSuccess, HWND hDlg)
{
char message[512];
lstrcpy(message, function);
if (bSuccess)
lstrcat(message, " successful!");
else
lstrcat(message, " failed!");
MessageBox(hDlg, message, APP_NAME, MB_OK);
}
BOOLEAN SetPacketFilter( ULONG nPacketFilter )
{
HOOK_REQUEST HookRequest;
NDIS_STATUS nNdisStatus;
HookRequest.NdisRequest.RequestType = NdisRequestSetInformation;
HookRequest.NdisRequest.DATA.SET_INFORMATION.Oid = OID_GEN_CURRENT_PACKET_FILTER;
HookRequest.NdisRequest.DATA.SET_INFORMATION.InformationBuffer = &nPacketFilter;
HookRequest.NdisRequest.DATA.SET_INFORMATION.InformationBufferLength = sizeof( ULONG );
HookRequest.NdisRequest.DATA.SET_INFORMATION.BytesRead = 0;
HookRequest.NdisRequest.DATA.SET_INFORMATION.BytesNeeded = 0;
nNdisStatus = W32N_MakeNdisRequest(
g_hDevice,
&HookRequest,
&g_OverLapped,
TRUE // Synchronous
);
if( nNdisStatus )
{
return( FALSE );
}
return( TRUE );
}
VOID WinDis(HWND hDlg)
{
char str[1024];
BOOL bReturn;
PW32N_PACKET pUserPacketData;
DWORD dwRet;
pUserPacketData = malloc(sizeof(W32N_PACKET));
g_hDevice = W32N_OpenAdapter("0001");
if (g_hDevice == INVALID_HANDLE_VALUE)
{
MessageBox(hDlg, "Open Adapter failed", APP_NAME, MB_ICONERROR | MB_OK);
return;
}
g_OverLapped.hEvent = CreateEvent(NULL, FALSE, FALSE, NULL);
ResetEvent( g_OverLapped.hEvent );
bReturn = SetPacketFilter(NDIS_PACKET_TYPE_DIRECTED | NDIS_PACKET_TYPE_PROMISCUOUS);
DisplayError("SetPacketFilter", bReturn, hDlg);
bShutDown = FALSE;
W32N_PacketRead(g_hDevice,
pUserPacketData,
NULL,
&g_OverLapped,
TRUE);
//do
//{
// bReturn = GetOverlappedResult(g_hDevice, &g_OverLapped, &dwRet, FALSE);
//} while (!bReturn && !bShutDown);
wsprintf(str, "Received a packet of size %d", pUserPacketData->nPacketDataLength);
DisplayError(str, TRUE, hDlg);
CloseHandle( g_OverLapped.hEvent );
W32N_CloseAdapter(g_hDevice);
free(pUserPacketData);
}