#define SIZEOF_DEVICE_NAME 256
CString strDeviceList = "";
BOOL get_device_info(int Index,
char *key_name,
char *device_info,
char *device_description)
{
HKEY hkey ;
DWORD size ;
DWORD type ;
BOOL retval ;
retval = FALSE ;
memset( device_info, 0, SIZEOF_DEVICE_NAME) ;
if( RegOpenKeyExA(HKEY_LOCAL_MACHINE,
key_name,
0,
KEY_READ,
&hkey) == ERROR_SUCCESS)
{
type = REG_SZ ;
size = SIZEOF_DEVICE_NAME ;
if( RegQueryValueExA(hkey,
"ServiceName",
NULL,
&type,
( BYTE *) device_info,
&size) == ERROR_SUCCESS)
{
type = REG_SZ ;
size = SIZEOF_DEVICE_NAME ;
if( RegQueryValueExA(hkey,
"Description",
NULL,
&type,
( BYTE *) device_description,
&size) == ERROR_SUCCESS)
{
retval = TRUE ;
}
}
RegCloseKey( hkey) ;
}
return retval ;
}
BOOL list_devices( void)
{
char key_name[ SIZEOF_DEVICE_NAME] = {0} ;
char full_name[ SIZEOF_DEVICE_NAME] = {0} ;
char device_info[ SIZEOF_DEVICE_NAME] = {0} ;
char device_description[ SIZEOF_DEVICE_NAME] = {0} ;
strDeviceList = "";
FILETIME file_time ;
HKEY hkey ;
int index ;
DWORD size ;
index = 0 ;
if( RegOpenKeyExA(HKEY_LOCAL_MACHINE, "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\NetworkCards",
0,
KEY_READ,
&hkey) == ERROR_SUCCESS)
{
size = SIZEOF_DEVICE_NAME ;
while( RegEnumKeyExA(hkey,
index,
key_name,
&size,
NULL,
NULL,
NULL,
&file_time) == ERROR_SUCCESS)
{
sprintf(full_name,"SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\NetworkCards\\%s", key_name) ;
get_device_info(index,
full_name,
device_info,
device_description) ;
CString strDevice = "";
strDevice.Format(
"Index=%d\r\n\tName=%s\r\n\tDesc=%s\r\n\t"
"Key=%s\r\n\r\n",
index + 1,
device_info,
device_description,
full_name) ;
strDeviceList += strDevice;
index++ ;
size = SIZEOF_DEVICE_NAME ;
}
RegCloseKey( hkey) ;
}
if( index == 0)
{
return false;// printf( "No devices found\n\n") ;
}
return TRUE ;
}
void main()
{
list_devices();
print("%s", strDeviceList);
}
在使用DeviceIoControl关联到我们的NdisDevice设备的时候又错误了。原因是无法关联到该设备,为什么?因为你的设别名称填写错误。
1.用注册表看。
2装了winpcap的人可以使用winpcap查看。其形状如:\Devce\NPF_{xxxxxxxxx} ;
又来一个NdisDevice设备名称,这个才是真正的硬件设备名称。怎么看?