195 lines
3 KiB
C++
195 lines
3 KiB
C++
|
/*++
|
||
|
|
||
|
Copyright (C) Microsoft Corporation, 1992 - 1999
|
||
|
|
||
|
Module Name:
|
||
|
|
||
|
nsiutil.hxx
|
||
|
|
||
|
Abstract:
|
||
|
|
||
|
This module contains utility functions used by the NSI client wrappers.
|
||
|
|
||
|
Author:
|
||
|
|
||
|
Steven Zeck (stevez) 03/27/92
|
||
|
|
||
|
--*/
|
||
|
|
||
|
#define UNUSED(t) (void) t
|
||
|
|
||
|
extern "C" {
|
||
|
#if !defined(NTENV)
|
||
|
|
||
|
#ifdef DBG
|
||
|
void
|
||
|
RtlAssert(
|
||
|
void * FailedAssertion,
|
||
|
void * FileName,
|
||
|
unsigned long LineNumber,
|
||
|
char * Message
|
||
|
);
|
||
|
|
||
|
#define ASSERT( exp ) \
|
||
|
if (!(exp)) \
|
||
|
RtlAssert( #exp, __FILE__, __LINE__, 0 )
|
||
|
|
||
|
#else
|
||
|
#define ASSERT( exp )
|
||
|
|
||
|
#endif
|
||
|
#endif
|
||
|
|
||
|
}
|
||
|
|
||
|
unsigned char *
|
||
|
CopyString(
|
||
|
IN char * String
|
||
|
);
|
||
|
|
||
|
unsigned char *
|
||
|
RegGetString(
|
||
|
IN void * RegHandle,
|
||
|
IN char * KeyName
|
||
|
);
|
||
|
|
||
|
void
|
||
|
GetDefaultEntrys(
|
||
|
IN void * Key
|
||
|
);
|
||
|
|
||
|
|
||
|
#ifdef NTENV
|
||
|
|
||
|
extern void
|
||
|
GlobalMutexRequest (
|
||
|
void
|
||
|
);
|
||
|
|
||
|
extern void
|
||
|
GlobalMutexClear (
|
||
|
void
|
||
|
);
|
||
|
|
||
|
|
||
|
#define RequestGlobalMutex() GlobalMutexRequest()
|
||
|
#define ClearGlobalMutex() GlobalMutexClear()
|
||
|
#else
|
||
|
#define RequestGlobalMutex()
|
||
|
#define ClearGlobalMutex()
|
||
|
|
||
|
#endif
|
||
|
|
||
|
extern RPC_STATUS NsiToRpcStatus[];
|
||
|
|
||
|
inline RPC_STATUS
|
||
|
NsiMapStatus(
|
||
|
IN UNSIGNED16 Status
|
||
|
)
|
||
|
{
|
||
|
ASSERT(Status < NSI_S_STATUS_MAX);
|
||
|
|
||
|
return((Status < NSI_S_STATUS_MAX)?
|
||
|
NsiToRpcStatus[Status]: RPC_S_INTERNAL_ERROR);
|
||
|
}
|
||
|
|
||
|
/*++
|
||
|
|
||
|
Class Definition:
|
||
|
|
||
|
WIDE_STRING
|
||
|
|
||
|
Abstract:
|
||
|
|
||
|
This class abstracts the creation of unicode strings. It is normaly
|
||
|
used as an automatic variable to a wrapper function that has an
|
||
|
ASCII interface over a UNICODE one.
|
||
|
|
||
|
--*/
|
||
|
|
||
|
class WIDE_STRING
|
||
|
{
|
||
|
|
||
|
private:
|
||
|
|
||
|
typedef enum { // Indicate how the string was allocated
|
||
|
AllocMemory, // Allocated memory, which must be freed
|
||
|
AllocReference, // Referenced a existing UNICODE string
|
||
|
AllocError // Out of memory indicator
|
||
|
} ALLOC_TYPE;
|
||
|
|
||
|
unsigned short * String; // Unicode string
|
||
|
ALLOC_TYPE AllocMode; // Allocation type
|
||
|
|
||
|
public:
|
||
|
|
||
|
// Construct a unicode string from a ASCII or UNICODE
|
||
|
|
||
|
WIDE_STRING(
|
||
|
IN unsigned char * String
|
||
|
);
|
||
|
|
||
|
WIDE_STRING(
|
||
|
IN unsigned short * StringIn
|
||
|
)
|
||
|
{
|
||
|
AllocMode = AllocReference;
|
||
|
String = StringIn;
|
||
|
}
|
||
|
|
||
|
~WIDE_STRING()
|
||
|
{
|
||
|
if (AllocMode == AllocMemory)
|
||
|
I_RpcFree(String);
|
||
|
}
|
||
|
|
||
|
// Check to see of constructor failed due to out of memory.
|
||
|
|
||
|
int
|
||
|
OutOfMemory(
|
||
|
)
|
||
|
{
|
||
|
return(AllocMode == AllocError);
|
||
|
}
|
||
|
|
||
|
// Return a pointer to the string.
|
||
|
|
||
|
unsigned short *
|
||
|
operator &()
|
||
|
{
|
||
|
return(String);
|
||
|
}
|
||
|
};
|
||
|
|
||
|
#ifdef NTENV
|
||
|
|
||
|
#define UnicodeToRtString(UnicodeString) RPC_S_OK
|
||
|
|
||
|
void
|
||
|
AsciiToUnicodeNT(
|
||
|
OUT unsigned short *String,
|
||
|
IN unsigned char *AsciiString
|
||
|
);
|
||
|
|
||
|
#else
|
||
|
|
||
|
#define UnicodeToRtString(UnicodeString) UnicodeToAscii(UnicodeString)
|
||
|
|
||
|
#endif
|
||
|
|
||
|
int
|
||
|
UnicodeToAscii(
|
||
|
unsigned short *UnicodeString
|
||
|
);
|
||
|
|
||
|
|
||
|
UNSIGNED16
|
||
|
MapException(
|
||
|
IN RPC_STATUS Exception
|
||
|
);
|
||
|
|
||
|
extern WIDE_STRING *DefaultName;
|
||
|
extern long DefaultSyntax;
|
||
|
extern int fSyntaxDefaultsLoaded;
|
||
|
|