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.
 
 
 
 
 
 

598 lines
14 KiB

/*++
Copyright (c) 1999 Microsoft Corporation
Module Name:
Registry.c
Abstract:
Environment:
Fax driver
Revision History:
10/13/99 -v-sashab-
Created it.
--*/
#include "faxui.h"
#include "Registry.h"
#include "faxreg.h"
#include "registry.h"
#include "faxlib.h"
HRESULT
SaveLastReciptInfo(
DWORD dwReceiptDeliveryType,
LPTSTR szReceiptAddress
)
/*++
Routine Description:
Save the information about the last recipt in the registry
Arguments:
dwReceiptDeliveryType - specifice delivery type: REGVAL_RECEIPT_MSGBOX, REGVAL_RECEIPT_EMAIL, REGVAL_RECEIPT_NO_RECEIPT
szReceiptDeliveryProfile - specifies delivery profile (e-mail address)
Return Value:
S_OK - if success
E_FAIL - otherwise
--*/
{
HKEY hRegKey = NULL;
HRESULT hResult = S_OK;
if (hRegKey = OpenRegistryKey(HKEY_CURRENT_USER, REGKEY_FAX_USERINFO, TRUE,REG_READWRITE) )
{
if (dwReceiptDeliveryType == DRT_NONE)
{
SetRegistryDword(hRegKey, REGVAL_RECEIPT_NO_RECEIPT, 1);
}
else
{
SetRegistryDword(hRegKey, REGVAL_RECEIPT_NO_RECEIPT, 0);
}
if (dwReceiptDeliveryType & DRT_GRP_PARENT)
{
SetRegistryDword(hRegKey, REGVAL_RECEIPT_GRP_PARENT, 1);
}
else
{
SetRegistryDword(hRegKey, REGVAL_RECEIPT_GRP_PARENT, 0);
}
if (dwReceiptDeliveryType & DRT_MSGBOX)
{
SetRegistryDword(hRegKey, REGVAL_RECEIPT_MSGBOX, 1);
}
else
{
SetRegistryDword(hRegKey, REGVAL_RECEIPT_MSGBOX, 0);
}
if (dwReceiptDeliveryType & DRT_EMAIL)
{
SetRegistryDword(hRegKey, REGVAL_RECEIPT_EMAIL, 1);
}
else
{
SetRegistryDword(hRegKey, REGVAL_RECEIPT_EMAIL, 0);
}
if (dwReceiptDeliveryType & DRT_ATTACH_FAX)
{
SetRegistryDword(hRegKey, REGVAL_RECEIPT_ATTACH_FAX, 1);
}
else
{
SetRegistryDword(hRegKey, REGVAL_RECEIPT_ATTACH_FAX, 0);
}
if ((dwReceiptDeliveryType & DRT_EMAIL) && szReceiptAddress)
{
//
// Save profile (address) only for mail receipt types
//
// if this function failes, it prints a warning message inside
SetRegistryString(hRegKey, REGVAL_RECEIPT_ADDRESS, szReceiptAddress);
}
RegCloseKey(hRegKey);
}
else
{
Error(("SaveLastReciptInfo: Can't open registry for READ/WRITE\n"));
hResult = E_FAIL;
}
return hResult;
}
HRESULT
RestoreLastReciptInfo(
DWORD * pdwReceiptDeliveryType,
LPTSTR * lpptReceiptAddress
)
/*++
Routine Description:
Restores the information about the last receipt from the registry
Arguments:
pdwReceiptDeliveryType - specifice delivery type: REGVAL_RECEIPT_MSGBOX, REGVAL_RECEIPT_EMAIL, REGVAL_RECEIPT_NO_RECEIPT
szReceiptDeliveryProfile - specifies delivery profile (e-mail address)
Return Value:
S_OK - if success
E_FAIL - otherwise
--*/
{
HKEY hRegKey = NULL;
HRESULT hResult = S_OK;
Assert(pdwReceiptDeliveryType);
Assert(lpptReceiptAddress);
*pdwReceiptDeliveryType = DRT_NONE;
*lpptReceiptAddress = NULL;
if ((hRegKey = GetUserInfoRegKey(REGKEY_FAX_USERINFO, REG_READWRITE)))
{
if (!GetRegistryDword(hRegKey, REGVAL_RECEIPT_NO_RECEIPT) &&
!GetRegistryDword(hRegKey, REGVAL_RECEIPT_GRP_PARENT) &&
!GetRegistryDword(hRegKey, REGVAL_RECEIPT_MSGBOX) &&
!GetRegistryDword(hRegKey, REGVAL_RECEIPT_EMAIL))
{
Verbose (("RestoreLastReciptInfo runs for the very first time\n"));
}
else
{
if (GetRegistryDword(hRegKey, REGVAL_RECEIPT_GRP_PARENT) == 1)
{
*pdwReceiptDeliveryType |= DRT_GRP_PARENT;
}
if (GetRegistryDword(hRegKey, REGVAL_RECEIPT_MSGBOX) == 1)
{
*pdwReceiptDeliveryType |= DRT_MSGBOX;
}
if (GetRegistryDword(hRegKey, REGVAL_RECEIPT_EMAIL) == 1)
{
*pdwReceiptDeliveryType |= DRT_EMAIL;
}
if (GetRegistryDword(hRegKey, REGVAL_RECEIPT_ATTACH_FAX) == 1)
{
*pdwReceiptDeliveryType |= DRT_ATTACH_FAX;
}
if (!(*lpptReceiptAddress = GetRegistryString(hRegKey, REGVAL_RECEIPT_ADDRESS, TEXT(""))))
{
Error(("Memory allocation failed\n"));
hResult = HRESULT_FROM_WIN32(ERROR_NOT_ENOUGH_MEMORY);
goto error;
}
}
RegCloseKey(hRegKey);
}
else
{
Error(("SaveLastReciptInfo: Can't open registry for READ/WRITE\n"));
hResult = E_FAIL;
goto error;
}
goto exit;
error:
if (hRegKey)
{
RegCloseKey(hRegKey);
}
if (*lpptReceiptAddress)
{
MemFree(*lpptReceiptAddress);
}
exit:
return hResult;
}
HRESULT
SaveLastRecipientInfo(
PFAX_PERSONAL_PROFILE pfppRecipient,
DWORD dwLastRecipientCountryId
)
/*++
Routine Description:
Save the information about the last recipient in the registry
Arguments:
pfppRecipient [in] - Recipient personal info
dwLastRecipientCountryId [in] - Last recipient country ID
Return Value:
S_OK - if success
E_FAIL - otherwise
--*/
{
HKEY hRegKey = NULL;
HRESULT hResult = S_OK;
Assert(pfppRecipient);
if (hRegKey = OpenRegistryKey(HKEY_CURRENT_USER, REGKEY_FAX_USERINFO, TRUE,REG_READWRITE) )
{
SetRegistryString(hRegKey, REGVAL_LAST_RECNAME, pfppRecipient->lptstrName);
SetRegistryString(hRegKey, REGVAL_LAST_RECNUMBER, pfppRecipient->lptstrFaxNumber);
SetRegistryDword( hRegKey, REGVAL_LAST_COUNTRYID, dwLastRecipientCountryId);
RegCloseKey(hRegKey);
}
else
{
Error(("SaveLastRecipientInfo: Can't open registry for READ/WRITE\n"));
hResult = E_FAIL;
}
return hResult;
}
HRESULT
RestoreLastRecipientInfo(
DWORD* pdwNumberOfRecipients,
PFAX_PERSONAL_PROFILE* lppFaxSendWizardData,
DWORD* pdwLastRecipientCountryId
)
/*++
Routine Description:
Restores the information about the last recipient from the registry
Arguments:
pdwNumberOfRecipients [out] - Number of recipients
lppFaxSendWizardData [out] - Recipient personal info
pdwLastRecipientCountryId [out] - Last recipient country ID
Return Value:
S_OK - if success
E_FAIL - otherwise
--*/
{
HKEY hRegKey = NULL;
LPTSTR lptstrName = NULL, lptstrFaxNumber = NULL;
HRESULT hResult = S_OK;
//
// validate parameters
//
Assert (pdwNumberOfRecipients);
Assert (lppFaxSendWizardData);
Assert (pdwLastRecipientCountryId);
*pdwNumberOfRecipients = 0;
*lppFaxSendWizardData = NULL;
*pdwLastRecipientCountryId = 0;
if (hRegKey = GetUserInfoRegKey(REGKEY_FAX_USERINFO, REG_READONLY))
{
if (!(lptstrName = GetRegistryString(hRegKey, REGVAL_LAST_RECNAME, TEXT(""))) ||
!(lptstrFaxNumber = GetRegistryString(hRegKey, REGVAL_LAST_RECNUMBER, TEXT(""))))
{
Error(("GetRegistryString failed\n"));
hResult = HRESULT_FROM_WIN32(ERROR_NOT_ENOUGH_MEMORY);
goto error;
}
if (!(*lppFaxSendWizardData = MemAllocZ(sizeof(FAX_PERSONAL_PROFILE))))
{
Error(("Memory allocation failed\n"));
hResult = HRESULT_FROM_WIN32(ERROR_NOT_ENOUGH_MEMORY);
goto error;
}
*pdwLastRecipientCountryId = GetRegistryDword(hRegKey, REGVAL_LAST_COUNTRYID);
*pdwNumberOfRecipients = 1;
(*lppFaxSendWizardData)[0].lptstrName = lptstrName;
(*lppFaxSendWizardData)[0].lptstrFaxNumber = lptstrFaxNumber;
RegCloseKey(hRegKey);
}
else
{
Error(("RestoreLastRecipientInfo: Can't open registry for READ/WRITE\n"));
hResult = E_FAIL;
goto error;
}
goto exit;
error:
MemFree ( lptstrName );
MemFree ( lptstrFaxNumber );
if (hRegKey)
RegCloseKey(hRegKey);
exit:
return hResult;
}
HRESULT
RestoreCoverPageInfo(
LPTSTR * lpptstrCoverPageFileName
)
/*++
Routine Description:
Restores the information about the cover page from the registry
Arguments:
lpptstrCoverPageFileName - pointer to restore coverd page file name
Return Value:
S_OK if success
error otherwise (may return HRESULT_FROM_WIN32(ERROR_NOT_ENOUGH_MEMORY))
--*/
{
HKEY hRegKey = NULL;
HRESULT hResult = S_OK;
//
// validate parameter
//
Assert(lpptstrCoverPageFileName);
//
// Retrieve the most recently used cover page settings
//
*lpptstrCoverPageFileName = NULL;
if (hRegKey = GetUserInfoRegKey(REGKEY_FAX_USERINFO, REG_READONLY))
{
if (!(*lpptstrCoverPageFileName = GetRegistryString(hRegKey, REGVAL_COVERPG, TEXT("") )))
{
Error(("Memory allocation failed\n"));
hResult = HRESULT_FROM_WIN32(ERROR_NOT_ENOUGH_MEMORY);
goto error;
}
RegCloseKey(hRegKey);
}
else
{
Error(("RestoreCoverPageInfo: Can't open registry for READ/WRITE\n"));
hResult = E_FAIL;
goto error;
}
goto exit;
error:
if (hRegKey)
RegCloseKey(hRegKey);
exit:
return hResult;
}
HRESULT
SaveCoverPageInfo(
LPTSTR lptstrCoverPageFileName
)
/*++
Routine Description:
Save the information about the cover page settings in the registry
Arguments:
lptstrCoverPageFileName - pointer to cover page file name
Return Value:
S_OK - if success
E_FAIL - otherwise
--*/
{
HKEY hRegKey = NULL;
HRESULT hResult = S_OK;
if (hRegKey = OpenRegistryKey(HKEY_CURRENT_USER, REGKEY_FAX_USERINFO, TRUE,REG_READWRITE) ) {
SetRegistryString(hRegKey, REGVAL_COVERPG, lptstrCoverPageFileName);
RegCloseKey(hRegKey);
}
else
{
Error(("SaveCoverPageInfo: Can't open registry for READ/WRITE\n"));
hResult = E_FAIL;
}
return hResult;
}
HRESULT
RestoreUseDialingRules(
BOOL* pbUseDialingRules,
BOOL* pbUseOutboundRouting
)
/*++
Routine Description:
Restore UseDialingRules / UseOutboundRouting option from the registry
Arguments:
pbUseDialingRules - [out] TRUE if the option is selected
pbUseOutboundRouting - [out] TRUE if the option is selected
Return Value:
S_OK - if success
E_FAIL - otherwise
--*/
{
HKEY hRegKey = NULL;
HRESULT hResult = S_OK;
Assert(pbUseDialingRules && pbUseOutboundRouting);
*pbUseDialingRules = FALSE;
hRegKey = GetUserInfoRegKey(REGKEY_FAX_USERINFO, REG_READONLY);
if(hRegKey)
{
*pbUseDialingRules = GetRegistryDword(hRegKey, REGVAL_USE_DIALING_RULES);
*pbUseOutboundRouting = GetRegistryDword(hRegKey, REGVAL_USE_OUTBOUND_ROUTING);
RegCloseKey(hRegKey);
}
else
{
Error(("RestoreUseDialingRules: GetUserInfoRegKey failed\n"));
hResult = E_FAIL;
}
return hResult;
}
HRESULT
SaveUseDialingRules(
BOOL bUseDialingRules,
BOOL bUseOutboundRouting
)
/*++
Routine Description:
Save UseDialingRules / UseOutboundRouting option in the registry
Arguments:
bUseDialingRules - [in] TRUE if the option selected
bUseOutboundRouting - [in] TRUE if the option selected
Return Value:
S_OK - if success
E_FAIL - otherwise
--*/
{
HKEY hRegKey = NULL;
HRESULT hResult = S_OK;
hRegKey = GetUserInfoRegKey(REGKEY_FAX_USERINFO, REG_READWRITE);
if(hRegKey)
{
if(!SetRegistryDword(hRegKey, REGVAL_USE_DIALING_RULES, bUseDialingRules))
{
Error(("SaveUseDialingRules: SetRegistryDword failed\n"));
hResult = E_FAIL;
}
if(!SetRegistryDword(hRegKey, REGVAL_USE_OUTBOUND_ROUTING, bUseOutboundRouting))
{
Error(("SaveUseDialingRules: SetRegistryDword failed\n"));
hResult = E_FAIL;
}
RegCloseKey(hRegKey);
}
else
{
Error(("SaveUseDialingRules: GetUserInfoRegKey failed\n"));
hResult = E_FAIL;
}
return hResult;
}
BOOL
IsOutlookDefaultClient()
/*++
Routine Description:
Determine if the Microsoft Outlook is default mail client
Return Value:
TRUE - if yes
FALSE - otherwise
--*/
{
BOOL bRes = FALSE;
DWORD dwRes = ERROR_SUCCESS;
HKEY hRegKey = NULL;
TCHAR tszMailClient[64] = {0};
DWORD dwType;
DWORD dwSize = sizeof(tszMailClient)-2;
dwRes = RegOpenKeyEx(HKEY_LOCAL_MACHINE,
REGKEY_MAIL_CLIENT,
0,
KEY_READ,
&hRegKey);
if(ERROR_SUCCESS != dwRes)
{
Error(("IsOutlookDefaultClient: RegOpenKeyEx failed: ec = 0x%X\n", GetLastError()));
return bRes;
}
dwRes = RegQueryValueEx(hRegKey,
NULL,
NULL,
&dwType,
(LPBYTE)tszMailClient,
&dwSize);
if(ERROR_SUCCESS != dwRes)
{
Error(("IsOutlookDefaultClient: RegQueryValueEx failed: ec = 0x%X\n", GetLastError()));
}
else
{
if((REG_SZ == dwType) && !_tcsicmp(tszMailClient, REGVAL_MS_OUTLOOK))
{
bRes = TRUE;
}
}
RegCloseKey(hRegKey);
return bRes;
}