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.
|
|
//////////////////////////////////////////////////////////////////////////////
//
// Copyright (c) 1999-2002 Microsoft Corporation
//
// Module Name:
// GlobalFuncs.cpp
//
// Description:
// Contains the definitions of a few unrelated global functions
//
// Maintained By:
// David Potter (DavidP) 25-MAR-2002
// Vij Vasu (Vvasu) 06-SEP-2000
//
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
// Include Files
//////////////////////////////////////////////////////////////////////////////
// The precompiled header.
#include "Pch.h"
//////////////////////////////////////////////////////////////////////////////
//++
//
// DwLoadString()
//
// Description:
// Allocate memory for and load a string from the string table.
//
// Arguments:
// uiStringIdIn
// Id of the string to look up
//
// rsszDestOut
// Reference to the smart pointer to the loaded string.
//
// Return Value:
// S_OK
// If the call succeeded
//
// Other Win32 error codes
// If the call failed.
//
// Remarks:
// This function cannot load a zero length string.
//--
//////////////////////////////////////////////////////////////////////////////
DWORD DwLoadString( UINT nStringIdIn , SmartSz & rsszDestOut ) { TraceFunc( "" );
DWORD dwError = ERROR_SUCCESS;
UINT uiCurrentSize = 0; SmartSz sszCurrentString; UINT uiReturnedStringLen = 0;
do { // Grow the current string by an arbitrary amount.
uiCurrentSize += 256;
sszCurrentString.Assign( new WCHAR[ uiCurrentSize ] ); if ( sszCurrentString.FIsEmpty() ) { dwError = TW32( ERROR_NOT_ENOUGH_MEMORY ); TraceFlow2( "Error %#x occurred trying allocate memory for string (string id is %d).", dwError, nStringIdIn ); LogMsg( "Error %#x occurred trying allocate memory for string (string id is %d).", dwError, nStringIdIn ); break; } // if: the memory allocation has failed
uiReturnedStringLen = ::LoadStringW( g_hInstance , nStringIdIn , sszCurrentString.PMem() , uiCurrentSize );
if ( uiReturnedStringLen == 0 ) { dwError = TW32( GetLastError() ); TraceFlow2( "Error %#x occurred trying load string (string id is %d).", dwError, nStringIdIn ); LogMsg( "Error %#x occurred trying load string (string id is %d).", dwError, nStringIdIn ); break; } // if: LoadString() had an error
++uiReturnedStringLen; } while( uiCurrentSize <= uiReturnedStringLen );
if ( dwError == ERROR_SUCCESS ) { rsszDestOut = sszCurrentString; } // if: there were no errors in this function
else { rsszDestOut.PRelease(); } // else: something went wrong
RETURN( dwError );
} //*** DwLoadString()
|