windows-nt/Source/XPSP1/NT/base/ntsetup/oobe/msobcomm/ienews.cpp
2020-09-26 16:20:57 +08:00

189 lines
4.8 KiB
C++

//****************************************************************************
//
// Module: INETCFG.DLL
// File: ienews.c
// Content: This file contains all the functions that handle importing
// connection information.
// History:
// Sat 10-Mar-1996 23:50:40 -by- Mark MacLin [mmaclin]
// this code started its life as ixport.c in RNAUI.DLL
// my thanks to viroont
//
// Copyright (c) Microsoft Corporation 1991-1996
//
//****************************************************************************
#include "inetreg.h"
#include "obcomglb.h"
#pragma data_seg(".rdata")
#define REGSTR_PATH_IE_SERVICES REGSTR_PATH_IEXPLORER L"\\Services"
static const WCHAR cszRegPathIEServices[] = REGSTR_PATH_IE_SERVICES;
static const WCHAR cszRegValNNTPEnabled[] = L"NNTP_Enabled";
static const WCHAR cszRegValNNTPUseAuth[] = L"NNTP_Use_Auth";
static const WCHAR cszRegValNNTPServer[] = L"NNTP_Server";
static const WCHAR cszRegValNNTPMailName[] = L"NNTP_MailName";
static const WCHAR cszRegValNNTPMailAddress[] = L"NNTP_MailAddr";
static const WCHAR cszYes[] = L"yes";
static const WCHAR cszNo[] = L"no";
#pragma data_seg()
#define PCE_WWW_BASIC 0x13
WCHAR szNNTP_Resource[] = L"NNTP";
typedef DWORD (APIENTRY *PFNWNETGETCACHEDPASSWORD)(LPSTR, WORD, LPSTR, LPWORD,BYTE);
DWORD MyWNetGetCachedPassword(LPWSTR pbResource, WORD cbResource, LPWSTR pbPassword,
LPWORD pcchPassword, BYTE nType)
{
USES_CONVERSION;
HINSTANCE hInst = NULL;
FARPROC fp = NULL;
DWORD dwRet = 0;
hInst = LoadLibrary(L"MPR.DLL");
if (hInst)
{
fp = GetProcAddress(hInst, "WNetGetCachedPassword");
if (fp)
dwRet = ((PFNWNETGETCACHEDPASSWORD)fp) (W2A(pbResource), cbResource, W2A(pbPassword), pcchPassword, nType);
else
dwRet = GetLastError();
FreeLibrary(hInst);
hInst = NULL;
} else {
dwRet = GetLastError();
}
return dwRet;
}
typedef DWORD (APIENTRY *PFNWNETCACHEPASSWORD)(LPSTR, WORD, LPSTR, WORD,BYTE,UINT);
DWORD MyWNetCachePassword
(
LPWSTR szResource,
WORD cchResource,
LPWSTR szPassword,
WORD cchPassword,
BYTE nType,
UINT fnFlags
)
{
HINSTANCE hInst = NULL;
FARPROC fp = NULL;
DWORD dwRet = 0;
hInst = LoadLibrary(L"MPR.DLL");
if (hInst)
{
USES_CONVERSION;
fp = GetProcAddress(hInst, "WNetCachePassword");
if (fp)
dwRet = ((PFNWNETCACHEPASSWORD)fp)(W2A(szResource), cchResource, W2A(szPassword), cchPassword,nType,fnFlags);
else
dwRet = GetLastError();
FreeLibrary(hInst);
hInst = NULL;
fp = NULL;
} else {
dwRet = GetLastError();
}
return dwRet;
}
BOOL
SetAuthInfo( WCHAR *szUsername, WCHAR *szPassword)
{
int wnet_status;
WCHAR szUserInfo[256];
WORD cchUserInfo = MAX_CHARS_IN_BUFFER(szUserInfo);
if (wcschr(szUsername, L':')) {
return(FALSE);
}
lstrcpy( szUserInfo, szUsername );
lstrcat( szUserInfo, L":" );
lstrcat( szUserInfo, szUsername );
wnet_status = MyWNetCachePassword (szNNTP_Resource, (USHORT )lstrlen(szNNTP_Resource), szUserInfo, (USHORT)lstrlen( szUserInfo ), PCE_WWW_BASIC, 0);
return( wnet_status == WN_SUCCESS );
}
DWORD SetIEClientInfo(LPINETCLIENTINFO lpClientInfo)
{
HKEY hKey;
DWORD dwRet;
DWORD dwSize;
DWORD dwType;
dwRet = RegCreateKey(HKEY_CURRENT_USER, cszRegPathIEServices, &hKey);
if (ERROR_SUCCESS != dwRet)
{
return dwRet;
}
dwSize = max(sizeof(cszYes), sizeof(cszNo));
dwType = REG_SZ;
RegSetValueEx(
hKey,
cszRegValNNTPEnabled,
0L,
dwType,
(LPBYTE)(*lpClientInfo->szNNTPServer ? cszYes : cszNo),
dwSize);
dwSize = max(sizeof(cszYes), sizeof(cszNo));
dwType = REG_SZ;
RegSetValueEx(
hKey,
cszRegValNNTPUseAuth,
0L,
dwType,
(LPBYTE)((lpClientInfo->dwFlags & INETC_LOGONNEWS) ? cszYes : cszNo),
dwSize);
dwSize = sizeof(lpClientInfo->szEMailName);
dwType = REG_SZ;
RegSetValueEx(
hKey,
cszRegValNNTPMailName,
0L,
dwType,
(LPBYTE)lpClientInfo->szEMailName,
dwSize);
dwSize = sizeof(lpClientInfo->szEMailAddress);
dwType = REG_SZ;
RegSetValueEx(
hKey,
cszRegValNNTPMailAddress,
0L,
dwType,
(LPBYTE)lpClientInfo->szEMailAddress,
dwSize);
dwSize = sizeof(lpClientInfo->szNNTPServer);
dwType = REG_SZ;
RegSetValueEx(
hKey,
cszRegValNNTPServer,
0L,
dwType,
(LPBYTE)lpClientInfo->szNNTPServer,
dwSize);
RegCloseKey(hKey);
SetAuthInfo(lpClientInfo->szNNTPLogonName, lpClientInfo->szNNTPLogonPassword);
return ERROR_SUCCESS;
}