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.
 
 
 
 
 
 

198 lines
6.9 KiB

/*++
Copyright (c) 2001 Microsoft Corporation
Abstract:
module common.hxx |
Author:
Michael C. Johnson [mikejohn] 03-Feb-2000
Stefan R. Steiner [SSteiner] 25-Jul-2001
Description:
Contains general code and definitions used by the Shim writer and the various other writers
Revision History:
reuvenl 05/02/2002 Incorporated code from common.h/cpp into this module
--*/
#ifndef __H_COMMON_
#define __H_COMMON_
#pragma once
#include "bsstring.hxx"
typedef PWCHAR *PPWCHAR;
typedef PVOID *PPVOID;
typedef VSS_ID *PVSS_ID, **PPVSS_ID;
#define ROOT_BACKUP_DIR L"%SystemRoot%\\Repair\\Backup"
#define BOOTABLE_STATE_SUBDIR L"\\BootableSystemState"
#define SERVICE_STATE_SUBDIR L"\\ServiceState"
/*
** In a number of places we need a buffer into which to fetch registry
** values. Define a common buffer size for the mini writers to use
*/
#ifndef REGISTRY_BUFFER_SIZE
#define REGISTRY_BUFFER_SIZE (4096)
#endif
#ifndef MAX_VOLUMENAME_LENGTH
#define MAX_VOLUMENAME_LENGTH (50)
#endif
#ifndef MAX_VOLUMENAME_SIZE
#define MAX_VOLUMENAME_SIZE (MAX_VOLUMENAME_LENGTH * sizeof (WCHAR))
#endif
#ifndef DIR_SEP_STRING
#define DIR_SEP_STRING L"\\"
#endif
#ifndef DIR_SEP_CHAR
#define DIR_SEP_CHAR L'\\'
#endif
#ifndef UMIN
#define UMIN(_P1, _P2) (((_P1) < (_P2)) ? (_P1) : (_P2))
#endif
#ifndef UMAX
#define UMAX(_P1, _P2) (((_P1) > (_P2)) ? (_P1) : (_P2))
#endif
#define HandleInvalid(_Handle) ((NULL == (_Handle)) || (INVALID_HANDLE_VALUE == (_Handle)))
#define GET_STATUS_FROM_BOOL(_bSucceeded) ((_bSucceeded) ? NOERROR : HRESULT_FROM_WIN32 (GetLastError()))
#define GET_STATUS_FROM_HANDLE(_handle) ((!HandleInvalid(_handle)) ? NOERROR : HRESULT_FROM_WIN32 (GetLastError()))
#define GET_STATUS_FROM_POINTER(_ptr) ((NULL != (_ptr)) ? NOERROR : E_OUTOFMEMORY)
#define GET_STATUS_FROM_FILESCAN(_bMoreFiles) ((_bMoreFiles) \
? NOERROR \
: ((ERROR_NO_MORE_FILES == GetLastError()) \
? NOERROR \
: HRESULT_FROM_WIN32 (GetLastError())))
#define NameIsDotOrDotDot(_ptszName) ((L'.' == (_ptszName) [0]) && \
((L'\0' == (_ptszName) [1]) || ((L'.' == (_ptszName) [1]) && \
(L'\0' == (_ptszName) [2]))))
#define DeclareStaticUnicodeString(_StringName, _StringValue) \
static UNICODE_STRING (_StringName) = {sizeof (_StringValue) - sizeof (UNICODE_NULL), \
sizeof (_StringValue), \
_StringValue}
#define RETURN_VALUE_IF_REQUIRED(_Ptr, _Value) {if (NULL != (_Ptr)) *(_Ptr) = (_Value);}
HRESULT StringInitialise (PUNICODE_STRING pucsString);
HRESULT StringInitialise (PUNICODE_STRING pucsString, PWCHAR pwszString);
HRESULT StringInitialise (PUNICODE_STRING pucsString, LPCWSTR pwszString);
HRESULT StringTruncate (PUNICODE_STRING pucsString, USHORT usSizeInChars);
HRESULT StringSetLength (PUNICODE_STRING pucsString);
HRESULT StringAllocate (PUNICODE_STRING pucsString, USHORT usMaximumStringLengthInBytes);
HRESULT StringFree (PUNICODE_STRING pucsString);
HRESULT StringCreateFromString (PUNICODE_STRING pucsNewString, PUNICODE_STRING pucsOriginalString);
HRESULT StringCreateFromString (PUNICODE_STRING pucsNewString, PUNICODE_STRING pucsOriginalString, DWORD dwExtraChars);
HRESULT StringCreateFromString (PUNICODE_STRING pucsNewString, LPCWSTR pwszOriginalString);
HRESULT StringCreateFromString (PUNICODE_STRING pucsNewString, LPCWSTR pwszOriginalString, DWORD dwExtraChars);
HRESULT StringAppendString (PUNICODE_STRING pucsTarget, PUNICODE_STRING pucsSource);
HRESULT StringAppendString (PUNICODE_STRING pucsTarget, PWCHAR pwszSource);
HRESULT StringCreateFromExpandedString (PUNICODE_STRING pucsNewString, PUNICODE_STRING pucsOriginalString);
HRESULT StringCreateFromExpandedString (PUNICODE_STRING pucsNewString, PUNICODE_STRING pucsOriginalString, DWORD dwExtraChars);
HRESULT StringCreateFromExpandedString (PUNICODE_STRING pucsNewString, LPCWSTR pwszOriginalString);
HRESULT StringCreateFromExpandedString (PUNICODE_STRING pucsNewString, LPCWSTR pwszOriginalString, DWORD dwExtraChars);
HRESULT CommonCloseHandle (PHANDLE phHandle);
HRESULT VsServiceChangeState (IN LPCWSTR pwszServiceName,
IN DWORD dwRequestedState,
OUT PDWORD pdwReturnedOldState,
OUT PBOOL pbReturnedStateChanged);
BOOL VsCreateDirectories (
IN LPCWSTR pwszPathName,
IN LPSECURITY_ATTRIBUTES lpSecurityAttribute,
IN DWORD dwExtraAttributes
);
HRESULT RemoveDirectoryTree (
IN LPCWSTR pwcsDirectoryPath
);
HRESULT CreateTargetPath(
IN LPCWSTR pwszTargetPath
);
HRESULT CleanupTargetPath(LPCWSTR pwszTargetPath);
HRESULT MoveFilesInDirectory (
IN CBsString cwsSourceDirectoryPath,
IN CBsString cwsTargetDirectoryPath
);
HRESULT IsPathInVolumeArray (IN LPCWSTR pwszPath,
IN const ULONG ulVolumeCount,
IN LPCWSTR *ppwszVolumeNamesArray,
OUT PBOOL pbReturnedFoundInVolumeArray);
const HRESULT ClassifyShimFailure (HRESULT hrShimFailure);
const HRESULT ClassifyShimFailure (HRESULT hrShimFailure, BOOL &bStatusUpdated);
const HRESULT ClassifyWriterFailure (HRESULT hrWriterFailure);
const HRESULT ClassifyWriterFailure (HRESULT hrWriterFailure, BOOL &bStatusUpdated);
HRESULT LogFailureWorker (CVssFunctionTracer *pft,
LPCWSTR pwszNameWriter,
LPCWSTR pwszNameCalledRoutine);
#define LogFailure(_pft, _hrStatus, _hrStatusRemapped, _pwszNameWriter, _pwszNameCalledRoutine, _pwszNameCallingRoutine) \
{ \
if (FAILED (_hrStatus)) \
{ \
if (CVssFunctionTracer *_pftLocal = (NULL != (_pft)) ? (_pft) : new CVssFunctionTracer (VSSDBG_SHIM, (_pwszNameCallingRoutine))) \
{ \
_pftLocal->hr = (_hrStatus); \
\
(_hrStatusRemapped) = LogFailureWorker (_pftLocal, (_pwszNameWriter), (_pwszNameCalledRoutine)); \
\
if (NULL == (_pft)) delete _pftLocal; \
} \
} \
}
#define LogAndThrowOnFailure(_ft, _pwszNameWriter, _pwszNameFailedRoutine) \
{ \
HRESULT _hrStatusRemapped; \
\
if (FAILED ((_ft).hr)) \
{ \
LogFailure (&(_ft), (_ft).hr, _hrStatusRemapped, (_pwszNameWriter), (_pwszNameFailedRoutine), L"(UNKNOWN)"); \
\
throw (_hrStatusRemapped); \
} \
}
#endif // __H_COMMON_