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.
 
 
 
 
 
 

245 lines
4.9 KiB

/*++
Copyright (c) 1990-2003 Microsoft Corporation
All Rights Reserved
Module Name:
util.c
Abstract:
This module provides all the utility functions for localui.
// @@BEGIN_DDKSPLIT
Revision History:
// @@END_DDKSPLIT
--*/
#include "precomp.h"
#pragma hdrstop
#include "spltypes.h"
#include "local.h"
#include "localui.h"
PWSTR
ConstructXcvName(
PCWSTR pServerName,
PCWSTR pObjectName,
PCWSTR pObjectType
)
{
size_t cchOutput;
PWSTR pOut;
cchOutput = pServerName ? (wcslen(pServerName) + 2) : 1; /* "\\Server\," */
cchOutput += wcslen(pObjectType) + 2; /* "\\Server\,XcvPort _" */
cchOutput += pObjectName ? wcslen(pObjectName) : 0; /* "\\Server\,XcvPort Object_" */
if (pOut = AllocSplMem(cchOutput * sizeof (pOut [0]))) {
if (pServerName) {
StringCchCopy(pOut, cchOutput, pServerName);
StringCchCat (pOut, cchOutput, L"\\,");
}
else
{
StringCchCopy (pOut, cchOutput, L",");
}
StringCchCat (pOut, cchOutput, pObjectType);
StringCchCat (pOut, cchOutput, L" ");
if (pObjectName)
{
StringCchCat (pOut, cchOutput, pObjectName);
}
}
return pOut;
}
BOOL
IsCOMPort(
PCWSTR pPort
)
{
//
// Must begin with szCom
//
if ( _wcsnicmp( pPort, szCOM, 3 ) )
{
return FALSE;
}
//
// wcslen guarenteed >= 3
//
return pPort[ wcslen( pPort ) - 1 ] == L':';
}
BOOL
IsLPTPort(
PCWSTR pPort
)
{
//
// Must begin with szLPT
//
if ( _wcsnicmp( pPort, szLPT, 3 ) )
{
return FALSE;
}
//
// wcslen guarenteed >= 3
//
return pPort[ wcslen( pPort ) - 1 ] == L':';
}
/* Message
*
* Displays a message by loading the strings whose IDs are passed into
* the function, and substituting the supplied variable argument list
* using the varargs macros.
*
*/
int Message(HWND hwnd, DWORD Type, int CaptionID, int TextID, ...)
{
WCHAR MsgText[2*MAX_PATH + 1];
WCHAR MsgFormat[256];
WCHAR MsgCaption[40];
va_list vargs;
if( ( LoadString( hInst, TextID, MsgFormat,
sizeof MsgFormat / sizeof *MsgFormat ) > 0 )
&& ( LoadString( hInst, CaptionID, MsgCaption,
sizeof MsgCaption / sizeof *MsgCaption ) > 0 ) )
{
va_start( vargs, TextID );
StringCchVPrintf ( MsgText, COUNTOF(MsgText), MsgFormat, vargs );
va_end( vargs );
MsgText[COUNTOF(MsgText) - 1] = L'\0';
return MessageBox(hwnd, MsgText, MsgCaption, Type);
}
else
return 0;
}
INT
ErrorMessage(
HWND hwnd,
DWORD dwStatus
)
{
WCHAR MsgCaption[MAX_PATH];
PWSTR pBuffer = NULL;
INT iRet = 0;
FormatMessage( FORMAT_MESSAGE_FROM_SYSTEM |
FORMAT_MESSAGE_ALLOCATE_BUFFER,
NULL,
dwStatus,
0,
(PWSTR) &pBuffer,
0,
NULL);
if (pBuffer) {
if (LoadString( hInst, IDS_LOCALMONITOR, MsgCaption,
sizeof MsgCaption / sizeof *MsgCaption) > 0) {
iRet = MessageBox(hwnd, pBuffer, MsgCaption, MSG_ERROR);
}
LocalFree(pBuffer);
}
return iRet;
}
LPWSTR
AllocSplStr(
LPCWSTR pStr
)
/*++
Routine Description:
This function will allocate enough local memory to store the specified
string, and copy that string to the allocated memory
Arguments:
pStr - Pointer to the string that needs to be allocated and stored
Return Value:
NON-NULL - A pointer to the allocated memory containing the string
FALSE/NULL - The operation failed. Extended error status is available
using GetLastError.
--*/
{
LPWSTR pMem;
DWORD cbStr;
if (!pStr) {
return NULL;
}
cbStr = wcslen(pStr)*sizeof(WCHAR) + sizeof(WCHAR);
if (pMem = AllocSplMem( cbStr )) {
CopyMemory( pMem, pStr, cbStr );
}
return pMem;
}
LPVOID
AllocSplMem(
DWORD cbAlloc
)
{
return GlobalAlloc(GMEM_FIXED | GMEM_ZEROINIT, cbAlloc);
}
// -----------------------------------------------------------------------
//
// DEBUG Stuff
//
// -----------------------------------------------------------------------
DWORD SplDbgLevel = 0;
VOID cdecl DbgMsg( LPWSTR MsgFormat, ... )
{
WCHAR MsgText[1024];
va_list pArgs;
va_start( pArgs, MsgFormat);
StringCchVPrintf (MsgText, COUNTOF (MsgText), MsgFormat, pArgs);
StringCchCat( MsgText, COUNTOF (MsgText), L"\r");
va_end( pArgs);
OutputDebugString(MsgText);
}