|
|
//+-----------------------------------------------------------------------
//
// Microsoft Windows
//
// Copyright (c) Microsoft Corporation 2000
//
// File: util.h
//
// Contents: headerfile for util.cxx and parser.cxx
//
//
// History: KDamour 15Mar00 Created
//
//------------------------------------------------------------------------
#ifndef DIGEST_UTIL_H
#define DIGEST_UTIL_H
#include "global.h"
#ifdef __cplusplus
extern "C" { #endif // __cplusplus
// Allocates cb wide chars to UNICODE_STRING Buffer
NTSTATUS UnicodeStringAllocate(IN PUNICODE_STRING pString, IN USHORT cNumWChars);
// Duplicate a UnicodeString (memory alloc and copy)
NTSTATUS UnicodeStringDuplicate( OUT PUNICODE_STRING DestinationString, IN OPTIONAL PUNICODE_STRING SourceString);
// Copies a unicode string if destination has enough room to store it
NTSTATUS UnicodeStringCopy( OUT PUNICODE_STRING DestinationString, IN OPTIONAL PUNICODE_STRING SourceString);
// Function to duplicate Unicode passwords with padding for cipher
NTSTATUS UnicodeStringDuplicatePassword( OUT PUNICODE_STRING DestinationString, IN OPTIONAL PUNICODE_STRING SourceString);
// Clears a UnicodeString and releases the memory
NTSTATUS UnicodeStringClear(OUT PUNICODE_STRING pString);
// Copies a SzUnicodeString to a String (memory alloc and copy)
NTSTATUS UnicodeStringWCharDuplicate(OUT PUNICODE_STRING DestinationString, IN OPTIONAL WCHAR *szSource);
// Decode a string into Unicode
NTSTATUS DecodeUnicodeString( IN PSTRING pstrSource, IN UINT CodePage, OUT PUNICODE_STRING pustrDestination );
// Encode a unicode string with a given charset
NTSTATUS EncodeUnicodeString( IN PUNICODE_STRING pustrSource, IN UINT CodePage, OUT PSTRING pstrDestination, IN OUT PBOOL pfUsedDefaultChar );
// Duplicates a String (memory alloc and copy)
NTSTATUS StringDuplicate( OUT PSTRING DestinationString, IN OPTIONAL PSTRING SourceString);
// Copies a string if destination has enough room to store it
NTSTATUS StringCopy( OUT PSTRING DestinationString, IN OPTIONAL PSTRING SourceString);
// Reference a String - no buffer memory copied
NTSTATUS StringReference( OUT PSTRING pDestinationString, IN PSTRING pSourceString );
// Reference a Unicode_String - no buffer memory copied
NTSTATUS UnicodeStringReference( OUT PUNICODE_STRING pDestinationString, IN PUNICODE_STRING pSourceString );
// Copies a CzString to a String (memory alloc and copy)
NTSTATUS StringCharDuplicate( OUT PSTRING DestinationString, IN OPTIONAL char *czSource, IN OPTIONAL USHORT uCnt);
// Duplicates a SID (memory alloc and copy)
NTSTATUS SidDuplicate( OUT PSID * DestinationSid, IN PSID SourceSid);
NTSTATUS CopyClientString( IN PWSTR SourceString, IN ULONG SourceLength, IN BOOLEAN DoUnicode, OUT PUNICODE_STRING DestinationString);
// Allocate memory in LSA or user mode
PVOID DigestAllocateMemory(IN ULONG BufferSize);
// De-allocate memory from DigestAllocateMemory
VOID DigestFreeMemory(IN PVOID Buffer);
// Allocates cb bytes to STRING Buffer
NTSTATUS StringAllocate(IN PSTRING pString, IN USHORT cb);
// Clears a String and releases the memory
NTSTATUS StringFree(IN PSTRING pString);
// Quick check on String struct allocations validity
NTSTATUS StringVerify(OUT PSTRING pString);
// Clears a Uniicde_String and releases the memory
NTSTATUS UnicodeStringFree(OUT PUNICODE_STRING pString);
// Hex Encoders and Decoders
VOID BinToHex(LPBYTE pSrc,UINT cSrc, LPSTR pDst); VOID HexToBin(LPSTR pSrc,UINT cSrc, LPBYTE pDst);
// Parse input string into Parameter section of Digest
NTSTATUS DigestParser2(PSecBuffer pInputBuf, PSTR *pNameTable,UINT cNameTable, PDIGEST_PARAMETER pDigest);
// Scan a Comma Deliminated STRING for an Item
NTSTATUS CheckItemInList(PCHAR pszItem, PSTRING pstrList, BOOL fOneItem);
// Helper function to DigestParser2
NTSTATUS DigestProcessEntry( IN PSTR pcBeginName, IN PSTR pcEndName, IN PSTR pcBeginValue, IN PSTR pcEndValue, IN PSTR *pNameTable, IN UINT cNameTable, IN BOOL fBSlashEncoded, OUT PDIGEST_PARAMETER pDigest);
// Check for backslash character in a counted string of chars
BOOL CheckBSlashChar( IN PSTR pcStr, IN USHORT len);
// This routine selects a Buffer by indexed count in the BufferIndex
BOOLEAN SspGetTokenBufferByIndex( IN PSecBufferDesc TokenDescriptor, IN ULONG BufferIndex, OUT PSecBuffer * Token, IN BOOLEAN ReadonlyOK );
// determine strlen for a counted string buffer which may or may not be terminated
size_t strlencounted(const char *string, size_t maxcnt);
// determine Unicode strlen for a counted string buffer which may or may not be terminated
size_t ustrlencounted(const short *string, size_t maxcnt);
// Performs a percent encoding of the source string into the destination string RFC 2396
NTSTATUS BackslashEncodeString(IN PSTRING pstrSrc, OUT PSTRING pstrDst);
// Print out the date and time from a given TimeStamp (converted to localtime)
NTSTATUS PrintTimeString(TimeStamp tsValue, BOOL fLocalTime);
// Printout the Hex representation of a buffer
NTSTATUS MyPrintBytes(void *pbuff, USHORT uNumBytes, PSTRING pstrOutput);
#ifdef __cplusplus
} #endif // __cplusplus
#endif // DIGEST_UTIL_H
|