windows-nt/Source/XPSP1/NT/ds/adsi/winnt/ccache.cxx
2020-09-26 16:20:57 +08:00

726 lines
13 KiB
C++

//+---------------------------------------------------------------------------
//
// Microsoft Windows
// Copyright (C) Microsoft Corporation, 1992 - 1995.
//
// File: ccache.cxx
//
// Contents: Class Cache functionality for the NT Provider
//
//
//----------------------------------------------------------------------------
#include "winnt.hxx"
HRESULT
SetOctetPropertyInCache(
CPropertyCache *pPropertyCache,
LPTSTR pszProperty,
BYTE *pByte,
DWORD dwLength,
BOOL fExplicit
)
{
HRESULT hr;
OctetString octString;
if(!pPropertyCache){
RRETURN(E_POINTER);
}
octString.pByte = pByte;
octString.dwSize = dwLength;
hr = pPropertyCache->unmarshallproperty(
pszProperty,
(LPBYTE)&octString,
1,
NT_SYNTAX_ID_OCTETSTRING,
fExplicit
);
BAIL_ON_FAILURE(hr);
error:
RRETURN(hr);
}
HRESULT
SetLPTSTRPropertyInCache(
CPropertyCache *pPropertyCache,
LPTSTR pszProperty,
LPTSTR pszValue,
BOOL fExplicit
)
{
HRESULT hr;
if(!pPropertyCache){
RRETURN(E_POINTER);
}
hr = pPropertyCache->unmarshallproperty(
pszProperty,
(LPBYTE)pszValue,
1,
NT_SYNTAX_ID_LPTSTR,
fExplicit
);
BAIL_ON_FAILURE(hr);
error:
RRETURN(hr);
}
HRESULT
SetDWORDPropertyInCache(
CPropertyCache *pPropertyCache,
LPTSTR pszProperty,
DWORD dwValue,
BOOL fExplicit
)
{
HRESULT hr;
if(!pPropertyCache){
RRETURN(E_POINTER);
}
hr = pPropertyCache->unmarshallproperty(
pszProperty,
(LPBYTE)&dwValue,
1,
NT_SYNTAX_ID_DWORD,
fExplicit
);
BAIL_ON_FAILURE(hr);
error:
RRETURN(hr);
}
HRESULT
SetDATE70PropertyInCache(
CPropertyCache *pPropertyCache,
LPTSTR pszProperty,
DWORD dwValue,
BOOL fExplicit
)
{
HRESULT hr;
if(!pPropertyCache){
RRETURN(E_POINTER);
}
hr = pPropertyCache->unmarshallproperty(
pszProperty,
(LPBYTE)&dwValue,
1,
NT_SYNTAX_ID_DATE_1970,
fExplicit
);
BAIL_ON_FAILURE(hr);
error:
RRETURN(hr);
}
HRESULT
SetDATEPropertyInCache(
CPropertyCache *pPropertyCache,
LPTSTR pszProperty,
DWORD dwValue,
BOOL fExplicit
)
{
HRESULT hr;
if(!pPropertyCache){
RRETURN(E_POINTER);
}
hr = pPropertyCache->unmarshallproperty(
pszProperty,
(LPBYTE)&dwValue,
1,
NT_SYNTAX_ID_DATE,
fExplicit
);
BAIL_ON_FAILURE(hr);
error:
RRETURN(hr);
}
HRESULT
SetBOOLPropertyInCache(
CPropertyCache *pPropertyCache,
LPTSTR pszProperty,
BOOL fValue,
BOOL fExplicit
)
{
HRESULT hr;
if(!pPropertyCache){
RRETURN(E_POINTER);
}
hr = pPropertyCache->unmarshallproperty(
pszProperty,
(LPBYTE)&fValue,
1,
NT_SYNTAX_ID_BOOL,
fExplicit
);
BAIL_ON_FAILURE(hr);
error:
RRETURN(hr);
}
HRESULT
SetSYSTEMTIMEPropertyInCache(
CPropertyCache *pPropertyCache,
LPTSTR pszProperty,
SYSTEMTIME stValue,
BOOL fExplicit
)
{
HRESULT hr;
if(!pPropertyCache){
RRETURN(E_POINTER);
}
hr = pPropertyCache->unmarshallproperty(
pszProperty,
(LPBYTE)&stValue,
1,
NT_SYNTAX_ID_SYSTEMTIME,
fExplicit
);
BAIL_ON_FAILURE(hr);
error:
RRETURN(hr);
}
HRESULT
SetDelimitedStringPropertyInCache(
CPropertyCache *pPropertyCache,
LPTSTR pszProperty,
LPTSTR pszValue,
BOOL fExplicit
)
{
HRESULT hr;
DWORD dwNumValues = 0;
LPWSTR pszString = AllocADsStr(pszValue);
if(!pszString){
hr = E_OUTOFMEMORY;
goto error;
}
if(!pPropertyCache){
RRETURN(E_POINTER);
}
//
// Find the size of the delimited String
//
if((dwNumValues = DelimitedStrSize(pszString, TEXT(',')))== 0){
hr = E_FAIL;
goto error;
}
hr = pPropertyCache->unmarshallproperty(
pszProperty,
(LPBYTE)pszString,
dwNumValues,
NT_SYNTAX_ID_DelimitedString,
fExplicit
);
BAIL_ON_FAILURE(hr);
error:
if(pszString){
FreeADsStr(pszString);
}
RRETURN(hr);
}
HRESULT
SetNulledStringPropertyInCache(
CPropertyCache *pPropertyCache,
LPTSTR pszProperty,
LPTSTR pszValue,
BOOL fExplicit
)
{
HRESULT hr;
DWORD dwNumValues = 0;
if(!pPropertyCache){
RRETURN(E_POINTER);
}
//
// Find the size of the nulled String
//
if((dwNumValues = NulledStrSize(pszValue))== 0){
hr = E_FAIL;
goto error;
}
hr = pPropertyCache->unmarshallproperty(
pszProperty,
(LPBYTE)pszValue,
dwNumValues,
NT_SYNTAX_ID_NulledString,
fExplicit
);
BAIL_ON_FAILURE(hr);
error:
RRETURN(hr);
}
HRESULT
GetOctetPropertyFromCache(
CPropertyCache * pPropertyCache,
LPTSTR pszProperty,
OctetString *pOctet)
{
HRESULT hr = S_OK;
DWORD dwSyntaxId = 0;
DWORD dwNumValues = 0;
PNTOBJECT pNTObject = NULL;
hr = pPropertyCache->marshallgetproperty(
pszProperty,
&dwSyntaxId,
&dwNumValues,
&pNTObject
);
BAIL_ON_FAILURE(hr);
hr = MarshallNTSynIdToNT(
dwSyntaxId,
pNTObject,
dwNumValues,
(LPBYTE)pOctet
);
BAIL_ON_FAILURE(hr);
error:
if (pNTObject) {
NTTypeFreeNTObjects(
pNTObject,
dwNumValues
);
}
RRETURN (hr);
}
HRESULT
GetLPTSTRPropertyFromCache(
CPropertyCache * pPropertyCache,
LPTSTR pszProperty,
LPTSTR * ppszValue
)
{
HRESULT hr = S_OK;
DWORD dwSyntaxId = 0;
DWORD dwNumValues = 0;
PNTOBJECT pNTObject = NULL;
hr = pPropertyCache->marshallgetproperty(
pszProperty,
&dwSyntaxId,
&dwNumValues,
&pNTObject
);
BAIL_ON_FAILURE(hr);
hr = MarshallNTSynIdToNT(
dwSyntaxId,
pNTObject,
dwNumValues,
(LPBYTE)ppszValue
);
BAIL_ON_FAILURE(hr);
error:
if (pNTObject) {
NTTypeFreeNTObjects(
pNTObject,
dwNumValues
);
}
RRETURN (hr);
}
HRESULT
GetDelimitedStringPropertyFromCache(
CPropertyCache * pPropertyCache,
LPTSTR pszProperty,
LPTSTR * ppszValue
)
{
HRESULT hr = S_OK;
DWORD dwSyntaxId = 0;
DWORD dwNumValues = 0;
PNTOBJECT pNTObject = NULL;
hr = pPropertyCache->marshallgetproperty(
pszProperty,
&dwSyntaxId,
&dwNumValues,
&pNTObject
);
BAIL_ON_FAILURE(hr);
if(SUCCEEDED(hr)){
hr = MarshallNTSynIdToNT(
dwSyntaxId,
pNTObject,
dwNumValues,
(LPBYTE)ppszValue
);
}
error:
if (pNTObject) {
NTTypeFreeNTObjects(
pNTObject,
dwNumValues
);
}
RRETURN (hr);
}
HRESULT
GetNulledStringPropertyFromCache(
CPropertyCache * pPropertyCache,
LPTSTR pszProperty,
LPTSTR * ppszValue
)
{
HRESULT hr = S_OK;
DWORD dwSyntaxId = 0;
DWORD dwNumValues = 0;
PNTOBJECT pNTObject = NULL;
hr = pPropertyCache->marshallgetproperty(
pszProperty,
&dwSyntaxId,
&dwNumValues,
&pNTObject
);
BAIL_ON_FAILURE(hr);
if(SUCCEEDED(hr)){
hr = MarshallNTSynIdToNT(
dwSyntaxId,
pNTObject,
dwNumValues,
(LPBYTE)ppszValue
);
}
error:
if (pNTObject) {
NTTypeFreeNTObjects(
pNTObject,
dwNumValues
);
}
RRETURN (hr);
}
HRESULT
GetBOOLPropertyFromCache(
CPropertyCache * pPropertyCache,
LPTSTR pszProperty,
PBOOL pBool
)
{
HRESULT hr = S_OK;
DWORD dwSyntaxId = 0;
DWORD dwNumValues = 0;
PNTOBJECT pNTObject = NULL;
hr = pPropertyCache->marshallgetproperty(
pszProperty,
&dwSyntaxId,
&dwNumValues,
&pNTObject
);
BAIL_ON_FAILURE(hr);
if(SUCCEEDED(hr)){
hr = MarshallNTSynIdToNT(
dwSyntaxId,
pNTObject,
dwNumValues,
(LPBYTE)pBool
);
}
error:
if (pNTObject) {
NTTypeFreeNTObjects(
pNTObject,
dwNumValues
);
}
RRETURN (hr);
}
HRESULT
GetDWORDPropertyFromCache(
CPropertyCache * pPropertyCache,
LPTSTR pszProperty,
LPDWORD pdwDWORD
)
{
HRESULT hr = S_OK;
DWORD dwSyntaxId = 0;
DWORD dwNumValues = 0;
PNTOBJECT pNTObject = NULL;
hr = pPropertyCache->marshallgetproperty(
pszProperty,
&dwSyntaxId,
&dwNumValues,
&pNTObject
);
BAIL_ON_FAILURE(hr);
if(SUCCEEDED(hr)){
hr = MarshallNTSynIdToNT(
dwSyntaxId,
pNTObject,
dwNumValues,
(LPBYTE)pdwDWORD
);
}
error:
if (pNTObject) {
NTTypeFreeNTObjects(
pNTObject,
dwNumValues
);
}
RRETURN (hr);
}
HRESULT
GetDATE70PropertyFromCache(
CPropertyCache * pPropertyCache,
LPTSTR pszProperty,
LPDWORD pdwDWORD
)
{
HRESULT hr = S_OK;
DWORD dwSyntaxId = 0;
DWORD dwNumValues = 0;
PNTOBJECT pNTObject = NULL;
hr = pPropertyCache->marshallgetproperty(
pszProperty,
&dwSyntaxId,
&dwNumValues,
&pNTObject
);
BAIL_ON_FAILURE(hr);
if(SUCCEEDED(hr)){
hr = MarshallNTSynIdToNT(
dwSyntaxId,
pNTObject,
dwNumValues,
(LPBYTE)pdwDWORD
);
}
error:
if (pNTObject) {
NTTypeFreeNTObjects(
pNTObject,
dwNumValues
);
}
RRETURN (hr);
}
HRESULT
GetDATEPropertyFromCache(
CPropertyCache * pPropertyCache,
LPTSTR pszProperty,
PDWORD pdwDate
)
{
HRESULT hr = S_OK;
DWORD dwSyntaxId = 0;
DWORD dwNumValues = 0;
PNTOBJECT pNTObject = NULL;
hr = pPropertyCache->marshallgetproperty(
pszProperty,
&dwSyntaxId,
&dwNumValues,
&pNTObject
);
BAIL_ON_FAILURE(hr);
if(SUCCEEDED(hr)){
hr = MarshallNTSynIdToNT(
dwSyntaxId,
pNTObject,
dwNumValues,
(LPBYTE)pdwDate
);
}
error:
if (pNTObject) {
NTTypeFreeNTObjects(
pNTObject,
dwNumValues
);
}
RRETURN (hr);
}
HRESULT
GetSYSTEMTIMEPropertyFromCache(
CPropertyCache * pPropertyCache,
LPTSTR pszProperty,
SYSTEMTIME * pstTime
)
{
HRESULT hr = S_OK;
DWORD dwSyntaxId = 0;
DWORD dwNumValues = 0;
PNTOBJECT pNTObject = NULL;
hr = pPropertyCache->marshallgetproperty(
pszProperty,
&dwSyntaxId,
&dwNumValues,
&pNTObject
);
BAIL_ON_FAILURE(hr);
if(SUCCEEDED(hr)){
hr = MarshallNTSynIdToNT(
dwSyntaxId,
pNTObject,
dwNumValues,
(LPBYTE)pstTime
);
}
error:
if (pNTObject) {
NTTypeFreeNTObjects(
pNTObject,
dwNumValues
);
}
RRETURN (hr);
}