You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
176 lines
5.7 KiB
176 lines
5.7 KiB
/** 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;
|
|
}
|