StringToGuid() functions added
This commit is contained in:
parent
d0c6be257b
commit
ada00d74c5
@ -40,6 +40,29 @@ template<class _Elem, class _Traits, class _Ax> inline VOID GuidToStringW(_In_ L
|
|||||||
#else
|
#else
|
||||||
#define GuidToString GuidToStringA
|
#define GuidToString GuidToStringA
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Parses string with GUID and stores it to GUID
|
||||||
|
///
|
||||||
|
/// \param[in ] lpszGuid String with GUID
|
||||||
|
/// \param[out] lpGuid GUID to store the result to
|
||||||
|
///
|
||||||
|
BOOL WINSTD_API StringToGuidA(_In_z_ LPCSTR lpszGuid, _Out_ LPGUID lpGuid);
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Parses string with GUID and stores it to GUID
|
||||||
|
///
|
||||||
|
/// \param[in ] lpszGuid String with GUID
|
||||||
|
/// \param[out] lpGuid GUID to store the result to
|
||||||
|
///
|
||||||
|
BOOL WINSTD_API StringToGuidW(_In_z_ LPCWSTR lpszGuid, _Out_ LPGUID lpGuid);
|
||||||
|
|
||||||
|
#ifdef _UNICODE
|
||||||
|
#define StringToGuid StringToGuidW
|
||||||
|
#else
|
||||||
|
#define StringToGuid StringToGuidA
|
||||||
|
#endif
|
||||||
|
|
||||||
template<class _Elem, class _Traits, class _Ax> inline LSTATUS RegQueryStringValue(_In_ HKEY hReg, _In_z_ LPCSTR pszName, _Out_ std::basic_string<_Elem, _Traits, _Ax> &sValue);
|
template<class _Elem, class _Traits, class _Ax> inline LSTATUS RegQueryStringValue(_In_ HKEY hReg, _In_z_ LPCSTR pszName, _Out_ std::basic_string<_Elem, _Traits, _Ax> &sValue);
|
||||||
template<class _Elem, class _Traits, class _Ax> inline LSTATUS RegQueryStringValue(_In_ HKEY hReg, _In_z_ LPCWSTR pszName, _Out_ std::basic_string<_Elem, _Traits, _Ax> &sValue);
|
template<class _Elem, class _Traits, class _Ax> inline LSTATUS RegQueryStringValue(_In_ HKEY hReg, _In_z_ LPCWSTR pszName, _Out_ std::basic_string<_Elem, _Traits, _Ax> &sValue);
|
||||||
template<class _Ty, class _Ax> inline LSTATUS RegQueryValueExA(_In_ HKEY hKey, _In_opt_ LPCSTR lpValueName, __reserved LPDWORD lpReserved, _Out_opt_ LPDWORD lpType, _Out_ std::vector<_Ty, _Ax> &aData);
|
template<class _Ty, class _Ax> inline LSTATUS RegQueryValueExA(_In_ HKEY hKey, _In_opt_ LPCSTR lpValueName, __reserved LPDWORD lpReserved, _Out_opt_ LPDWORD lpType, _Out_ std::vector<_Ty, _Ax> &aData);
|
||||||
|
128
src/Win.cpp
128
src/Win.cpp
@ -21,6 +21,134 @@
|
|||||||
#include "StdAfx.h"
|
#include "StdAfx.h"
|
||||||
|
|
||||||
|
|
||||||
|
//////////////////////////////////////////////////////////////////////
|
||||||
|
// StringToGuidA
|
||||||
|
//////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
BOOL WINSTD_API StringToGuidA(_In_z_ LPCSTR lpszGuid, _Out_ LPGUID lpGuid)
|
||||||
|
{
|
||||||
|
GUID g;
|
||||||
|
LPSTR lpszEnd;
|
||||||
|
unsigned long ulTmp;
|
||||||
|
unsigned long long ullTmp;
|
||||||
|
|
||||||
|
if (!lpszGuid || !lpGuid || *lpszGuid != '{') return FALSE;
|
||||||
|
lpszGuid++;
|
||||||
|
|
||||||
|
g.Data1 = strtoul(lpszGuid, &lpszEnd, 16);
|
||||||
|
if (errno == ERANGE) return FALSE;
|
||||||
|
lpszGuid = lpszEnd;
|
||||||
|
|
||||||
|
if (*lpszGuid != '-') return FALSE;
|
||||||
|
lpszGuid++;
|
||||||
|
|
||||||
|
ulTmp = strtoul(lpszGuid, &lpszEnd, 16);
|
||||||
|
if (errno == ERANGE || ulTmp > 0xFFFF) return FALSE;
|
||||||
|
g.Data2 = (unsigned short)ulTmp;
|
||||||
|
lpszGuid = lpszEnd;
|
||||||
|
|
||||||
|
if (*lpszGuid != '-') return FALSE;
|
||||||
|
lpszGuid++;
|
||||||
|
|
||||||
|
ulTmp = strtoul(lpszGuid, &lpszEnd, 16);
|
||||||
|
if (errno == ERANGE || ulTmp > 0xFFFF) return FALSE;
|
||||||
|
g.Data3 = (unsigned short)ulTmp;
|
||||||
|
lpszGuid = lpszEnd;
|
||||||
|
|
||||||
|
if (*lpszGuid != '-') return FALSE;
|
||||||
|
lpszGuid++;
|
||||||
|
|
||||||
|
ulTmp = strtoul(lpszGuid, &lpszEnd, 16);
|
||||||
|
if (errno == ERANGE || ulTmp > 0xFFFF) return FALSE;
|
||||||
|
g.Data4[0] = (unsigned char)((ulTmp >> 8) & 0xff);
|
||||||
|
g.Data4[1] = (unsigned char)( ulTmp & 0xff);
|
||||||
|
lpszGuid = lpszEnd;
|
||||||
|
|
||||||
|
if (*lpszGuid != '-') return FALSE;
|
||||||
|
lpszGuid++;
|
||||||
|
|
||||||
|
ullTmp = _strtoui64(lpszGuid, &lpszEnd, 16);
|
||||||
|
if (errno == ERANGE || ullTmp > 0xFFFFFFFFFFFF) return FALSE;
|
||||||
|
g.Data4[2] = (unsigned char)((ullTmp >> 40) & 0xff);
|
||||||
|
g.Data4[3] = (unsigned char)((ullTmp >> 32) & 0xff);
|
||||||
|
g.Data4[4] = (unsigned char)((ullTmp >> 24) & 0xff);
|
||||||
|
g.Data4[5] = (unsigned char)((ullTmp >> 16) & 0xff);
|
||||||
|
g.Data4[6] = (unsigned char)((ullTmp >> 8) & 0xff);
|
||||||
|
g.Data4[7] = (unsigned char)( ullTmp & 0xff);
|
||||||
|
lpszGuid = lpszEnd;
|
||||||
|
|
||||||
|
if (*lpszGuid != '}') return FALSE;
|
||||||
|
lpszGuid++;
|
||||||
|
|
||||||
|
if (*lpszGuid != 0) return FALSE;
|
||||||
|
|
||||||
|
*lpGuid = g;
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
BOOL WINSTD_API StringToGuidW(_In_z_ LPCWSTR lpszGuid, _Out_ LPGUID lpGuid)
|
||||||
|
{
|
||||||
|
GUID g;
|
||||||
|
LPWSTR lpszEnd;
|
||||||
|
unsigned long ulTmp;
|
||||||
|
unsigned long long ullTmp;
|
||||||
|
|
||||||
|
if (!lpszGuid || !lpGuid || *lpszGuid != '{') return FALSE;
|
||||||
|
lpszGuid++;
|
||||||
|
|
||||||
|
g.Data1 = wcstoul(lpszGuid, &lpszEnd, 16);
|
||||||
|
if (errno == ERANGE) return FALSE;
|
||||||
|
lpszGuid = lpszEnd;
|
||||||
|
|
||||||
|
if (*lpszGuid != '-') return FALSE;
|
||||||
|
lpszGuid++;
|
||||||
|
|
||||||
|
ulTmp = wcstoul(lpszGuid, &lpszEnd, 16);
|
||||||
|
if (errno == ERANGE || ulTmp > 0xFFFF) return FALSE;
|
||||||
|
g.Data2 = (unsigned short)ulTmp;
|
||||||
|
lpszGuid = lpszEnd;
|
||||||
|
|
||||||
|
if (*lpszGuid != '-') return FALSE;
|
||||||
|
lpszGuid++;
|
||||||
|
|
||||||
|
ulTmp = wcstoul(lpszGuid, &lpszEnd, 16);
|
||||||
|
if (errno == ERANGE || ulTmp > 0xFFFF) return FALSE;
|
||||||
|
g.Data3 = (unsigned short)ulTmp;
|
||||||
|
lpszGuid = lpszEnd;
|
||||||
|
|
||||||
|
if (*lpszGuid != '-') return FALSE;
|
||||||
|
lpszGuid++;
|
||||||
|
|
||||||
|
ulTmp = wcstoul(lpszGuid, &lpszEnd, 16);
|
||||||
|
if (errno == ERANGE || ulTmp > 0xFFFF) return FALSE;
|
||||||
|
g.Data4[0] = (unsigned char)((ulTmp >> 8) & 0xff);
|
||||||
|
g.Data4[1] = (unsigned char)( ulTmp & 0xff);
|
||||||
|
lpszGuid = lpszEnd;
|
||||||
|
|
||||||
|
if (*lpszGuid != '-') return FALSE;
|
||||||
|
lpszGuid++;
|
||||||
|
|
||||||
|
ullTmp = _wcstoui64(lpszGuid, &lpszEnd, 16);
|
||||||
|
if (errno == ERANGE || ullTmp > 0xFFFFFFFFFFFF) return FALSE;
|
||||||
|
g.Data4[2] = (unsigned char)((ullTmp >> 40) & 0xff);
|
||||||
|
g.Data4[3] = (unsigned char)((ullTmp >> 32) & 0xff);
|
||||||
|
g.Data4[4] = (unsigned char)((ullTmp >> 24) & 0xff);
|
||||||
|
g.Data4[5] = (unsigned char)((ullTmp >> 16) & 0xff);
|
||||||
|
g.Data4[6] = (unsigned char)((ullTmp >> 8) & 0xff);
|
||||||
|
g.Data4[7] = (unsigned char)( ullTmp & 0xff);
|
||||||
|
lpszGuid = lpszEnd;
|
||||||
|
|
||||||
|
if (*lpszGuid != '}') return FALSE;
|
||||||
|
lpszGuid++;
|
||||||
|
|
||||||
|
if (*lpszGuid != 0) return FALSE;
|
||||||
|
|
||||||
|
*lpGuid = g;
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
//////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////
|
||||||
// winstd::win_handle
|
// winstd::win_handle
|
||||||
//////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////
|
||||||
|
Loading…
x
Reference in New Issue
Block a user