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.
 
 
 
 
 
 

297 lines
8.4 KiB

/*++
Copyright (c) 1996-1998 Microsoft Corporation
Module Name :
simplemb.hxx
Abstract:
based in mb.hxx from iisrearc
This module defines the USER-level wrapper class for access to the
metabase. It uses the UNICODE DCOM API for Metabase
Author:
Environment:
Win32 - User Mode
Project:
Internet Server DLL
Revision History:
MuraliK 03-Nov-1998
--*/
#ifndef _SIMPLE_MB_HXX_
#define _SIMPPLE_MB_HXX_
#include "buffer.hxx"
#if !defined( dllexp)
#define dllexp __declspec( dllexport)
#endif // !defined( dllexp)
/************************************************************
* Type Definitions
************************************************************/
class SimpleMB {
public:
SimpleMB( IMSAdminBase * pAdminBase);
~SimpleMB(void);
//
// Metabase operations: Open, Close & Save ops
//
inline BOOL
Open( LPCWSTR pwszPath,
DWORD dwFlags = METADATA_PERMISSION_READ );
BOOL Open( METADATA_HANDLE hOpenRoot OPTIONAL,
LPCWSTR pwszPath,
DWORD dwFlags = METADATA_PERMISSION_READ );
BOOL Close(void);
BOOL Save(void);
// ------------------------------------------
// Operations on the metadata objects: enum, add, delete
// ------------------------------------------
BOOL GetDataSetNumber( IN LPCWSTR pszPath,
OUT DWORD * pdwDataSetNumber );
BOOL EnumObjects( IN LPCWSTR pszPath,
OUT LPWSTR pszName,
IN DWORD dwIndex );
BOOL AddObject( IN LPCWSTR pszPath);
BOOL DeleteObject( IN LPCWSTR pszPath);
BOOL GetSystemChangeNumber( DWORD *pdwChangeNumber );
METADATA_HANDLE QueryHandle( VOID ) const { return m_hMBPath; }
IMSAdminBase * QueryAdminBase( VOID ) const { return m_pAdminBase; }
BOOL GetAll( IN LPCWSTR pszPath,
IN DWORD dwFlags,
IN DWORD dwUserType,
OUT BUFFER * pBuff,
OUT DWORD * pcRecords,
OUT DWORD * pdwDataSetNumber );
BOOL DeleteData(IN LPCWSTR pszPath,
IN DWORD dwPropID,
IN DWORD dwUserType,
IN DWORD dwDataType
);
// ------------------------------------------
// Set operations on the Metabase object
// ------------------------------------------
BOOL SetData( IN LPCWSTR pszPath,
IN DWORD dwPropID,
IN DWORD dwUserType,
IN DWORD dwDataType,
IN VOID * pvData,
IN DWORD cbData,
IN DWORD dwFlags = METADATA_INHERIT );
inline
BOOL SetDword( IN LPCWSTR pszPath,
IN DWORD dwPropID,
DWORD dwUserType,
DWORD dwValue,
DWORD dwFlags = METADATA_INHERIT );
inline
BOOL SetString( IN LPCWSTR pszPath,
DWORD dwPropID,
DWORD dwUserType,
IN LPCWSTR pszValue,
DWORD dwFlags = METADATA_INHERIT );
// ------------------------------------------
// Get operations on the Metabase object
// ------------------------------------------
BOOL GetData( IN LPCWSTR pszPath,
IN DWORD dwPropID,
IN DWORD dwUserType,
IN DWORD dwDataType,
OUT VOID * pvData,
IN OUT DWORD * pcbData,
IN DWORD dwFlags = METADATA_INHERIT );
BOOL GetDataPaths(IN LPCWSTR pszPath,
IN DWORD dwPropID,
IN DWORD dwDataType,
OUT BUFFER * pBuff );
inline
BOOL GetDword( IN LPCWSTR pszPath,
IN DWORD dwPropID,
IN DWORD dwUserType,
OUT DWORD * pdwValue,
IN DWORD dwFlags = METADATA_INHERIT );
// Get DWORD, substitue a default if available.
inline
VOID GetDword( IN LPCWSTR pszPath,
IN DWORD dwPropID,
IN DWORD dwUserType,
IN DWORD dwDefaultValue,
OUT DWORD * pdwValue,
IN DWORD dwFlags = METADATA_INHERIT
);
inline BOOL
GetString( IN LPCWSTR pszPath,
IN DWORD dwPropID,
IN DWORD dwUserType,
OUT LPWSTR pszValue,
OUT DWORD * pcbValue,
IN DWORD dwFlags = METADATA_INHERIT );
BOOL GetBuffer( LPCWSTR pszPath,
DWORD dwPropID,
DWORD dwUserType,
BUFFER* pbu,
LPDWORD pdwL,
DWORD dwFlags = METADATA_INHERIT )
{
*pdwL = pbu->QuerySize();
TryAgain:
if ( GetData( pszPath,
dwPropID,
dwUserType,
BINARY_METADATA,
pbu->QueryPtr(),
pdwL,
dwFlags ) )
{
return TRUE;
}
else if ( GetLastError() == ERROR_INSUFFICIENT_BUFFER &&
pbu->Resize( *pdwL ) )
{
goto TryAgain;
}
return FALSE;
}
private:
IMSAdminBase * m_pAdminBase;
METADATA_HANDLE m_hMBPath;
};
inline BOOL
SimpleMB::GetDword( IN LPCWSTR pszPath,
IN DWORD dwPropID,
IN DWORD dwUserType,
OUT DWORD * pdwValue,
IN DWORD dwFlags )
{
DWORD cb = sizeof(DWORD);
return GetData( pszPath,
dwPropID,
dwUserType,
DWORD_METADATA,
pdwValue,
&cb,
dwFlags );
}
inline VOID
SimpleMB::GetDword( IN LPCWSTR pszPath,
IN DWORD dwPropID,
IN DWORD dwUserType,
IN DWORD dwDefaultValue,
OUT DWORD * pdwValue,
IN DWORD dwFlags
)
{
DWORD cb = sizeof(DWORD);
if ( !GetData( pszPath,
dwPropID,
dwUserType,
DWORD_METADATA,
pdwValue,
&cb,
dwFlags )
) {
*pdwValue = dwDefaultValue;
}
} // SimpleMB::GetDword()
inline BOOL
SimpleMB::GetString( IN LPCWSTR pszPath,
IN DWORD dwPropID,
IN DWORD dwUserType,
OUT LPWSTR pszValue,
OUT DWORD * pcbValue,
IN DWORD dwFlags )
{
return GetData( pszPath,
dwPropID,
dwUserType,
STRING_METADATA,
pszValue,
pcbValue,
dwFlags );
} // SimpleMB::GetString()
inline BOOL
SimpleMB::SetDword( IN LPCWSTR pszPath,
IN DWORD dwPropID,
IN DWORD dwUserType,
IN DWORD dwValue,
IN DWORD dwFlags )
{
return SetData( pszPath,
dwPropID,
dwUserType,
DWORD_METADATA,
(PVOID) &dwValue,
sizeof( DWORD ),
dwFlags );
}
inline BOOL
SimpleMB::SetString( IN LPCWSTR pszPath,
IN DWORD dwPropID,
IN DWORD dwUserType,
IN LPCWSTR pszValue,
IN DWORD dwFlags )
{
return SetData( pszPath,
dwPropID,
dwUserType,
STRING_METADATA,
(PVOID ) pszValue,
(DWORD) (wcslen(pszValue) + 1) * sizeof(WCHAR),
dwFlags );
}
inline BOOL
SimpleMB::Open( LPCWSTR pwszPath,
DWORD dwFlags )
{
return Open( METADATA_MASTER_ROOT_HANDLE,
pwszPath,
dwFlags );
}
#endif // _MB_HXX_