windows-nt/Source/XPSP1/NT/ds/security/protocols/digest/util.h

177 lines
5.2 KiB
C
Raw Permalink Normal View History

2020-09-26 03:20:57 -05:00
//+-----------------------------------------------------------------------
//
// 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