Новичок
Профиль
Группа: Участник
Сообщений: 5
Регистрация: 17.7.2006
Где: Россия, Москва
Репутация: нет Всего: нет
|
Файл netmanuf (прикреплен) должен находится в \system32\drivers\etc | Код | //============================================================================== // Get manufactured network card from MAC address // // PARAMETERS: // // IN szMacNumber - first 3 bytes from MAC (12:34:56 or 123456 or 12 34 56 or ... // // OUT lpManufInfo - pointer to MANUFINFO // // Sample: // ... // MANUFINFO miManufInfo; // char szMac[] = "12:34:56"; // DWORD dwRet = GetManufByMac( szMac, &miManufInfo ); // if ( dwRet ) // { // printf("MAC: %s - %s (%s)", szMac, miManufInfo.szShortName, miManufInfo.szAlias); // } // // Popov A.V. Russia, Moskow, 2001-2006 // email: [email protected] // [email protected] // // PAV PopoffSoft: SystemUTL, CheckDB, Pron32, FastTest, PCList, PopovOCX, ... //==============================================================================
#include <Windows.h> #include <Shlwapi.h> #include <string.h> #include <stdio.h>
#pragma comment(lib, "Kernel32.lib") #pragma comment(lib, "Shlwapi.lib")
//------------------------------------- #define MAC_MANUF_LEN 7 #define MAC_ALIAS_LEN 20 #define MAC_DESCR_LEN 128
#define DEF_MANUF_FILE_NAME "\\drivers\\etc\\netmanuf"
//------------------------------------- typedef struct _ManufInfo{ char szShortName[MAC_MANUF_LEN]; char szAlias[MAC_ALIAS_LEN]; char szDescription[MAC_DESCR_LEN]; } MANUFINFO, *PMANUFINFO;
//============================================================================== //============================================================================== DWORD WINAPI GetManufByMac(char * szMacNumber, PMANUFINFO lpManufInfo) //============================================================================== { DWORD dwRetVal = 0; char szMacNum[MAC_MANUF_LEN]; char szFName[MAX_PATH+1]; struct _stat buf; HANDLE hFile; DWORD dwFileSize; HANDLE hFileMap; PVOID pvFile;
char seps[] = " \t\n\r"; char *token, *pszDup1;
__try {
if ( szMacNumber == NULL || *szMacNumber == '\0' || strlen(szMacNumber) < (MAC_MANUF_LEN-1) ) __leave;
ZeroMemory(szMacNum, MAC_MANUF_LEN);
int iChar, i = 0; while ( i < (MAC_MANUF_LEN-1) && *szMacNumber ) { iChar = (int) *szMacNumber++; if ( isalnum(iChar) ) { szMacNum[i++] = (char) iChar; } }
GetSystemDirectory(szFName, MAX_PATH+1); strcat(szFName, DEF_MANUF_FILE_NAME);
if ( _stat(szFName, &buf) != 0 ) __leave;
hFile = CreateFile(szFName, GENERIC_WRITE | GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); if (hFile == INVALID_HANDLE_VALUE) { __leave; }
dwFileSize = GetFileSize(hFile, 0);
hFileMap = CreateFileMapping(hFile, NULL, PAGE_WRITECOPY, 0, 0, NULL);
if (!hFileMap) __leave;
pvFile = MapViewOfFile(hFileMap, FILE_MAP_COPY, 0, 0, 0);
PSTR pchANSI = (PSTR) pvFile; pchANSI[dwFileSize] = 0;
char *pdest0 = NULL; char *pdest = StrStrI(pchANSI, szMacNum);
while ( pdest ) {
pdest0 = pdest + 1;
while( pdest != pchANSI && *pdest != '\n' ) { pdest--; }
if (*pdest == '\n' ) pdest++;
if (*pdest == '#' ) { pdest = StrStrI(pdest0, szMacNum); } else { break; } }
if ( pdest == NULL ) __leave;
pdest0 = strchr(pdest, '\r');
if (pdest0) *pdest0 = '\0';
if (lpManufInfo == NULL) { lpManufInfo = (PMANUFINFO) HeapAlloc (GetProcessHeap (), HEAP_ZERO_MEMORY, sizeof(MANUFINFO)); } else { ZeroMemory(lpManufInfo, sizeof(MANUFINFO)); }
pszDup1 = _strdup(pdest);
token = strtok(pszDup1, seps);
if ( token ) { strcpy(lpManufInfo->szShortName, token);
token = strtok(NULL, seps);
if(token) { token = strtok(NULL, seps); if ( token ) { if(*token == '#') { pdest0 = strchr(pdest, '#'); strcpy(lpManufInfo->szDescription, (pdest0 + 1)); } else { strcpy(lpManufInfo->szAlias, token);
token = strtok(NULL, seps);
if ( token && *token == '#') { pdest0 = strchr(pdest, '#'); strcpy(lpManufInfo->szDescription, (pdest0 + 1)); } } } }
dwRetVal = 1; } } __finally { if (hFile != INVALID_HANDLE_VALUE) CloseHandle(hFile); if (hFileMap) CloseHandle(hFileMap); if (pvFile) UnmapViewOfFile(pvFile);
if (pszDup1) free(pszDup1); } return dwRetVal; }
|
|