124 lines
2.7 KiB
C++
124 lines
2.7 KiB
C++
//
|
||
// NetUtil.cpp
|
||
//
|
||
|
||
#include "Util.h"
|
||
#include "debug.h"
|
||
|
||
#include <devguid.h>
|
||
|
||
|
||
#ifdef __cplusplus
|
||
extern "C" {
|
||
#endif
|
||
|
||
|
||
|
||
HRESULT WINAPI HrFromLastWin32Error()
|
||
//+---------------------------------------------------------------------------
|
||
//
|
||
// Function: HrFromLastWin32Error
|
||
//
|
||
// Purpose: Converts the GetLastError() Win32 call into a proper HRESULT.
|
||
//
|
||
// Arguments:
|
||
// (none)
|
||
//
|
||
// Returns: Converted HRESULT value.
|
||
//
|
||
// Author: danielwe 24 Mar 1997
|
||
//
|
||
// Notes: This is not inline as it actually generates quite a bit of
|
||
// code.
|
||
// If GetLastError returns an error that looks like a SetupApi
|
||
// error, this function will convert the error to an HRESULT
|
||
// with FACILITY_SETUP instead of FACILITY_WIN32
|
||
//
|
||
{
|
||
DWORD dwError = GetLastError();
|
||
HRESULT hr;
|
||
|
||
// This test is testing SetupApi errors only (this is
|
||
// temporary because the new HRESULT_FROM_SETUPAPI macro will
|
||
// do the entire conversion)
|
||
if (dwError & (APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR))
|
||
{
|
||
hr = HRESULT_FROM_SETUPAPI(dwError);
|
||
}
|
||
else
|
||
{
|
||
hr = HrFromWin32Error(dwError);
|
||
}
|
||
|
||
return hr;
|
||
}
|
||
|
||
|
||
|
||
HRESULT WINAPI HrWideCharToMultiByte( const WCHAR* szwString, char** ppszString )
|
||
//+---------------------------------------------------------------------------
|
||
//
|
||
// Function: HrWideCharToMultiByte
|
||
//
|
||
// Purpose:
|
||
//
|
||
// Arguments:
|
||
//
|
||
// Returns: S_OK on success, otherwise an error code
|
||
//
|
||
// Notes:
|
||
//
|
||
{
|
||
HRESULT hr = E_POINTER;
|
||
|
||
ASSERT( szwString );
|
||
ASSERT( ppszString );
|
||
|
||
if ( ppszString )
|
||
{
|
||
*ppszString = NULL;
|
||
hr = E_INVALIDARG;
|
||
|
||
if ( szwString )
|
||
{
|
||
int iLen = 0;
|
||
|
||
iLen = WideCharToMultiByte( CP_ACP, 0, szwString, -1, NULL, NULL, NULL, NULL );
|
||
|
||
if ( 0 < iLen )
|
||
{
|
||
char* pszName = new char[ iLen ];
|
||
|
||
if ( NULL != pszName )
|
||
{
|
||
if ( WideCharToMultiByte( CP_ACP, 0, szwString, -1, pszName, iLen, NULL, NULL ) )
|
||
{
|
||
hr = S_OK;
|
||
*ppszString = pszName;
|
||
}
|
||
else
|
||
{
|
||
hr = HrFromLastWin32Error( );
|
||
delete [] pszName;
|
||
}
|
||
}
|
||
else
|
||
{
|
||
hr = E_OUTOFMEMORY;
|
||
}
|
||
}
|
||
else
|
||
{
|
||
hr = HrFromLastWin32Error( );
|
||
}
|
||
}
|
||
}
|
||
|
||
return hr;
|
||
}
|
||
|
||
|
||
#ifdef __cplusplus
|
||
}
|
||
#endif
|