Leaked source code of windows server 2003
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.
 
 
 
 
 
 

233 lines
5.4 KiB

/*++
Copyright (C) Microsoft Corporation, 1996 - 1999
Module Name:
ClbMisc
Abstract:
This header file describes the miscellaneous services of the Calais Library.
Author:
Doug Barlow (dbarlow) 7/16/1996
Environment:
Win32, C++ w/ Exceptions
Notes:
--*/
#ifndef _CLBMISC_H_
#define _CLBMISC_H_
#include <stdio.h>
#include <tchar.h>
//
// Miscellaneous definitions.
//
extern int
MemCompare( // Non CRTL memory compare routine.
IN LPCBYTE pbOne,
IN LPCBYTE pbTwo,
IN DWORD cbLength);
extern DWORD
MStrAdd( // Add an ANSI string to a multistring.
IN OUT CBuffer &bfMsz,
IN LPCSTR szAdd);
extern DWORD
MStrAdd( // Add a wide string to a multistring.
IN OUT CBuffer &bfMsz,
IN LPCWSTR szAdd);
extern DWORD
MStrLen( // Return the length of an ANSI Multistring, in chars.
LPCSTR mszString);
extern DWORD
MStrLen( // Return the length of a wide Multistring, in chars.
LPCWSTR mszString);
extern LPCTSTR
FirstString( // Return first string segment in a multistring.
IN LPCTSTR szMultiString);
extern LPCTSTR
NextString( // Return next string segment in a multistring.
IN LPCTSTR szMultiString);
extern LPCTSTR
StringIndex( // Return n'th string segment in a multistring.
IN LPCTSTR szMultiString,
IN DWORD dwIndex);
extern DWORD
MStringCount(
LPCTSTR mszInString); // count strings in multistring
extern DWORD
MStringSort( // Sort multistring, removing duplicates.
LPCTSTR mszInString,
CBuffer &bfOutString);
extern DWORD
MStringMerge( // Merge two multistrings, eliminating duplicates.
LPCTSTR mszOne,
LPCTSTR mszTwo,
CBuffer &bfOutString);
extern DWORD
MStringCommon( // Get the intersection of two multistrings.
LPCTSTR mszOne,
LPCTSTR mszTwo,
CBuffer &bfOutString);
extern DWORD
MStringRemove( // Remove 2nd string entries from 1st string.
LPCTSTR mszOne,
LPCTSTR mszTwo,
CBuffer &bfOutString);
extern BOOL
ParseAtr( // Parse a smartcard ATR string.
LPCBYTE pbAtr,
LPDWORD pdwAtrLen = NULL,
LPDWORD pdwHistOffset = NULL,
LPDWORD pcbHistory = NULL,
DWORD cbMaxLen = 33);
extern BOOL
AtrCompare( // Compare an ATR to an ATR/Mask pair.
LPCBYTE pbAtr1,
LPCBYTE pbAtr2,
LPCBYTE pbMask, // = NULL
DWORD cbAtr2); // = 0
extern DWORD
MoveString( // Move an ANSI string into a buffer, converting to
CBuffer &bfDst, // TCHARs.
LPCSTR szSrc,
DWORD dwLength = (DWORD)(-1));
extern DWORD
MoveString( // Move a UNICODE string into a buffer, converting to
CBuffer &bfDst, // TCHARs.
LPCWSTR szSrc,
DWORD dwLength = (DWORD)(-1));
extern DWORD
MoveToAnsiString( // Move a string into a UNICODE buffer, converting from
LPSTR szDst, // TCHARs.
LPCTSTR szSrc,
DWORD cchLength);
extern DWORD
MoveToUnicodeString( // Move a string into an ANSI buffer, converting from
LPWSTR szDst, // TCHARs.
LPCTSTR szSrc,
DWORD cchLength);
extern DWORD
MoveToAnsiMultiString( // Move a multistring into an ANSI buffer, converting
LPSTR mszDst, // from TCHARs.
LPCTSTR mszSrc,
DWORD cchLength);
extern DWORD
MoveToUnicodeMultiString( // Move a multistring into a UNICODE buffer,
LPWSTR mszDst, // converting from TCHARs.
LPCTSTR mszSrc,
DWORD cchLength);
extern LPCTSTR
ErrorString( // Convert an error code into a string.
DWORD dwErrorCode);
extern void
FreeErrorString( // Free the string returned from ErrorString.
LPCTSTR szErrorString);
extern DWORD
SelectString( // Index a given string against a list of possible
LPCTSTR szSource, // strings. Last parameter is NULL.
...);
extern void
StringFromGuid(
IN LPCGUID pguidResult, // GUID to convert to text
OUT LPTSTR szGuid); // 39+ character buffer to receive GUID as text.
//
//==============================================================================
//
// CErrorString
//
// A trivial class to simplify the use of the ErrorString service.
//
class CErrorString
{
public:
// Constructors & Destructor
CErrorString(DWORD dwError = 0)
{
m_szErrorString = NULL;
SetError(dwError);
};
~CErrorString()
{
if (m_szErrorString != m_szHexError)
FreeErrorString(m_szErrorString);
};
// Properties
// Methods
void SetError(DWORD dwError)
{
m_dwError = dwError;
};
LPCTSTR Value(void)
{
LPCTSTR szErr = NULL;
if (m_szErrorString != m_szHexError)
FreeErrorString(m_szErrorString);
try {
szErr = ErrorString(m_dwError);
} catch (...) {}
if (NULL == szErr)
{
_stprintf(m_szHexError, _T("0x%08x"), m_dwError);
m_szErrorString = m_szHexError;
}
else
m_szErrorString = szErr;
return m_szErrorString;
};
// Operators
operator LPCTSTR(void)
{
return Value();
};
protected:
// Properties
DWORD m_dwError;
LPCTSTR m_szErrorString;
TCHAR m_szHexError[11]; // Big enough to hold 0x%08x\0
// Methods
};
#endif // _CLBMISC_H_