177 lines
5.2 KiB
C
177 lines
5.2 KiB
C
|
|
//+-----------------------------------------------------------------------
|
|
//
|
|
// 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
|