windows-nt/Source/XPSP1/NT/shell/ext/hnw/shared/netutil.cpp
2020-09-26 16:20:57 +08:00

124 lines
2.7 KiB
C++
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//
// 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