65,186
社区成员




bool GetAdapterType ( const TCHAR *pAdapterName ,int &nCardType )
{
#define NET_CARD_KEY _T("System\\CurrentControlSet\\Control\\Network\\{4D36E972-E325-11CE-BFC1-08002BE10318}")
BOOL ret_value = FALSE;
TCHAR szDataBuf[MAX_PATH+1];
DWORD dwDataLen = MAX_PATH;
DWORD dwType = REG_SZ;
HKEY hNetKey = NULL;
HKEY hLocalNet = NULL;
if(ERROR_SUCCESS != RegOpenKeyEx(HKEY_LOCAL_MACHINE,NET_CARD_KEY, 0, KEY_READ, &hNetKey))
return FALSE;
wsprintf(szDataBuf,_T("%s\\Connection"), pAdapterName);
if(ERROR_SUCCESS != RegOpenKeyEx(hNetKey ,szDataBuf ,0 ,KEY_READ, &hLocalNet))
{
RegCloseKey(hNetKey);
return FALSE;
}
if (ERROR_SUCCESS != RegQueryValueEx(hLocalNet, _T("MediaSubType"), 0, &dwType, (BYTE *)szDataBuf, &dwDataLen))
{
goto ret;
}
nCardType = *((DWORD *)szDataBuf);
ret:
RegCloseKey(hLocalNet);
RegCloseKey(hNetKey);
return ret_value;
}
要读注册表的值,比如
try
{
#define DEFAULT_BUFFER_SIZE 40960L
Interfaces.RemoveAll();
unsigned char *data = (unsigned char*)malloc(DEFAULT_BUFFER_SIZE);
DWORD type;
DWORD size = DEFAULT_BUFFER_SIZE;
DWORD ret;
char s_key[4096];
sprintf( s_key , "%d" , 510 );
while((ret = RegQueryValueEx(HKEY_PERFORMANCE_DATA, s_key, 0, &type, data, &size)) != ERROR_SUCCESS) {
while(ret == ERROR_MORE_DATA)
{
size += DEFAULT_BUFFER_SIZE;
data = (unsigned char*) realloc(data, size);
}
if(ret != ERROR_SUCCESS)
{
return FALSE;
}
}
PERF_DATA_BLOCK *dataBlockPtr = (PERF_DATA_BLOCK *)data;
PERF_OBJECT_TYPE *objectPtr = FirstObject(dataBlockPtr);
for(int a=0 ; a<(int)dataBlockPtr->NumObjectTypes ; a++)
{
char nameBuffer[255];
if(objectPtr->ObjectNameTitleIndex == 510)
{
DWORD processIdOffset = ULONG_MAX;
PERF_COUNTER_DEFINITION *counterPtr = FirstCounter(objectPtr);
for(int b=0 ; b<(int)objectPtr->NumCounters ; b++)
{
if(counterPtr->CounterNameTitleIndex == 520)
processIdOffset = counterPtr->CounterOffset;
counterPtr = NextCounter(counterPtr);
}
if(processIdOffset == ULONG_MAX) {
free(data);
return 1;
}
PERF_INSTANCE_DEFINITION *instancePtr = FirstInstance(objectPtr);
for(b=0 ; b<objectPtr->NumInstances ; b++)
{
wchar_t *namePtr = (wchar_t *) ((BYTE *)instancePtr + instancePtr->NameOffset);
PERF_COUNTER_BLOCK *counterBlockPtr = GetCounterBlock(instancePtr);
char *pName = WideToMulti(namePtr, nameBuffer, sizeof(nameBuffer));
if( strcmp(pName, "") == 0 ) continue;
DWORD bandwith = *((DWORD *) ((BYTE *)counterBlockPtr + processIdOffset));
DWORD tottraff = 0;
Interfaces.AddTail(CString(pName));
Bandwidths.AddTail(bandwith);
TotalTraffics.AddTail(tottraff); // initial 0, just for creating the list
instancePtr = NextInstance(instancePtr);
}
}
objectPtr = NextObject(objectPtr);
}
free(data);
return TRUE;
}
catch(...)
{
return FALSE;
}