726 lines
13 KiB
C++
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);
|
|
}
|
|
|