windows-nt/Source/XPSP1/NT/base/fs/dfs/dfsm/server/query.cxx
2020-09-26 16:20:57 +08:00

74 lines
2 KiB
C++

//+-------------------------------------------------------------------------
//
// File: query.cxx
//
// Contents: This module contains the functions which deal with queries
// basically, those which help us in getting from an entry path
// to a volume object Name.
//
// History: 24-May-1993 SudK Created.
//
//--------------------------------------------------------------------------
#include "headers.hxx"
#pragma hdrstop
#include "cdfsvol.hxx"
//+-------------------------------------------------------------------------
//
// Function: GetVolObjForPath,
//
// Synopsis: Given an entrypath it returns the volume object which has
// the exact same entry path on it.
//
// Arguments: [pwszEntryPath] -- The Entry Path is given here.
// [fExactMatch] -- If TRUE, then the volume object's entry path
// must match pwszEntryPath exactly.
// [ppwszVolFound] -- The appropriate vol obj name.
//
// Returns:
//
//--------------------------------------------------------------------------
DWORD
GetVolObjForPath(
IN PWSTR pwszEntryPath,
IN BOOLEAN fExactMatch,
OUT PWSTR *ppwszVolFound
)
{
PWCHAR pPrivatePrefix;
ULONG ulen = wcslen(pwszEntryPath);
DWORD dwErr;
if (pDfsmStorageDirectory == NULL) {
return ERROR_INVALID_PARAMETER;
}
//
// Get rid of a trailing backslash if there is one.
//
pPrivatePrefix = new WCHAR[ulen+1];
if (pPrivatePrefix != NULL) {
wcscpy(pPrivatePrefix, pwszEntryPath);
if (ulen >= 1 && pPrivatePrefix[ulen-1] == L'\\')
pPrivatePrefix[ulen-1] = L'\0';
dwErr = pDfsmStorageDirectory->GetObjectForPrefix(
pPrivatePrefix,
fExactMatch,
ppwszVolFound,
&ulen);
delete [] pPrivatePrefix;
} else {
dwErr = ERROR_OUTOFMEMORY;
}
return(dwErr);
}