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.
 
 
 
 
 
 

405 lines
12 KiB

#include "precomp.h"
static void testURLHelper(LPCTSTR pcszUrl);
static void setProxyDlgHelper(HWND hDlg, LPCTSTR pcszProxy, DWORD dwIdName, DWORD dwIdPort,
BOOL fDef80);
static void getProxyDlgHelper(HWND hDlg, LPTSTR pszProxy, DWORD dwIdName, DWORD dwIdPort);
static void showBitmapHelper(HWND hControl, LPCTSTR pcszFileName, int nBitmapId, PHANDLE pBitmap);
static BOOL copyAnimBmpHelper(HWND hDlg, LPTSTR pszBmp, LPCTSTR pcszWorkDir,
LPCTSTR pcszNameStr, LPCTSTR pcszPathStr, LPCTSTR pcszInsFile);
static BOOL copyLogoBmpHelper(HWND hDlg, LPTSTR pszBmp, LPCTSTR pcszLogoStr,
LPCTSTR pcszWorkDir, LPCTSTR pcszInsFile);
static BOOL copyWallPaperHelper(HWND hDlg, LPCTSTR pcszWallPaper, UINT nBitmapId,
LPCTSTR pcszWorkDir, LPCTSTR pcszInsFile, BOOL fCopy);
void WINAPI TestURLA(LPCSTR pcszUrl)
{
USES_CONVERSION;
testURLHelper(A2CT(pcszUrl));
}
void WINAPI TestURLW(LPCWSTR pcwszUrl)
{
USES_CONVERSION;
testURLHelper(W2CT(pcwszUrl));
}
void WINAPI SetProxyDlgA(HWND hDlg, LPCSTR pcszProxy, DWORD dwIdName, DWORD dwIdPort, BOOL fDef80)
{
USES_CONVERSION;
setProxyDlgHelper(hDlg, A2CT(pcszProxy), dwIdName, dwIdPort, fDef80);
}
void WINAPI SetProxyDlgW(HWND hDlg, LPCWSTR pcwszProxy, DWORD dwIdName, DWORD dwIdPort, BOOL fDef80)
{
USES_CONVERSION;
setProxyDlgHelper(hDlg, W2CT(pcwszProxy), dwIdName, dwIdPort, fDef80);
}
void WINAPI GetProxyDlgA(HWND hDlg, LPSTR pszProxy, DWORD dwIdName, DWORD dwIdPort)
{
TCHAR szProxyBuf[MAX_PATH];
USES_CONVERSION;
getProxyDlgHelper(hDlg, szProxyBuf, dwIdName, dwIdPort);
T2Abux(szProxyBuf, pszProxy);
}
void WINAPI GetProxyDlgW(HWND hDlg, LPWSTR pwszProxy, DWORD dwIdName, DWORD dwIdPort)
{
TCHAR szProxyBuf[MAX_PATH];
USES_CONVERSION;
getProxyDlgHelper(hDlg, szProxyBuf, dwIdName, dwIdPort);
T2Wbux(szProxyBuf, pwszProxy);
}
HPALETTE WINAPI BuildPalette(HDC hdc)
{
DWORD adw[257];
int i,n;
n = GetDIBColorTable(hdc, 0, 256, (LPRGBQUAD)&adw[1]);
for(i = 1; i < n; i++)
{
adw[i] = RGB(GetBValue(adw[i]),GetGValue(adw[i]),GetRValue(adw[i]));
}
adw[0] = MAKELONG(0x300, n);
return CreatePalette((LPLOGPALETTE)&adw[0]);
}
void WINAPI ShowBitmapA(HWND hControl, LPCSTR pcszFileName, int nBitmapId, PHANDLE pBitmap)
{
USES_CONVERSION;
showBitmapHelper(hControl, A2CT(pcszFileName), nBitmapId, pBitmap);
}
void WINAPI ShowBitmapW(HWND hControl, LPCWSTR pcwszFileName, int nBitmapId, PHANDLE pBitmap)
{
USES_CONVERSION;
showBitmapHelper(hControl, W2CT(pcwszFileName), nBitmapId, pBitmap);
}
BOOL WINAPI CopyAnimBmpA(HWND hDlg, LPSTR pszBmp, LPCSTR pcszWorkDir, LPCSTR pcszNameStr,
LPCSTR pcszPathStr, LPCSTR pcszInsFile)
{
TCHAR szBmpBuf[MAX_PATH];
BOOL fRet;
USES_CONVERSION;
A2Tbux(pszBmp, szBmpBuf);
fRet = copyAnimBmpHelper(hDlg, szBmpBuf, A2CT(pcszWorkDir), A2CT(pcszNameStr),
A2CT(pcszPathStr), A2CT(pcszInsFile));
T2Abux(szBmpBuf, pszBmp);
return fRet;
}
BOOL WINAPI CopyAnimBmpW(HWND hDlg, LPWSTR pwszBmp, LPCWSTR pcwszWorkDir, LPCWSTR pcwszNameStr,
LPCWSTR pcwszPathStr, LPCWSTR pcwszInsFile)
{
TCHAR szBmpBuf[MAX_PATH];
BOOL fRet;
USES_CONVERSION;
W2Tbux(pwszBmp, szBmpBuf);
fRet = copyAnimBmpHelper(hDlg, szBmpBuf, W2CT(pcwszWorkDir), W2CT(pcwszNameStr),
W2CT(pcwszPathStr), W2CT(pcwszInsFile));
T2Wbux(szBmpBuf, pwszBmp);
return fRet;
}
BOOL WINAPI CopyLogoBmpA(HWND hDlg, LPSTR pszBmp, LPCSTR pcszLogoStr,
LPCSTR pcszWorkDir, LPCSTR pcszInsFile)
{
TCHAR szBmpBuf[MAX_PATH];
BOOL fRet;
USES_CONVERSION;
A2Tbux(pszBmp, szBmpBuf);
fRet = copyLogoBmpHelper(hDlg, szBmpBuf, A2CT(pcszLogoStr), A2CT(pcszWorkDir),
A2CT(pcszInsFile));
T2Abux(szBmpBuf, pszBmp);
return fRet;
}
BOOL WINAPI CopyLogoBmpW(HWND hDlg, LPWSTR pwszBmp, LPCWSTR pcwszLogoStr,
LPCWSTR pcwszWorkDir, LPCWSTR pcwszInsFile)
{
TCHAR szBmpBuf[MAX_PATH];
BOOL fRet;
USES_CONVERSION;
W2Tbux(pwszBmp, szBmpBuf);
fRet = copyLogoBmpHelper(hDlg, szBmpBuf, W2CT(pcwszLogoStr), W2CT(pcwszWorkDir),
W2CT(pcwszInsFile));
T2Wbux(szBmpBuf, pwszBmp);
return fRet;
}
BOOL WINAPI CopyWallPaperA(HWND hDlg, LPCSTR pcszWallPaper, UINT nBitmapId,
LPCSTR pcszWorkDir, LPCSTR pcszInsFile, BOOL fCopy)
{
USES_CONVERSION;
return copyWallPaperHelper(hDlg, A2CT(pcszWallPaper), nBitmapId, A2CT(pcszWorkDir),
A2CT(pcszInsFile), fCopy);
}
BOOL WINAPI CopyWallPaperW(HWND hDlg, LPCWSTR pcwszWallPaper, UINT nBitmapId,
LPCWSTR pcwszWorkDir, LPCWSTR pcwszInsFile, BOOL fCopy)
{
USES_CONVERSION;
return copyWallPaperHelper(hDlg, W2CT(pcwszWallPaper), nBitmapId, W2CT(pcwszWorkDir),
W2CT(pcwszInsFile), fCopy);
}
static void testURLHelper(LPCTSTR pcszUrl)
{
TCHAR szCommand[MAX_PATH];
DWORD cbSize;
SHELLEXECUTEINFO shInfo;
if(ISNULL(pcszUrl))
return;
// launch iexplore
*szCommand = TEXT('\0');
cbSize = sizeof(szCommand);
SHGetValue(HKEY_LOCAL_MACHINE, TEXT("Software\\Microsoft\\Windows\\CurrentVersion\\App Paths\\IEXPLORE.EXE"),
TEXT(""), NULL, (LPVOID) szCommand, &cbSize);
ZeroMemory(&shInfo, sizeof(shInfo));
shInfo.cbSize = sizeof(shInfo);
shInfo.lpVerb = TEXT("open");
if (*szCommand)
{
shInfo.lpFile = szCommand;
shInfo.lpParameters = pcszUrl;
}
else
shInfo.lpFile = pcszUrl; // this will launch the program that's registered for "http"
shInfo.nShow = SW_SHOWNORMAL;
ShellExecuteEx(&shInfo);
}
static void setProxyDlgHelper(HWND hDlg, LPCTSTR pcszProxy, DWORD dwIdName, DWORD dwIdPort,
BOOL fDef80)
{
TCHAR szProxName[MAX_PATH];
LPTSTR pProxPort;
StrCpy(szProxName, pcszProxy);
pProxPort = StrRChr(szProxName, NULL, TEXT(':'));
if(pProxPort && isdigit(*(pProxPort + 1)))
{
*pProxPort = TEXT('\0');
pProxPort++;
}
else if(fDef80) pProxPort = TEXT("80");
else pProxPort = TEXT("");
SetDlgItemText(hDlg, dwIdName, szProxName);
SetDlgItemText(hDlg, dwIdPort, pProxPort);
}
static void getProxyDlgHelper(HWND hDlg, LPTSTR pszProxy, DWORD dwIdName, DWORD dwIdPort)
{
TCHAR szProxPort[16];
LPTSTR pProxPort;
BOOL fPortinprox = FALSE;
GetDlgItemText(hDlg, dwIdName, pszProxy, MAX_PATH - 10);
// this number needs to say in synch with the em_limittext's in the dlgproc's in
// wizard and snapin
GetDlgItemText(hDlg, dwIdPort, szProxPort, 6);
pProxPort = StrRChr(pszProxy, NULL, TEXT(':'));
if (pProxPort && isdigit(*(pProxPort + 1))) fPortinprox = TRUE;
if (!fPortinprox && StrLen(szProxPort) && StrLen(pszProxy))
{
StrCat(pszProxy, TEXT(":"));
StrCat(pszProxy, szProxPort);
}
}
static void showBitmapHelper(HWND hControl, LPCTSTR pcszFileName, int nBitmapId, PHANDLE pBitmap)
{
BITMAP bmImage;
HANDLE hImage = NULL;
static HPALETTE hPalette = 0;
HDC hDCMain;
HDC hDCBitmap;
RECT rect;
if(hControl == NULL)
{
if(hPalette)
{
DeleteObject(hPalette);
hPalette = 0;
}
return;
}
if(PathFileExists(pcszFileName) || nBitmapId)
{
if(nBitmapId)
{
hImage = LoadImage(g_hInst, MAKEINTRESOURCE(nBitmapId), IMAGE_BITMAP, 0, 0,
LR_CREATEDIBSECTION);
}
else
{
hImage = LoadImage(NULL, pcszFileName, IMAGE_BITMAP, 0, 0,
LR_LOADFROMFILE | LR_CREATEDIBSECTION);
}
if(hImage)
{
if(*pBitmap)
{
DeleteObject(*pBitmap);
*pBitmap = NULL;
}
*pBitmap = hImage;
}
}
else
hImage = *pBitmap;
if(hImage)
{
GetObject(hImage, sizeof(bmImage), &bmImage);
hDCMain = GetDC(hControl);
hDCBitmap = CreateCompatibleDC(hDCMain);
SelectObject(hDCBitmap, hImage);
if(hPalette == 0)
hPalette = BuildPalette(hDCBitmap);
SelectPalette(hDCMain, hPalette, FALSE);
RealizePalette(hDCMain);
GetClientRect(hControl, &rect);
BitBlt(hDCMain, 0, 0, rect.right, rect.bottom, hDCBitmap, 0, 0, SRCCOPY);
DeleteDC(hDCBitmap);
ReleaseDC(hControl, hDCMain);
}
}
static BOOL copyAnimBmpHelper(HWND hDlg, LPTSTR pszBmp, LPCTSTR pcszWorkDir,
LPCTSTR pcszNameStr, LPCTSTR pcszPathStr, LPCTSTR pcszInsFile)
{
TCHAR szTemp[MAX_PATH];
BOOL fBrandBmps = (IsDlgButtonChecked(hDlg, IDC_ANIMBITMAP) == BST_CHECKED);
// delete the old file in the working dir
if (fBrandBmps &&
InsGetString(IS_ANIMATION, pcszNameStr, szTemp, countof(szTemp), pcszInsFile) &&
ISNONNULL(szTemp))
DeleteFileInDir(PathFindFileName(szTemp), pcszWorkDir);
if (fBrandBmps && ISNONNULL(pszBmp))
CopyFileToDir(pszBmp, pcszWorkDir);
InsWriteString(IS_ANIMATION, pcszNameStr, PathFindFileName(pszBmp), pcszInsFile,
fBrandBmps, NULL, INSIO_TRISTATE | INSIO_PATH);
InsWriteString(IS_ANIMATION, pcszPathStr, pszBmp, pcszInsFile,
fBrandBmps, NULL, INSIO_TRISTATE | INSIO_PATH);
return TRUE;
}
static BOOL copyLogoBmpHelper(HWND hDlg, LPTSTR pszBmp, LPCTSTR pcszLogoStr,
LPCTSTR pcszWorkDir, LPCTSTR pcszInsFile)
{
TCHAR szTemp[MAX_PATH];
BOOL fBrandBmps = (IsDlgButtonChecked(hDlg, IDC_BITMAPCHECK) == BST_CHECKED);
// delete the old bitmap in the working dir
if (fBrandBmps &&
InsGetString(pcszLogoStr, TEXT("Name"), szTemp, countof(szTemp), pcszInsFile) &&
ISNONNULL(szTemp))
DeleteFileInDir(PathFindFileName(szTemp), pcszWorkDir);
if (fBrandBmps && ISNONNULL(pszBmp))
CopyFileToDir(pszBmp, pcszWorkDir);
InsWriteString(pcszLogoStr, TEXT("Name"), PathFindFileName(pszBmp), pcszInsFile,
fBrandBmps, NULL, INSIO_TRISTATE | INSIO_PATH);
InsWriteString(pcszLogoStr, TEXT("Path"), pszBmp, pcszInsFile,
fBrandBmps, NULL, INSIO_TRISTATE | INSIO_PATH);
return TRUE;
}
static BOOL copyWallPaperHelper(HWND hDlg, LPCTSTR pcszWallPaper, UINT nBitmapId,
LPCTSTR pcszWorkDir, LPCTSTR pcszInsFile, BOOL fCopy)
{
TCHAR szDest[MAX_PATH];
USES_CONVERSION;
//clear the old data from the section
WritePrivateProfileString(CUSTWALLPPR, NULL, NULL, pcszInsFile);
if(fCopy)
{
if (!CheckField(hDlg, nBitmapId, FC_FILE | FC_EXISTS))
return FALSE;
WritePrivateProfileString( DESKTOP_OBJ_SECT, WLPPRPATH, pcszWallPaper, pcszInsFile );
//delete old files from the working dir
PathRemovePath(pcszWorkDir);
CreateDirectory(pcszWorkDir, NULL);
//copy new files to the working dir
if(ISNONNULL(pcszWallPaper))
{
WritePrivateProfileString( DESKTOP_OBJ_SECT, OPTION, TEXT("1"), pcszInsFile );
CopyFileToDir(pcszWallPaper, pcszWorkDir);
WritePrivateProfileString( CUSTWALLPPR, NUMFILES, TEXT("1"), pcszInsFile);
WritePrivateProfileString( CUSTWALLPPR, TEXT("file0"), PathFindFileName(pcszWallPaper), pcszInsFile);
if(StrCmp(PathFindExtension(pcszWallPaper), TEXT(".htm")) == 0)
CopyHtmlImgs(pcszWallPaper, pcszWorkDir, CUSTWALLPPR, pcszInsFile);
}
else
WritePrivateProfileString( DESKTOP_OBJ_SECT, OPTION, TEXT("0"), pcszInsFile );
}
else //delete
{
//delete old files from the desktop dir ( if the files were saved )
PathCombine(szDest, pcszWorkDir, PathFindFileName(pcszWallPaper));
if(PathFileExists(szDest))
{
if(StrCmp(PathFindExtension(szDest), TEXT(".htm")) == 0)
DeleteHtmlImgs(pcszWallPaper, pcszWorkDir, NULL, NULL);
DeleteFile(szDest);
}
}
return TRUE;
}