|
|
1.1 root 1: /*++
2:
3: Copyright (c) 1993 Microsoft Corporation
4:
5: Module Name:
6:
7: macaddr.c
8:
9: Abstract:
10:
11: This is a Win32 program used to access a MAC driver to query stats.
12:
13: Author:
14:
15: Robert Nelson (RobertN) 22-Sep-1993.
16:
17: Environment:
18:
19: Win32 user mode.
20:
21: Notes:
22:
23: Revision History:
24:
25: --*/
26:
27:
28: //
29: // Include files
30: //
31:
32: #include <windows.h>
33: #include <stdio.h>
34: #include <stdlib.h>
35: #include <winioctl.h>
36: #include "ntddndis.h" // This defines the IOCTL constants.
37:
38: #define DEVICE_PREFIX "\\\\.\\"
39:
40: int
41: main(
42: int argc,
43: char ** argv
44: )
45: {
46:
47: UCHAR LinkName[512];
48: UCHAR DeviceName[80];
49: UCHAR szMACFileName[80];
50: UCHAR OidData[4096];
51: NDIS_OID OidCode;
52: BOOLEAN bCreatedDevice;
53: DWORD ErrorNumber;
54: DWORD ReturnedCount;
55: HANDLE hMAC;
56:
57: //
58: // Check to make sure we got the right number of arguments before we
59: // create any devices.
60: //
61:
62: if (argc != 2)
63: {
64: printf("usage: macdmp <device>\n");
65: return(1);
66: }
67:
68: //
69: // Check to see if the DOS name for the MAC driver already exists.
70: // Its not created automatically in version 3.1 but may be later.
71: //
72:
73: if (QueryDosDevice(argv[1], LinkName, sizeof(LinkName)) == 0)
74: {
75: if ((ErrorNumber = GetLastError()) == ERROR_FILE_NOT_FOUND)
76: {
77: strcpy(DeviceName, "\\Device\\");
78: strcat(DeviceName, argv[1]);
79:
80: //
81: // It doesn't exist so create it.
82: //
83: if (!DefineDosDevice( DDD_RAW_TARGET_PATH, argv[1], DeviceName))
84: {
85: printf(
86: "DefineDosDevice returned an error creating the device = %d\n",
87: GetLastError()
88: );
89: return(1);
90: }
91: bCreatedDevice = TRUE;
92: }
93: else
94: {
95: printf("QueryDosDevice returned an error = %d\n", GetLastError());
96: return(1);
97: }
98: }
99: else
100: {
101: bCreatedDevice = FALSE;
102: }
103:
104: //
105: // Construct a device name to pass to CreateFile
106: //
107: strcpy(szMACFileName, DEVICE_PREFIX);
108: strcat(szMACFileName, argv[1]);
109:
110: hMAC = CreateFile(
111: szMACFileName,
112: GENERIC_READ,
113: FILE_SHARE_READ | FILE_SHARE_WRITE,
114: NULL,
115: OPEN_EXISTING,
116: 0,
117: INVALID_HANDLE_VALUE
118: );
119:
120: if (hMAC != INVALID_HANDLE_VALUE)
121: {
122: //
123: // We successfully opened the driver, format the IOCTL to pass the
124: // driver.
125: //
126:
127: OidCode = OID_802_3_CURRENT_ADDRESS;
128:
129: if (DeviceIoControl(
130: hMAC,
131: IOCTL_NDIS_QUERY_GLOBAL_STATS,
132: &OidCode,
133: sizeof(OidCode),
134: OidData,
135: sizeof(OidData),
136: &ReturnedCount,
137: NULL
138: ))
139: {
140: if (ReturnedCount == 6)
141: {
142: printf(
143: "Mac address = %02.2X-%02.2X-%02.2X-%02.2X-%02.2X-%02.2X\n",
144: OidData[0], OidData[1], OidData[2], OidData[3],
145: OidData[4], OidData[5], OidData[6], OidData[7]
146: );
147: }
148: else
149: {
150: printf(
151: "DeviceIoControl returned an invalid count = %d\n",
152: ReturnedCount
153: );
154: }
155: }
156: else
157: {
158: printf("DeviceIoControl returned an error = %d\n", GetLastError());
159: }
160: }
161: else
162: {
163: printf("CreateFile returned an error = %d\n", GetLastError());
164: }
165:
166: if (bCreatedDevice)
167: {
168: //
169: // The MAC driver wasn't visible in the Win32 name space so we created
170: // a link. Now we have to delete it.
171: //
172: if (!DefineDosDevice(
173: DDD_RAW_TARGET_PATH | DDD_REMOVE_DEFINITION |
174: DDD_EXACT_MATCH_ON_REMOVE,
175: argv[1],
176: DeviceName)
177: )
178: {
179: printf(
180: "DefineDosDevice returned an error removing the device = %d\n",
181: GetLastError()
182: );
183: return(1);
184: }
185: }
186:
187: return(0);
188: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.