int FindPciDevice(char *DeviceId, HKEY *hDevicePCIRegEntryHandle)
{
int nReturnResult = ERROR_FILE_NOT_FOUND;
int nResult;
char DeviceRegEntry[200];
HKEY hDeviceRegEntryHandle;
if (W32N_IsWindowsNT())
{
strcpy(DeviceRegEntry, WIN_NT_PATH_DEVICE_REG_ENTRY_BRANCH "pci");
nResult = RegOpenKeyEx(HKEY_LOCAL_MACHINE, DeviceRegEntry, 0, KEY_READ, &hDeviceRegEntryHandle);
}
else
{
strcpy(DeviceRegEntry, WIN_95_PATH_DEVICE_REG_ENTRY_BRANCH "pci");
nResult = RegOpenKeyEx(HKEY_CURRENT_CONFIG, DeviceRegEntry, 0, KEY_READ, &hDeviceRegEntryHandle);
}
if ( nResult == ERROR_SUCCESS )
{
char DeviceName[200];
strcpy(DeviceName, (char *)DeviceId+4); // Get the string after "pci\"
// We will keep track of the name of the adapter selected (if any) in .
// Allows for a full enumeration in which we take
// the string with the greatest lexicographic value.
// For example, if we found
// VEN_1260&DEV_3873&SUBSYS_38731260&REV_01
// and
// VEN_1260&DEV_3873&SUBSYS_38731260&REV_02
// we would override our first selection with the 02.
char AdapterToUse[200] = "";
DWORD nIndex = 0;
while ((nResult == ERROR_SUCCESS) && (nReturnResult != ERROR_SUCCESS))
{
CHAR szDeviceIDAndRevStr[ 200 ];
DWORD cbDeviceIDAndRevLen = 200;
nResult = RegEnumKeyEx(
hDeviceRegEntryHandle, // Handle Of Key To Enumerate
nIndex, // Index Of Subkey To Enumerate
szDeviceIDAndRevStr, // Buffer For Subkey Name
&cbDeviceIDAndRevLen, // Size Of Subkey Name
NULL, // Reserved, Must Be NULL
NULL, // Buffer For Class String
NULL, // Size Of Class Buffer
NULL // Time Key Last Written To
);
if (0 == strnicmp(DeviceName,szDeviceIDAndRevStr,strlen(DeviceName)))
{
if (0 > strnicmp(AdapterToUse,szDeviceIDAndRevStr,sizeof(AdapterToUse)))
{
// Found a match, try it out.
strncpy(AdapterToUse, szDeviceIDAndRevStr,sizeof(AdapterToUse));
// DebugLog("Found PCI Device ");
// DebugLogNL(AdapterToUse);
}
}
nIndex++;
}
if (strlen(AdapterToUse) > 0)
{
// Now get a handle to this registry entry.
nReturnResult = RegOpenKeyEx(hDeviceRegEntryHandle, AdapterToUse, 0, KEY_READ, hDevicePCIRegEntryHandle);
RegCloseKey( hDeviceRegEntryHandle );
}
}
return nReturnResult;
}
nRegResult = RegOpenKeyEx(
HKEY_LOCAL_MACHINE,
W32N_REGSTR_PATH_NETCARDS, // Address Of Name Of Subkey To Open
0, // Options (Reserved)
KEY_READ, // Security Access Mask
&hKeyClassNet
);
nRegResult = RegOpenKeyEx(
hKeyClassNet, // Handle Of Key To Enumerate
pszEnumerator, // Subkey To Open
0, // Options, Must Be Zero
KEY_READ, // Security Access Mask
&hKeyAdapter // Address Of Handle Of Open Key
);
/* Get Hidden Flag
------------------ */
dwDataLen = sizeof( DWORD );
dwType = REG_DWORD;
nRegResult = RegQueryValueEx(
hKeyAdapter, // Handle Of Key To Query
_TEXT("Hidden"), // Name Of Value To Query
NULL, // Reserved, Must Be NULL
&dwType, // Pointer To Value Type
(PBYTE )&dwData, // Pointer To Value Buffer
&dwDataLen // Pointer To Buffer Size
);
/* Get Adapter Information From Registry
---------------------------------------- */
nResult = W32N_GetAdapterRegistryInfoBySubkeyIndex( &m_AdapterInfo, nEnumerator );