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.
 
 
 
 
 
 

142 lines
3.8 KiB

/*
* WAB stuff for S/Mime Test
*/
#include <windows.h>
#include <wab.h>
#include "smimetst.h"
#include "instring.h"
#include "wabstuff.h"
#include "dbgutil.h"
LPWABOPEN lpfnWABOpen = NULL;
const static TCHAR szWABOpen[] = TEXT("WABOpen");
LPWABOBJECT lpWABObject = NULL;
LPADRBOOK lpAdrBook = NULL;
HINSTANCE hInstWABDll = NULL;
//$$//////////////////////////////////////////////////////////////////////
//
// GetWABDllPath
//
//
//////////////////////////////////////////////////////////////////////////
void GetWABDllPath(LPTSTR szPath, ULONG cb)
{
DWORD dwType = 0;
ULONG cbData;
HKEY hKey = NULL;
TCHAR szPathT[MAX_PATH + 1];
if(szPath) {
*szPath = '\0';
// open the szWABDllPath key under
if (ERROR_SUCCESS == RegOpenKeyEx( HKEY_LOCAL_MACHINE,
WAB_DLL_PATH_KEY,
0, //reserved
KEY_READ,
&hKey))
{
cbData = sizeof(szPathT);
if (ERROR_SUCCESS == RegQueryValueEx( hKey,
"",
NULL,
&dwType,
(LPBYTE) szPathT,
&cbData))
{
if (dwType == REG_EXPAND_SZ)
cbData = ExpandEnvironmentStrings(szPathT, szPath, cb / sizeof(TCHAR));
else
{
if(GetFileAttributes(szPathT) != 0xFFFFFFFF)
lstrcpy(szPath, szPathT);
}
}
}
}
if(hKey)
RegCloseKey(hKey);
}
/***************************************************************************
Name : WABFreePadrlist
Purpose : Free an adrlist and it's property arrays
Parameters: lpBuffer = buffer to free
Returns : SCODE
Comment :
***************************************************************************/
void WABFreePadrlist(LPADRLIST lpAdrList) {
ULONG iEntry;
if (lpAdrList) {
for (iEntry = 0; iEntry < lpAdrList->cEntries; ++iEntry) {
if (lpAdrList->aEntries[iEntry].rgPropVals) {
WABFreeBuffer(lpAdrList->aEntries[iEntry].rgPropVals);
}
}
WABFreeBuffer(lpAdrList);
}
}
//$$//////////////////////////////////////////////////////////////////////
//
// LoadLibrary_WABDll()
//
// Since we are moving the WAB directory out of Windows\SYstem, we cant be
// sure it will be on the path. Hence we need to make sure that WABOpen will
// work - by loading the wab32.dll upfront
//
///////////////////////////////////////////////////////////////////////////
HINSTANCE LoadLibrary_WABDll(void)
{
IF_WIN32(LPTSTR lpszWABDll = TEXT("Wab32.dll");)
TCHAR szWABDllPath[MAX_PATH + 1];
HINSTANCE hinst = NULL;
GetWABDllPath(szWABDllPath, sizeof(szWABDllPath));
hinst = LoadLibrary((lstrlen(szWABDllPath)) ? szWABDllPath : lpszWABDll);
return hinst;
}
void LoadWAB(void) {
LPWABOPEN lpfnWABOpen = NULL;
if (! hInstWABDll) {
hInstWABDll = LoadLibrary_WABDll();
if (hInstWABDll)
lpfnWABOpen = (LPWABOPEN) GetProcAddress(hInstWABDll, szWABOpen);
if (lpfnWABOpen)
lpfnWABOpen(&lpAdrBook, &lpWABObject, NULL, 0);
}
}
void UnloadWAB(void) {
if (lpAdrBook) {
lpAdrBook->Release();
lpAdrBook = NULL;
lpWABObject->Release();
lpWABObject = NULL;
}
if (hInstWABDll) {
FreeLibrary(hInstWABDll);
hInstWABDll = NULL;
}
}