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.
133 lines
4.6 KiB
133 lines
4.6 KiB
//+----------------------------------------------------------------------------
|
|
//
|
|
// File: getpbk.cpp
|
|
//
|
|
// Module: Common Code
|
|
//
|
|
// Synopsis: Implements the function GetPhoneBookPath.
|
|
//
|
|
// Copyright (c) 1999 Microsoft Corporation
|
|
//
|
|
// Author: quintinb Created Heaser 08/19/99
|
|
//
|
|
//+----------------------------------------------------------------------------
|
|
|
|
//+----------------------------------------------------------------------------
|
|
//
|
|
// Function: GetPhoneBookPath
|
|
//
|
|
// Synopsis: This function will return the proper path to the phonebook. If
|
|
// used on a legacy platform this is NULL. On NT5, the function
|
|
// depends on the proper Install Directory being inputted so that
|
|
// the function can use this as a base to determine the phonebook path.
|
|
// If the inputted pointer to a string buffer is filled with a path,
|
|
// then the directory path will be created as will the pbk file itself.
|
|
// The caller should always call CmFree on the pointer passed into this
|
|
// API when done with the path, because it will either free the memory
|
|
// or do nothing (NULL case).
|
|
//
|
|
// Arguments: LPCTSTR pszInstallDir - path to the CM profile dir
|
|
// LPTSTR* ppszPhoneBook - pointer to accept a newly allocated and filled pbk string
|
|
// BOOL fAllUser - TRUE if this an All-User profile
|
|
//
|
|
// Returns: BOOL - returns TRUE if successful
|
|
//
|
|
// History: quintinb Created 11/12/98
|
|
// tomkel 06/28/2001 Changed the ACLs when the phonebook gets
|
|
// createdfor an All-User profile
|
|
//
|
|
//+----------------------------------------------------------------------------
|
|
BOOL GetPhoneBookPath(LPCTSTR pszInstallDir, LPTSTR* ppszPhonebook, BOOL fAllUser)
|
|
{
|
|
|
|
if (NULL == ppszPhonebook)
|
|
{
|
|
CMASSERTMSG(FALSE, TEXT("GetPhoneBookPath -- Invalid Parameter"));
|
|
return FALSE;
|
|
}
|
|
|
|
CPlatform plat;
|
|
|
|
if (plat.IsAtLeastNT5())
|
|
{
|
|
if ((NULL == pszInstallDir) || (TEXT('\0') == pszInstallDir[0]))
|
|
{
|
|
CMASSERTMSG(FALSE, TEXT("GetPhoneBookPath -- Invalid Install Dir parameter."));
|
|
return FALSE;
|
|
}
|
|
|
|
//
|
|
// Now Create the path to the phonebook.
|
|
//
|
|
LPTSTR pszPhonebook;
|
|
TCHAR szInstallDir[MAX_PATH+1];
|
|
ZeroMemory(szInstallDir, CELEMS(szInstallDir));
|
|
|
|
if (TEXT('\\') == pszInstallDir[lstrlen(pszInstallDir) - 1])
|
|
{
|
|
//
|
|
// Then the path ends in a backslash. Thus we won't properly
|
|
// remove CM from the path. Remove the backslash.
|
|
//
|
|
|
|
lstrcpyn(szInstallDir, pszInstallDir, lstrlen(pszInstallDir));
|
|
}
|
|
else
|
|
{
|
|
lstrcpy(szInstallDir, pszInstallDir);
|
|
}
|
|
|
|
CFileNameParts InstallDirPath(szInstallDir);
|
|
|
|
pszPhonebook = (LPTSTR)CmMalloc(lstrlen(InstallDirPath.m_Drive) +
|
|
lstrlen(InstallDirPath.m_Dir) +
|
|
lstrlen(c_pszPbk) + lstrlen(c_pszRasPhonePbk) + 1);
|
|
|
|
if (NULL != pszPhonebook)
|
|
{
|
|
wsprintf(pszPhonebook, TEXT("%s%s%s"), InstallDirPath.m_Drive,
|
|
InstallDirPath.m_Dir, c_pszPbk);
|
|
|
|
//
|
|
// Use CreateLayerDirectory to recursively create the directory structure as
|
|
// necessary (will create all the directories in a full path if necessary).
|
|
//
|
|
|
|
MYVERIFY(FALSE != CreateLayerDirectory(pszPhonebook));
|
|
|
|
MYVERIFY(NULL != lstrcat(pszPhonebook, c_pszRasPhonePbk));
|
|
|
|
HANDLE hPbk = INVALID_HANDLE_VALUE;
|
|
|
|
hPbk = CreateFile(pszPhonebook, GENERIC_WRITE | GENERIC_READ, FILE_SHARE_READ, NULL, CREATE_NEW,
|
|
FILE_ATTRIBUTE_NORMAL, NULL);
|
|
|
|
if (hPbk != INVALID_HANDLE_VALUE)
|
|
{
|
|
MYVERIFY(0 != CloseHandle(hPbk));
|
|
|
|
//
|
|
// Give everyone read and write permissions to the phonebook
|
|
//
|
|
if (fAllUser)
|
|
{
|
|
AllowAccessToWorld(pszPhonebook);
|
|
}
|
|
}
|
|
|
|
*ppszPhonebook = pszPhonebook;
|
|
}
|
|
else
|
|
{
|
|
CMASSERTMSG(FALSE, TEXT("CmMalloc returned NULL"));
|
|
return FALSE;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
*ppszPhonebook = NULL;
|
|
}
|
|
|
|
return TRUE;
|
|
}
|
|
|