windows-nt/Source/XPSP1/NT/net/rras/routemon/guidmap.c
2020-09-26 16:20:57 +08:00

95 lines
2.4 KiB
C

/*
File GuidMap.c
Defines function to map a guid interface name to an unique descriptive
name describing that interface and vice versa.
Paul Mayfield, 8/25/97
Copyright 1997, Microsoft Corporation.
*/
#include "precomp.h"
static HANDLE hConfig = NULL;
//
// Set the server that the name mapper will utilize
//
DWORD IfNameMapSetServer(HANDLE hMprConfig) {
hConfig = hMprConfig;
return NO_ERROR;
}
//
// Map the guid name to the friendly name
//
DWORD IfName2DescriptionW(IN PWCHAR pszName, OUT PWCHAR pszBuffer, IN LPDWORD lpdwBufSize) {
if (hConfig == NULL || lpdwBufSize == NULL)
return ERROR_CAN_NOT_COMPLETE;
return MprConfigGetFriendlyName (hConfig, pszName, pszBuffer, *lpdwBufSize);
}
//
// Map the friendly name to the guid name
//
DWORD Description2IfNameW(IN PWCHAR pszName, OUT PWCHAR pszBuffer, IN LPDWORD lpdwBufSize) {
if (hConfig == NULL || lpdwBufSize == NULL)
return ERROR_CAN_NOT_COMPLETE;
return MprConfigGetGuidName (hConfig, pszName, pszBuffer, *lpdwBufSize);
}
// ==================================================================
// ANSI versions of the above functions
// ==================================================================
#define mbtowc(mb,wc) MultiByteToWideChar (CP_ACP, 0, (mb), strlen ((mb)) + 1, (wc), 1024)
#define wctomb(wc,mb) WideCharToMultiByte (CP_ACP, 0, (wc), wcslen ((wc)) + 1, (mb), 1024, NULL, NULL)
DWORD IfName2DescriptionA(LPSTR pszName, LPSTR pszBuffer, LPDWORD lpdwBufSize) {
WCHAR pszNameW[1024];
WCHAR pszBufferW[1024];
DWORD dwErr;
int ret;
// Translate params to wide char
ret = mbtowc(pszName, pszNameW);
if (!ret)
return GetLastError();
// Call wide char version of function and copy back to multi byte
dwErr = IfName2DescriptionW (pszNameW, pszBufferW, lpdwBufSize);
if (dwErr == NO_ERROR) {
ret = wctomb(pszBufferW, pszBuffer);
if (ret == 0)
return GetLastError();
}
return dwErr;
}
DWORD Description2IfNameA(LPSTR pszDesc, LPSTR pszBuffer, LPDWORD lpdwBufSize) {
WCHAR pszNameW[1024];
WCHAR pszBufferW[1024];
DWORD dwErr;
int ret;
// Translate params to wide char
ret = mbtowc(pszDesc, pszNameW);
if (ret == 0)
return GetLastError();
// Call wide char version of function and copy back to multi byte
dwErr = Description2IfNameW(pszNameW, pszBufferW, lpdwBufSize);
if (dwErr == NO_ERROR) {
ret = wctomb(pszBufferW, pszBuffer);
if (!ret)
return GetLastError();
}
return dwErr;
}