Source code of Windows XP (NT5)
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.
 
 
 
 
 
 

153 lines
3.5 KiB

#ifndef _STRUTIL_H_
#define _STRUTIL_H_
#include <stock.h>
#include <wincrypt.h>
INLINE BOOL
IsEmptyStringA(LPCSTR pcsz)
{
return (NULL == pcsz) || ('\0' == *pcsz);
}
INLINE BOOL
IsEmptyStringW(LPCWSTR pcwsz)
{
return (NULL == pcwsz) || (L'\0' == *pcwsz);
}
#if defined(UNICODE)
#define IsEmptyString IsEmptyStringW
#else // defined(UNICODE)
#define IsEmptyString IsEmptyStringA
#endif // defined(UNICODE)
#define IS_EMPTY_STRING(s) (IsEmptyString(s))
#define FEmptySz(psz) (IsEmptyString(psz))
#define SetEmptySz(psz) (*(psz) = _T('\0'))
// global helper functions for Unicode support in a DBCS environment
int UnicodeCompare(PCWSTR s, PCWSTR t);
PWSTR NewUnicodeString(PCWSTR wszText);
BOOL UnicodeIsNumber(PCWSTR wszText);
PWSTR DBCSToUnicode(UINT uCodePage, PCSTR szText);
PSTR UnicodeToDBCS(UINT uCodePage, PCWSTR wszText);
INLINE PWSTR AnsiToUnicode(PCSTR szText)
{
return DBCSToUnicode(CP_ACP, szText);
}
INLINE PWSTR OEMToUnicode(PCSTR szText)
{
return DBCSToUnicode(CP_OEMCP, szText);
}
INLINE PSTR UnicodeToAnsi(PCWSTR wszText)
{
return UnicodeToDBCS(CP_ACP, wszText);
}
INLINE PSTR UnicodeToOEM(PCWSTR wszText)
{
return UnicodeToDBCS(CP_OEMCP, wszText);
}
// Functions to convert between Quad Words (expressed as ULARGE_INTEGERs)
// and ANSI strings.
BOOL HexStringToQWordA(LPCSTR pcszString, ULARGE_INTEGER* pqw);
int QWordToHexStringA(ULARGE_INTEGER qw, LPSTR pszString);
// Function to convert from a hex string to a DWORD.
DWORD DwFromHex(LPCTSTR pchHex);
// CCHMAX_HEX_ULARGE_INTEGER - defines the minimum string buffer size needed
// for the second parameter of QWordToHexStringA().
#define CCHMAX_HEX_ULARGE_INTEGER 17 // 16 characters + n.t.
#define CCH_HEX_DWORD 8
#define CCH_HEX_QWORD 16
#define BITS_PER_HEX_CHAR 4
// Other Random string functions
VOID GuidToSz(GUID * pguid, LPTSTR lpchDest);
/* sizeof(GUID)*2 + 7 (includes NULL terminator) characters (see GuidToSz) */
#define LENGTH_SZGUID_FORMATTED 39
int WINAPI RtStrToInt(LPCTSTR lpSrc); // atoi()
#define ATOI RtStrToInt
#ifdef __cplusplus
extern "C"{
#endif
UINT DecimalStringToUINT(LPCTSTR pcszString);
#ifdef __cplusplus
}
#endif
#ifdef __cplusplus
extern "C"{
#endif
LPCTSTR _StrChr(LPCTSTR psz, TCHAR c);
int _StrCmpN(LPCTSTR psz1, LPCTSTR psz2, UINT maxChars);
#ifdef __cplusplus
}
#endif
LPCTSTR _StrStr(LPCTSTR pcsz1, LPCTSTR pcsz2);
LPCWSTR _StrStrW(LPCWSTR pcsz1, LPCWSTR pcsz2);
LPSTR _StrPbrkA(LPCSTR pcszString, LPCSTR pcszSearch);
LPWSTR _StrPbrkW(LPCWSTR pcszString, LPCWSTR pcszSearch);
#if defined(UNICODE)
#define _StrPbrk _StrPbrkW
#else // defined(UNICODE)
#define _StrPbrk _StrPbrkA
#endif // defined(UNICODE)
LPTSTR SzFindLastCh(LPTSTR lpsz, TCHAR ch);
UINT TrimSz(PTCHAR psz);
// Local LStrLenW function is unnecessary, since Windows 95 supports
// lstrlenW natively
#define LStrLenW lstrlenW
// Map LStrCpyW to its Win32 equivalent for Unicode builds
#if defined UNICODE
#define LStrCpyW lstrcpyW
#define LStrCpyNW lstrcpyn
#else // defined UNICODE
LPWSTR LStrCpyW(LPWSTR pszDest, LPWSTR pszSrc);
LPWSTR LStrCpyNW(LPWSTR pszDest, LPCWSTR pszSrc, INT iMaxLength);
#endif // defined UNICODE
LPWSTR _StrLwrW(LPWSTR pwszSrc);
#ifdef __cplusplus
class CHash
{
public:
CHash();
~CHash();
DWORD GetHashedData(PBYTE pbData, DWORD cbData, void ** ppvHashedData);
private:
HCRYPTPROV m_hProv;
HCRYPTHASH m_hHash;
PBYTE m_pbHashedData;
DWORD m_cbHashedData;
BOOL m_fReady;
};
#endif
DWORD HashPasswd(PBYTE pbPasswd, DWORD cbPasswd, void **ppvData);
#endif // ndef STRUTIL_H