|
|
/** FILE: cyfriend.c ********** Module Header ********************************
* * * * Copyright (C) 2000 Cyclades Corporation * *************************************************************************/
#include "cyzports.h"
//
// For Cyzport
//
TCHAR z_szCyzPort[] = TEXT("Cyclades-Z Port "); TCHAR z_szPortIndex[] = TEXT("PortIndex");
BOOL ReplaceFriendlyName( IN HDEVINFO DeviceInfoSet, IN PSP_DEVINFO_DATA DeviceInfoData, IN PTCHAR NewComName ) {
DEVINST parentInst; HDEVINFO parentInfo; SP_DEVINFO_DATA parentData; TCHAR parentId[MAX_DEVICE_ID_LEN]; TCHAR charBuffer[MAX_PATH], deviceDesc[LINE_LEN]; HKEY hDeviceKey; TCHAR PortName[20]; DWORD PortNameSize,PortIndexSize,PortIndex; DWORD dwErr; PTCHAR comName = NULL; DWORD portNumber = 0;
// DbgOut(TEXT("ReplaceFriendlyName\n"));
if((hDeviceKey = SetupDiOpenDevRegKey(DeviceInfoSet, DeviceInfoData, DICS_FLAG_GLOBAL, 0, DIREG_DEV, KEY_READ)) == INVALID_HANDLE_VALUE) { DbgOut(TEXT("SetupDiOpenDevRegKey failed\n")); return FALSE; }
PortNameSize = sizeof(PortName); dwErr = RegQueryValueEx(hDeviceKey, m_szPortName, NULL, NULL, (PBYTE)PortName, &PortNameSize );
if (dwErr == ERROR_SUCCESS) { PortIndexSize = sizeof(PortIndex); dwErr = RegQueryValueEx(hDeviceKey, z_szPortIndex, NULL, NULL, (PBYTE)&PortIndex, &PortIndexSize ); }
RegCloseKey(hDeviceKey);
if(dwErr != ERROR_SUCCESS) { DbgOut(TEXT("RegQueryValueEx failed\n")); return FALSE; } if (NewComName == NULL) { comName = PortName; } else { comName = NewComName; } if (comName == NULL) { DbgOut(TEXT("comName NULL\n")); return FALSE; }
portNumber = PortIndex+1;
if (!SetupDiGetDeviceRegistryProperty(DeviceInfoSet, DeviceInfoData, SPDRP_DEVICEDESC, NULL, (PBYTE)deviceDesc, sizeof(deviceDesc), NULL)) { DbgOut(TEXT("Couldn't get Device Description\n")); return FALSE; }
if (_tcsnicmp (deviceDesc,z_szCyzPort,_tcslen(z_szCyzPort)) != 0){ DbgOut(TEXT("Device Description is different of Cyclades-Z Port \n")); return FALSE; } if (portNumber == 0) { DbgOut(TEXT("Invalid portNumber\n")); return FALSE; }
if (CM_Get_Parent(&parentInst,DeviceInfoData->DevInst,0) != CR_SUCCESS) { DbgOut(TEXT("CM_Get_Parent failed.\n")); return FALSE; }
if (CM_Get_Device_ID(parentInst,parentId,CharSizeOf(parentId),0) != CR_SUCCESS) { DbgOut(TEXT("CM_Get_Device_ID failed.\n")); return FALSE; }
parentInfo = SetupDiCreateDeviceInfoList(NULL,NULL);
if (parentInfo == INVALID_HANDLE_VALUE) { DbgOut(TEXT("SetupDiCreateDeviceInfoList failed\n")); return FALSE; } parentData.cbSize = sizeof(SP_DEVINFO_DATA);
if (SetupDiOpenDeviceInfo(parentInfo,parentId,NULL,0,&parentData)) {
if (SetupDiGetDeviceRegistryProperty(parentInfo, &parentData, SPDRP_FRIENDLYNAME, NULL, (PBYTE)deviceDesc, sizeof(deviceDesc), NULL) || SetupDiGetDeviceRegistryProperty(parentInfo, &parentData, SPDRP_DEVICEDESC, NULL, (PBYTE)deviceDesc, sizeof(deviceDesc), NULL)) { wsprintf(charBuffer,TEXT("%s Port %2u (%s)"),deviceDesc,portNumber,comName); // #if DBG
// {
// TCHAR buf[500];
// wsprintf(buf, TEXT("%s\n"), charBuffer);
// DbgOut(buf);
// }
// #endif
SetupDiSetDeviceRegistryProperty(DeviceInfoSet, DeviceInfoData, SPDRP_FRIENDLYNAME, (PBYTE)charBuffer, ByteCountOf(_tcslen(charBuffer) + 1) );
}
} else { #if DBG
{ TCHAR buf[500]; wsprintf(buf, TEXT("SetupDiOpenDeviceInfo failed with error %x\n"), GetLastError()); DbgOut(buf); } #endif
} SetupDiDestroyDeviceInfoList(parentInfo); return TRUE; }
|