|
|
#include "stdafx.h"
#include <ole2.h>
#include <shlobj.h>
#include <iis64.h>
#include "log.h"
#include "shellutl.h"
extern OCMANAGER_ROUTINES gHelperRoutines;
HRESULT MySetLinkInfoTip(LPCTSTR lpszLink, LPCTSTR lpszDescription) { HRESULT hres; IShellLink* pShellLink;
CoInitialize(NULL);
hres = CoCreateInstance( CLSID_ShellLink,NULL,CLSCTX_INPROC_SERVER,IID_IShellLink,(LPVOID*)&pShellLink); if (SUCCEEDED(hres)) { IPersistFile* pPersistFile; hres = pShellLink->QueryInterface(IID_IPersistFile, (LPVOID*)&pPersistFile); if (SUCCEEDED(hres)) { WCHAR wsz[_MAX_PATH];
// Ensure that the string is WCHAR.
#if defined(UNICODE) || defined(_UNICODE)
_tcscpy(wsz, lpszLink); #else
MultiByteToWideChar( CP_ACP, 0, lpszLink, -1, wsz, _MAX_PATH); #endif
hres = pPersistFile->Load(wsz, STGM_READ); if (SUCCEEDED(hres)) { hres = pShellLink->Resolve(NULL, SLR_ANY_MATCH | SLR_NO_UI); if (SUCCEEDED(hres)) { if (lpszDescription) { pShellLink->SetDescription(lpszDescription); // Save the link by calling IPersistFile::Save.
hres = pPersistFile->Save(wsz, TRUE); } } else { iisDebugOut((LOG_TYPE_WARN, _T("MySetLinkInfoTip(): pShellLink->Resolve FAILED\n"))); } } else { iisDebugOut((LOG_TYPE_WARN, _T("MySetLinkInfoTip(): pPersistFile->Load FAILED\n"))); } pPersistFile->Release(); } else { iisDebugOut((LOG_TYPE_WARN, _T("MySetLinkInfoTip(): QueryInterface FAILED\n"))); } pShellLink->Release(); } else { iisDebugOut((LOG_TYPE_WARN, _T("MySetLinkInfoTip(): CoCreateInstance FAILED\n"))); } CoUninitialize();
iisDebugOutSafeParams((LOG_TYPE_TRACE_WIN32_API, _T("MySetLinkInfoTip(): Link=%1!s!, Desc=%2!s!\n"), lpszLink, lpszDescription)); return hres; }
HRESULT MyQueryLink(LPCTSTR lpszLink, LPTSTR lpszProgram, LPTSTR lpszArgs, LPTSTR lpszDir, LPTSTR lpszIconPath, int *piIconIndex) { HRESULT hres; IShellLink* pShellLink; WIN32_FIND_DATA wfd;
CoInitialize(NULL);
hres = CoCreateInstance( CLSID_ShellLink,NULL,CLSCTX_INPROC_SERVER,IID_IShellLink,(LPVOID*)&pShellLink); if (SUCCEEDED(hres)) { IPersistFile* pPersistFile; hres = pShellLink->QueryInterface(IID_IPersistFile, (LPVOID*)&pPersistFile); if (SUCCEEDED(hres)) { WCHAR wsz[_MAX_PATH];
// Ensure that the string is WCHAR.
#if defined(UNICODE) || defined(_UNICODE)
_tcscpy(wsz, lpszLink); #else
MultiByteToWideChar( CP_ACP, 0, lpszLink, -1, wsz, _MAX_PATH); #endif
hres = pPersistFile->Load(wsz, STGM_READ); if (SUCCEEDED(hres)) { hres = pShellLink->Resolve(NULL, SLR_ANY_MATCH | SLR_NO_UI); if (SUCCEEDED(hres)) { pShellLink->GetPath(lpszProgram, _MAX_PATH, (WIN32_FIND_DATA *)&wfd, SLGP_SHORTPATH); pShellLink->GetArguments(lpszArgs, _MAX_PATH); pShellLink->GetWorkingDirectory(lpszDir, _MAX_PATH); pShellLink->GetIconLocation(lpszIconPath, _MAX_PATH, piIconIndex); } else { iisDebugOut((LOG_TYPE_ERROR, _T("MyQueryLink(): pShellLink->Resolve FAILED\n"))); } } else { iisDebugOut((LOG_TYPE_WARN, _T("MyQueryLink(): pPersistFile->Load FAILED\n"))); } pPersistFile->Release(); } else { iisDebugOut((LOG_TYPE_ERROR, _T("MyQueryLink(): QueryInterface FAILED\n"))); } pShellLink->Release(); } else { iisDebugOut((LOG_TYPE_ERROR, _T("MyQueryLink(): CoCreateInstance FAILED\n"))); } CoUninitialize(); iisDebugOutSafeParams((LOG_TYPE_TRACE_WIN32_API, _T("MyQueryLink(): Program=%1!s!, Args=%2!s!, WorkDir=%3!s!, IconPath=%4!s!, IconIndex=%5!d!\n"), lpszProgram, lpszArgs, lpszDir, lpszIconPath, *piIconIndex)); return hres; }
HRESULT MyCreateLink(LPCTSTR lpszProgram, LPCTSTR lpszArgs, LPCTSTR lpszLink, LPCTSTR lpszDir, LPCTSTR lpszIconPath, int iIconIndex, LPCTSTR lpszDescription) { HRESULT hres; IShellLink* pShellLink;
CoInitialize(NULL);
//CoInitialize must be called before this
// Get a pointer to the IShellLink interface.
hres = CoCreateInstance( CLSID_ShellLink,NULL,CLSCTX_INPROC_SERVER,IID_IShellLink,(LPVOID*)&pShellLink); if (SUCCEEDED(hres)) { IPersistFile* pPersistFile;
// Set the path to the shortcut target, and add the description.
pShellLink->SetPath(lpszProgram); pShellLink->SetArguments(lpszArgs); pShellLink->SetWorkingDirectory(lpszDir); pShellLink->SetIconLocation(lpszIconPath, iIconIndex); if (lpszDescription) { pShellLink->SetDescription(lpszDescription); } // Query IShellLink for the IPersistFile interface for saving the
// shortcut in persistent storage.
hres = pShellLink->QueryInterface(IID_IPersistFile, (LPVOID*)&pPersistFile); if (SUCCEEDED(hres)) { WCHAR wsz[_MAX_PATH];
#if defined(UNICODE) || defined(_UNICODE)
_tcscpy(wsz, lpszLink); #else
// Ensure that the string is WCHAR.
MultiByteToWideChar( CP_ACP,0,lpszLink,-1,wsz,_MAX_PATH); #endif
// Save the link by calling IPersistFile::Save.
hres = pPersistFile->Save(wsz, TRUE); if (!SUCCEEDED(hres)) { iisDebugOut((LOG_TYPE_ERROR, _T("MyCreateLink(): pPersistFile->Save FAILED\n"))); }
pPersistFile->Release(); } else { iisDebugOut((LOG_TYPE_ERROR, _T("MyCreateLink(): pShellLink->QueryInterface FAILED\n"))); } pShellLink->Release(); } else { iisDebugOut((LOG_TYPE_ERROR, _T("MyCreateLink(): CoCreateInstance FAILED\n"))); } CoUninitialize(); return hres; }
BOOL MyDeleteLink(LPTSTR lpszShortcut) { TCHAR szFile[_MAX_PATH]; SHFILEOPSTRUCT fos;
ZeroMemory(szFile, sizeof(szFile)); _tcscpy(szFile, lpszShortcut);
iisDebugOut((LOG_TYPE_TRACE_WIN32_API, _T("MyDeleteLink(): %s.\n"), szFile));
if (IsFileExist(szFile)) { ZeroMemory(&fos, sizeof(fos)); fos.hwnd = NULL; fos.wFunc = FO_DELETE; fos.pFrom = szFile; fos.fFlags = FOF_SILENT | FOF_NOCONFIRMATION; int iTemp = SHFileOperation(&fos); if (iTemp != 0) { iisDebugOut((LOG_TYPE_ERROR, _T("MyDeleteLink(): SHFileOperation FAILED\n"))); } }
return TRUE; }
void MyMoveLink(LPCTSTR lpszItemDesc, LPCTSTR lpszOldGroup, LPCTSTR lpszNewGroup) { TCHAR szOldLink[_MAX_PATH], szNewLink[_MAX_PATH]; TCHAR szProgram[_MAX_PATH], szArgs[_MAX_PATH], szDir[_MAX_PATH], szIconPath[_MAX_PATH]; int iIconIndex;
MyGetGroupPath(lpszOldGroup, szOldLink); _tcscat(szOldLink, _T("\\")); _tcscat(szOldLink, lpszItemDesc); _tcscat(szOldLink, _T(".lnk"));
MyGetGroupPath(lpszNewGroup, szNewLink); if (!IsFileExist(szNewLink)) MyAddGroup(lpszNewGroup); _tcscat(szNewLink, _T("\\")); _tcscat(szNewLink, lpszItemDesc); _tcscat(szNewLink, _T(".lnk"));
MyQueryLink(szOldLink, szProgram, szArgs, szDir, szIconPath, &iIconIndex); MyDeleteLink(szOldLink); MyCreateLink(szProgram, szArgs, szNewLink, szDir, szIconPath, iIconIndex, NULL);
return; }
void MyGetSendToPath(LPTSTR szPath) { LPITEMIDLIST pidlSendTo; HRESULT hRes = NOERROR;
iisDebugOutSafeParams((LOG_TYPE_TRACE_WIN32_API, _T("SendTo path=%1!s!\n"), szPath));
hRes = SHGetSpecialFolderLocation(NULL, CSIDL_SENDTO, &pidlSendTo); if (hRes != NOERROR) {iisDebugOut((LOG_TYPE_ERROR, _T("MyGetSendToPath() SHGetSpecialFolderLocation (CSIDL_SENDTO) FAILED. hresult=0x%x\n"), hRes));}
int iTemp = SHGetPathFromIDList(pidlSendTo, szPath); if (iTemp != TRUE) {iisDebugOut((LOG_TYPE_ERROR, _T("MyGetSendToPath() SHGetPathFromIDList FAILED\n")));}
return; }
void MyGetDeskTopPath(LPTSTR szPath) { LPITEMIDLIST pidlDeskTop; HRESULT hRes = NOERROR;
#ifndef _CHICAGO_
hRes = SHGetSpecialFolderLocation(NULL, CSIDL_COMMON_DESKTOPDIRECTORY, &pidlDeskTop); #else
hRes = SHGetSpecialFolderLocation(NULL, CSIDL_DESKTOPDIRECTORY, &pidlDeskTop); #endif
if (hRes != NOERROR) {iisDebugOut((LOG_TYPE_ERROR, _T("MyGetDeskTopPath() SHGetSpecialFolderLocation (CSIDL_COMMON_DESKTOPDIRECTORY) FAILED. hresult=0x%x\n"), hRes));}
int iTemp = SHGetPathFromIDList(pidlDeskTop, szPath); if (iTemp != TRUE) {iisDebugOut((LOG_TYPE_ERROR, _T("MyGetDeskTopPath() SHGetPathFromIDList FAILED\n")));}
return; }
void MyGetGroupPath(LPCTSTR szGroupName, LPTSTR szPath) { int nLen = 0; LPITEMIDLIST pidlPrograms; HRESULT hRes = NOERROR;
#ifndef _CHICAGO_
hRes = SHGetSpecialFolderLocation(NULL, CSIDL_COMMON_PROGRAMS, &pidlPrograms); if (hRes != NOERROR) {iisDebugOut((LOG_TYPE_ERROR, _T("MyGetGroupPath() SHGetSpecialFolderLocation (CSIDL_COMMON_PROGRAMS) FAILED. hresult=0x%x\n"), hRes));} #else
hRes = SHGetSpecialFolderLocation(NULL, CSIDL_PROGRAMS, &pidlPrograms); if (hRes != NOERROR) {iisDebugOut((LOG_TYPE_ERROR, _T("MyGetGroupPath() SHGetSpecialFolderLocation (CSIDL_PROGRAMS) FAILED. hresult=0x%x\n"), hRes));} #endif
int iTemp = SHGetPathFromIDList(pidlPrograms, szPath); if (iTemp != TRUE) {iisDebugOut((LOG_TYPE_ERROR, _T("MyGetGroupPath() SHGetPathFromIDList FAILED\n")));}
nLen = _tcslen(szPath); if (szGroupName) { if (szPath[nLen-1] != _T('\\')){_tcscat(szPath, _T("\\"));} _tcscat(szPath, szGroupName); }
iisDebugOut((LOG_TYPE_TRACE_WIN32_API, _T("MyGetGroupPath(%s). Returns %s.\n"), szGroupName, szPath)); return; }
BOOL MyAddGroup(LPCTSTR szGroupName) { CString csPath; TCHAR szPath[_MAX_PATH];
MyGetGroupPath(szGroupName, szPath); csPath = szPath; if (CreateLayerDirectory(csPath) != TRUE) { iisDebugOut((LOG_TYPE_ERROR, _T("MyAddGroup() CreateLayerDirectory FAILED\n"))); } SHChangeNotify(SHCNE_MKDIR, SHCNF_PATH, szPath, 0); return TRUE; }
BOOL MyIsGroupEmpty(LPCTSTR szGroupName) { TCHAR szPath[_MAX_PATH]; TCHAR szFile[_MAX_PATH]; WIN32_FIND_DATA FindData; HANDLE hFind; BOOL bFindFile = TRUE; BOOL fReturn = TRUE;
MyGetGroupPath(szGroupName, szPath);
_tcscpy(szFile, szPath); _tcscat(szFile, _T("\\*.*"));
hFind = FindFirstFile(szFile, &FindData); while((INVALID_HANDLE_VALUE != hFind) && bFindFile) { if(*(FindData.cFileName) != _T('.')) { fReturn = FALSE; break; }
//find the next file
bFindFile = FindNextFile(hFind, &FindData); } FindClose(hFind);
return fReturn; }
BOOL MyDeleteGroup(LPCTSTR szGroupName) { BOOL fResult; TCHAR szPath[_MAX_PATH]; TCHAR szFile[_MAX_PATH]; SHFILEOPSTRUCT fos; WIN32_FIND_DATA FindData; HANDLE hFind; BOOL bFindFile = TRUE;
MyGetGroupPath(szGroupName, szPath);
//we can't remove a directory that is not empty, so we need to empty this one
_tcscpy(szFile, szPath); _tcscat(szFile, _T("\\*.*"));
ZeroMemory(&fos, sizeof(fos)); fos.hwnd = NULL; fos.wFunc = FO_DELETE; fos.fFlags = FOF_SILENT | FOF_NOCONFIRMATION;
hFind = FindFirstFile(szFile, &FindData); while((INVALID_HANDLE_VALUE != hFind) && bFindFile) { if(*(FindData.cFileName) != _T('.')) { //copy the path and file name to our temp buffer
memset( (PVOID)szFile, 0, sizeof(szFile)); _tcscpy(szFile, szPath); _tcscat(szFile, _T("\\")); _tcscat(szFile, FindData.cFileName); //add a second NULL because SHFileOperation is looking for this
_tcscat(szFile, _T("\0"));
//delete the file
fos.pFrom = szFile; int iTemp = SHFileOperation(&fos); if (iTemp != 0) {iisDebugOut((LOG_TYPE_ERROR, _T("MyDeleteGroup(): SHFileOperation FAILED\n")));} }
//find the next file
bFindFile = FindNextFile(hFind, &FindData); } FindClose(hFind);
fResult = RemoveDirectory(szPath); if (fResult) { SHChangeNotify(SHCNE_RMDIR, SHCNF_PATH, szPath, 0); } return(fResult); }
void MyAddSendToItem(LPCTSTR szItemDesc, LPCTSTR szProgram, LPCTSTR szArgs, LPCTSTR szDir) { TCHAR szPath[_MAX_PATH];
MyGetSendToPath(szPath);
_tcscat(szPath, _T("\\")); _tcscat(szPath, szItemDesc); _tcscat(szPath, _T(".lnk"));
MyCreateLink(szProgram, szArgs, szPath, szDir, NULL, 0, NULL); }
void MyDeleteLinkWildcard(TCHAR *szDir, TCHAR *szFileName) { WIN32_FIND_DATA FindFileData; HANDLE hFile = INVALID_HANDLE_VALUE; TCHAR szFileToBeDeleted[_MAX_PATH];
_stprintf(szFileToBeDeleted, _T("%s\\%s"), szDir, szFileName);
hFile = FindFirstFile(szFileToBeDeleted, &FindFileData); if (hFile != INVALID_HANDLE_VALUE) { do { if ( _tcsicmp(FindFileData.cFileName, _T(".")) != 0 && _tcsicmp(FindFileData.cFileName, _T("..")) != 0 ) { if (FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) { // this is a directory, so let's skip it
} else { // this is a file, so let's Delete it.
TCHAR szTempFileName[_MAX_PATH]; _stprintf(szTempFileName, _T("%s\\%s"), szDir, FindFileData.cFileName); // set to normal attributes, so we can delete it
SetFileAttributes(szTempFileName, FILE_ATTRIBUTE_NORMAL); // delete it, hopefully
InetDeleteFile(szTempFileName); } }
// get the next file
if ( !FindNextFile(hFile, &FindFileData) ) { FindClose(hFile); break; } } while (TRUE); }
return; }
void MyDeleteSendToItem(LPCTSTR szAppName) { TCHAR szPath[_MAX_PATH]; TCHAR szPath2[_MAX_PATH];
/*
MyGetSendToPath(szPath); _tcscat(szPath, _T("\\")); _tcscat(szPath, szAppName); _tcscat(szPath, _T(".lnk")); MyDeleteLink(szPath); */
MyGetSendToPath(szPath); _tcscpy(szPath2, szAppName); _tcscat(szPath2, _T(".lnk"));
MyDeleteLinkWildcard(szPath, szPath2); }
void MyAddDeskTopItem(LPCTSTR szItemDesc, LPCTSTR szProgram, LPCTSTR szArgs, LPCTSTR szDir, LPCTSTR szIconPath, int iIconIndex) { TCHAR szPath[_MAX_PATH];
MyGetDeskTopPath(szPath);
_tcscat(szPath, _T("\\")); _tcscat(szPath, szItemDesc); _tcscat(szPath, _T(".lnk"));
MyCreateLink(szProgram, szArgs, szPath, szDir, szIconPath, iIconIndex, NULL); }
HRESULT GetLNKProgramRunInfo(LPCTSTR lpszLink, LPTSTR lpszProgram) { HRESULT hres; int iDoUninit = FALSE; IShellLink* pShellLink = NULL; WIN32_FIND_DATA wfd;
if (SUCCEEDED(CoInitialize(NULL))) {iDoUninit = TRUE;}
hres = CoCreateInstance( CLSID_ShellLink,NULL,CLSCTX_INPROC_SERVER,IID_IShellLink,(LPVOID*)&pShellLink); if (SUCCEEDED(hres)) { IPersistFile* pPersistFile = NULL; hres = pShellLink->QueryInterface(IID_IPersistFile, (LPVOID*)&pPersistFile); if (SUCCEEDED(hres)) { WCHAR wsz[_MAX_PATH];
// Ensure that the string is WCHAR.
#if defined(UNICODE) || defined(_UNICODE)
_tcscpy(wsz, lpszLink); #else
MultiByteToWideChar( CP_ACP, 0, lpszLink, -1, wsz, _MAX_PATH); #endif
hres = pPersistFile->Load(wsz, STGM_READ); if (SUCCEEDED(hres)) { hres = pShellLink->Resolve(NULL, SLR_ANY_MATCH | SLR_NO_UI); if (SUCCEEDED(hres)) { pShellLink->GetPath(lpszProgram, _MAX_PATH, (WIN32_FIND_DATA *)&wfd, SLGP_SHORTPATH); } } if (pPersistFile) {pPersistFile->Release();pPersistFile = NULL;} } if (pShellLink) {pShellLink->Release();pShellLink = NULL;} }
if (TRUE == iDoUninit) {CoUninitialize();} return hres; }
BOOL IsFileNameInDelimitedList(LPTSTR szCommaDelimList,LPTSTR szExeNameWithoutPath) { BOOL bReturn = FALSE; TCHAR *token = NULL; TCHAR szCopyOfDataBecauseStrTokIsLame[_MAX_PATH]; _tcscpy(szCopyOfDataBecauseStrTokIsLame,szCommaDelimList);
// breakup the szCommaDelimList into strings and see if it contains the szExeNameWithoutPath string
token = _tcstok(szCopyOfDataBecauseStrTokIsLame, _T(",;\t\n\r")); while(token != NULL) { // check if it matches our .exe name.
if (0 == _tcsicmp(token,szExeNameWithoutPath)) { return TRUE; } // Get next token
token = _tcstok(NULL, _T(",;\t\n\r")); }
return FALSE; }
int LNKSearchAndDestroyRecursive(LPTSTR szDirToLookThru, LPTSTR szSemiColonDelmitedListOfExeNames, BOOL bDeleteItsDirToo) { int iReturn = FALSE; WIN32_FIND_DATA FindFileData; HANDLE hFile = INVALID_HANDLE_VALUE; TCHAR szFilePath[_MAX_PATH]; TCHAR szFilename_ext_only[_MAX_EXT];
DWORD retCode = GetFileAttributes(szDirToLookThru);
if (retCode == 0xFFFFFFFF || !(retCode & FILE_ATTRIBUTE_DIRECTORY)) { return FALSE; } _tcscpy(szFilePath, szDirToLookThru); AddPath(szFilePath, _T("*.*"));
iisDebugOut((LOG_TYPE_TRACE, _T("LNKSearchAndDestroyRecursive:%s,%s,%d\n"),szDirToLookThru, szSemiColonDelmitedListOfExeNames, bDeleteItsDirToo));
hFile = FindFirstFile(szFilePath, &FindFileData); if (hFile != INVALID_HANDLE_VALUE) { do { if ( _tcsicmp(FindFileData.cFileName, _T(".")) != 0 && _tcsicmp(FindFileData.cFileName, _T("..")) != 0 ) { if (FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) { TCHAR szFullNewDirToLookInto[_MAX_EXT]; _tcscpy(szFullNewDirToLookInto, szDirToLookThru); AddPath(szFullNewDirToLookInto,FindFileData.cFileName);
// this is a directory, so let's go into this
// directory recursively
LNKSearchAndDestroyRecursive(szFullNewDirToLookInto,szSemiColonDelmitedListOfExeNames,bDeleteItsDirToo); } else { // check if this file is a .lnk file
// if it is then let's open it and
// see if it points to our .exe we're looking for...
// get only the filename's extention
_tsplitpath( FindFileData.cFileName, NULL, NULL, NULL, szFilename_ext_only);
// check for .lnk
if (0 == _tcsicmp(szFilename_ext_only, _T(".lnk"))) { TCHAR szFilename_only[_MAX_FNAME]; TCHAR szFullPathAndFilename[_MAX_PATH]; TCHAR szTemporaryString[_MAX_PATH];
// this is a .lnk,
// open it and check the .exe..
_tcscpy(szFullPathAndFilename,szDirToLookThru); AddPath(szFullPathAndFilename,FindFileData.cFileName); _tcscpy(szTemporaryString,_T(""));
if (SUCCEEDED(GetLNKProgramRunInfo(szFullPathAndFilename, szTemporaryString))) { _tsplitpath( szTemporaryString, NULL, NULL, szFilename_only, szFilename_ext_only); _tcscpy(szTemporaryString, szFilename_only); _tcscat(szTemporaryString, szFilename_ext_only);
//iisDebugOut((LOG_TYPE_TRACE, _T("open:%s,%s\n"),szFullPathAndFilename,szTemporaryString));
// see if it is on our list of comma delimited names...
if (TRUE == IsFileNameInDelimitedList(szSemiColonDelmitedListOfExeNames,szTemporaryString)) { SetFileAttributes(szFullPathAndFilename, FILE_ATTRIBUTE_NORMAL); // delete it, hopefully
InetDeleteFile(szFullPathAndFilename);
// DELETE the file that references this .exe
if (bDeleteItsDirToo) { // Get it's dirname and delete that too...
RecRemoveEmptyDir(szDirToLookThru); }
iReturn = TRUE; } } } } }
// get the next file
if ( !FindNextFile(hFile, &FindFileData) ) { FindClose(hFile); break; } } while (TRUE); }
return iReturn; }
void MyDeleteDeskTopItem(LPCTSTR szAppName) { TCHAR szPath[_MAX_PATH]; TCHAR szPath2[_MAX_PATH];
/*
MyGetDeskTopPath(szPath); _tcscat(szPath, _T("\\")); _tcscat(szPath, szAppName); _tcscat(szPath, _T(".lnk")); //if this is an upgrade, then the directories could have changed.
//see if we need to delete the old one...
MyDeleteLink(szPath); */
MyGetDeskTopPath(szPath); _tcscpy(szPath2, szAppName); _tcscat(szPath2, _T(".lnk"));
MyDeleteLinkWildcard(szPath, szPath2); }
void DeleteFromGroup(LPCTSTR szGroupName, LPTSTR szApplicationExec) { TCHAR szPath[_MAX_PATH]; // Get path to that group
MyGetGroupPath(szGroupName, szPath);
LNKSearchAndDestroyRecursive(szPath, szApplicationExec, FALSE); }
void MyDeleteDeskTopItem2(LPTSTR szSemiColonDelmitedListOfExeNames, BOOL bDeleteItsDirToo) { TCHAR szPath[_MAX_PATH]; MyGetDeskTopPath(szPath); LNKSearchAndDestroyRecursive(szPath, szSemiColonDelmitedListOfExeNames, bDeleteItsDirToo); }
// boydm -------------------------------------------------------------------------------------------
// Adds a web URL shortcut file . The URL is passed in and is put into the file in the form of a INI file.
BOOL AddURLShortcutItem( LPCTSTR szGroupName, LPCTSTR szItemDesc, LPCTSTR szURL ) { iisDebugOutSafeParams((LOG_TYPE_TRACE_WIN32_API, _T("AddURLShortcutItem(): %1!s!,%2!s!,%3!s!\n"), szGroupName, szItemDesc, szURL)); // this first part of getting the paths is copied from MyAddItem below
TCHAR szPath[_MAX_PATH];
MyGetGroupPath(szGroupName, szPath); if (!IsFileExist(szPath)) { MyAddGroup(szGroupName); } _tcscat(szPath, _T("\\")); _tcscat(szPath, szItemDesc); _tcscat(szPath, _T(".url"));
// now use the private profile routines to easily create and fill in the content for the .url file
return WritePrivateProfileString( _T("InternetShortcut"), // pointer to section name
_T("URL"), // pointer to key name
szURL, // pointer to string to add
szPath // pointer to initialization filename
); }
void MyAddItem(LPCTSTR szGroupName, LPCTSTR szItemDesc, LPCTSTR szProgram, LPCTSTR szArgs, LPCTSTR szDir, LPCTSTR lpszIconPath) { TCHAR szPath[_MAX_PATH];
MyGetGroupPath(szGroupName, szPath); if (!IsFileExist(szPath)) MyAddGroup(szGroupName);
_tcscat(szPath, _T("\\")); _tcscat(szPath, szItemDesc); _tcscat(szPath, _T(".lnk"));
if (lpszIconPath && IsFileExist(lpszIconPath)) { MyCreateLink(szProgram, szArgs, szPath, szDir, lpszIconPath, 0, NULL); } else { MyCreateLink(szProgram, szArgs, szPath, szDir, NULL, 0, NULL); } }
void MyAddItemInfoTip(LPCTSTR szGroupName, LPCTSTR szAppName, LPCTSTR szDescription) { TCHAR szPath[_MAX_PATH];
MyGetGroupPath(szGroupName, szPath); _tcscat(szPath, _T("\\")); _tcscat(szPath, szAppName); _tcscat(szPath, _T(".lnk"));
MySetLinkInfoTip(szPath, szDescription); }
void MyDeleteItem(LPCTSTR szGroupName, LPCTSTR szAppName) { TCHAR szPath[_MAX_PATH]; TCHAR szPath2[_MAX_PATH];
/*
MyGetGroupPath(szGroupName, szPath); _tcscat(szPath, _T("\\")); _tcscat(szPath, szAppName); _tcscat(szPath, _T(".lnk")); MyDeleteLink(szPath);
// try to remove items added by AddURLShortcutItem()
MyGetGroupPath(szGroupName, szPath); _tcscat(szPath, _T("\\")); _tcscat(szPath2, szAppName); _tcscat(szPath2, _T(".url")); MyDeleteLink(szPath); */
MyGetGroupPath(szGroupName, szPath); _tcscpy(szPath2, szAppName); _tcscat(szPath2, _T(".lnk")); MyDeleteLinkWildcard(szPath, szPath2);
MyGetGroupPath(szGroupName, szPath); _tcscpy(szPath2, szAppName); _tcscat(szPath2, _T(".url")); MyDeleteLinkWildcard(szPath, szPath2);
if (MyIsGroupEmpty(szGroupName)) {MyDeleteGroup(szGroupName);} }
//
// Used when the strings are passed in.
//
int MyMessageBox(HWND hWnd, LPCTSTR lpszTheMessage, UINT style) { int iReturn = TRUE; CString csTitle;
MyLoadString(IDS_IIS_ERROR_MSGBOXTITLE,csTitle);
// call MyMessageBox which will log to the log file and
// check the global variable to see if we can even display the popup
iReturn = MyMessageBox(hWnd, lpszTheMessage, csTitle, style | MB_SETFOREGROUND); return iReturn; }
//
// Used when the strings are passed in.
//
int MyMessageBox(HWND hWnd, LPCTSTR lpszTheMessage, LPCTSTR lpszTheTitle, UINT style) { int iReturn = IDOK;
// make sure it goes to iisdebugoutput
iisDebugOutSafeParams((LOG_TYPE_TRACE, _T("MyMessageBox: Title:%1!s!, Msg:%2!s!\n"), lpszTheTitle, lpszTheMessage));
if (style & MB_ABORTRETRYIGNORE) { iReturn = IDIGNORE; } // Check global variable to see if we can even display the popup!
if (g_pTheApp->m_bAllowMessageBoxPopups) { // Suppress the message if unattened or remove all
// Who cares the user can't do anything about it anyway?
// no use upsetting them, we do log to the OCM though
//
if (! g_pTheApp->m_fUnattended || g_pTheApp->m_dwSetupMode != SETUPMODE_REMOVEALL) { iReturn = MessageBox(hWnd, lpszTheMessage, lpszTheTitle, style | MB_SETFOREGROUND); } } return iReturn; }
//
// Used when the string and an error code passed in.
//
int MyMessageBox(HWND hWnd, CString csTheMessage, HRESULT iTheErrorCode, UINT style) { SetErrorFlag(__FILE__, __LINE__);
int iReturn = TRUE; CString csMsg, csErrMsg;
csMsg = csTheMessage;
TCHAR pMsg[_MAX_PATH] = _T(""); HRESULT nNetErr = (HRESULT) iTheErrorCode; DWORD dwFormatReturn = 0; dwFormatReturn = FormatMessage( FORMAT_MESSAGE_FROM_SYSTEM,NULL, iTheErrorCode, MAKELANGID(LANG_NEUTRAL, SUBLANG_SYS_DEFAULT),pMsg, _MAX_PATH, NULL); if ( dwFormatReturn == 0) { if (nNetErr >= NERR_BASE) { HMODULE hDll = (HMODULE)LoadLibrary(_T("netmsg.dll")); if (hDll) { dwFormatReturn = FormatMessage( FORMAT_MESSAGE_FROM_HMODULE,hDll, iTheErrorCode, MAKELANGID(LANG_NEUTRAL, SUBLANG_SYS_DEFAULT),pMsg, _MAX_PATH, NULL); FreeLibrary(hDll); } } }
HandleSpecificErrors(iTheErrorCode, dwFormatReturn, csMsg, pMsg, &csErrMsg);
// Call MyMessageBox which will add title bar and log to log file
iReturn = MyMessageBox(hWnd, csErrMsg, style | MB_SETFOREGROUND);
// Log the eror message to OCM
if (gHelperRoutines.OcManagerContext) { if ( gHelperRoutines.ReportExternalError ) {gHelperRoutines.ReportExternalError(gHelperRoutines.OcManagerContext,_T("IIS"),NULL,(DWORD_PTR)(LPCTSTR)csErrMsg,ERRFLG_PREFORMATTED);} }
return iReturn; }
//
// Used when the String ID's are passed in.
//
int MyMessageBox(HWND hWnd, UINT iTheMessage, UINT style) { int iReturn = TRUE; CString csMsg;
MyLoadString(iTheMessage,csMsg);
// Call MyMessageBox which will add title bar and log to log file
iReturn = MyMessageBox(hWnd, csMsg, style | MB_SETFOREGROUND);
return iReturn; }
//
// Used when the String ID's are passed in.
// And the tthere is an error code which needs to get shown and
//
int MyMessageBox(HWND hWnd, UINT iTheMessage, int iTheErrorCode, UINT style) { SetErrorFlag(__FILE__, __LINE__);
int iReturn = TRUE; CString csMsg, csErrMsg;
MyLoadString(iTheMessage,csMsg);
TCHAR pMsg[_MAX_PATH] = _T(""); int nNetErr = (int)iTheErrorCode; DWORD dwFormatReturn = 0; dwFormatReturn = FormatMessage( FORMAT_MESSAGE_FROM_SYSTEM,NULL, iTheErrorCode, MAKELANGID(LANG_NEUTRAL, SUBLANG_SYS_DEFAULT),pMsg, _MAX_PATH, NULL); if ( dwFormatReturn == 0) { if (nNetErr >= NERR_BASE) { HMODULE hDll = (HMODULE)LoadLibrary(_T("netmsg.dll")); if (hDll) { dwFormatReturn = FormatMessage( FORMAT_MESSAGE_FROM_HMODULE,hDll, iTheErrorCode, MAKELANGID(LANG_NEUTRAL, SUBLANG_SYS_DEFAULT),pMsg, _MAX_PATH, NULL); FreeLibrary(hDll); } } }
HandleSpecificErrors(iTheErrorCode, dwFormatReturn, csMsg, pMsg, &csErrMsg);
// Call MyMessageBox which will add title bar and log to log file
iReturn = MyMessageBox(hWnd, csErrMsg, style | MB_SETFOREGROUND);
// Log the eror message to OCM
if (gHelperRoutines.OcManagerContext) { if ( gHelperRoutines.ReportExternalError ) {gHelperRoutines.ReportExternalError(gHelperRoutines.OcManagerContext,_T("IIS"),NULL,(DWORD_PTR)(LPCTSTR)csErrMsg,ERRFLG_PREFORMATTED);} }
return iReturn; }
int MyMessageBox(HWND hWnd, UINT iTheMessage, LPCTSTR lpszTheFileNameOrWhatever, UINT style) { int iReturn = TRUE; CString csMsgForSprintf, csMsg;
// Get the iTheMessage from the resouce file
// csMsgForSprintf should now look something like: "cannot find file %s".
MyLoadString(iTheMessage,csMsgForSprintf);
// now load the passed in filename or whatever.
// csMsg should now look like: "cannot find file Whatever";
csMsg.Format( csMsgForSprintf, lpszTheFileNameOrWhatever);
// Call MyMessageBox which will add title bar and log to log file
iReturn = MyMessageBox(hWnd, csMsg, style | MB_SETFOREGROUND);
return iReturn; }
int MyMessageBox(HWND hWnd, UINT iTheMessage, LPCTSTR lpszTheFileNameOrWhatever, int iTheErrorCode, UINT style) { SetErrorFlag(__FILE__, __LINE__);
int iReturn = TRUE; CString csMsgForSprintf, csMsg, csErrMsg;
// Get the iTheMessage from the resouce file
// csMsgForSprintf should now look something like: "cannot find file %s".
MyLoadString(iTheMessage,csMsgForSprintf);
// now load the passed in filename or whatever.
// csMsg should now look like: "cannot find file Whatever";
csMsg.Format( csMsgForSprintf, lpszTheFileNameOrWhatever);
TCHAR pMsg[_MAX_PATH] = _T(""); int nNetErr = (int)iTheErrorCode; DWORD dwFormatReturn = 0; dwFormatReturn = FormatMessage( FORMAT_MESSAGE_FROM_SYSTEM,NULL, iTheErrorCode, MAKELANGID(LANG_NEUTRAL, SUBLANG_SYS_DEFAULT),pMsg, _MAX_PATH, NULL); if ( dwFormatReturn == 0) { if (nNetErr >= NERR_BASE) { HMODULE hDll = (HMODULE)LoadLibrary(_T("netmsg.dll")); if (hDll) { dwFormatReturn = FormatMessage( FORMAT_MESSAGE_FROM_HMODULE,hDll, iTheErrorCode, MAKELANGID(LANG_NEUTRAL, SUBLANG_SYS_DEFAULT),pMsg, _MAX_PATH, NULL); FreeLibrary(hDll); } } }
HandleSpecificErrors(iTheErrorCode, dwFormatReturn, csMsg, pMsg, &csErrMsg);
// Call MyMessageBox which will add title bar and log to log file
iReturn = MyMessageBox(hWnd, csErrMsg, style | MB_SETFOREGROUND);
// Log the eror message to OCM
if (gHelperRoutines.OcManagerContext) { if ( gHelperRoutines.ReportExternalError ) {gHelperRoutines.ReportExternalError(gHelperRoutines.OcManagerContext,_T("IIS"),NULL,(DWORD_PTR)(LPCTSTR)csErrMsg,ERRFLG_PREFORMATTED);} }
return iReturn; }
int MyMessageBox(HWND hWnd, UINT iTheMessage, LPCTSTR lpszTheFileNameOrWhatever1, LPCTSTR lpszTheFileNameOrWhatever2, int iTheErrorCode, UINT style) { SetErrorFlag(__FILE__, __LINE__);
int iReturn = TRUE; CString csMsgForSprintf, csMsg, csErrMsg;
// Get the iTheMessage from the resouce file
// csMsgForSprintf should now look something like: "cannot find file %s %s".
MyLoadString(iTheMessage,csMsgForSprintf);
// now load the passed in filename or whatever.
// csMsg should now look like: "cannot find file Whatever1 Whatever2";
csMsg.Format( csMsgForSprintf, lpszTheFileNameOrWhatever1, lpszTheFileNameOrWhatever2);
TCHAR pMsg[_MAX_PATH] = _T(""); int nNetErr = (int)iTheErrorCode; DWORD dwFormatReturn = 0; dwFormatReturn = FormatMessage( FORMAT_MESSAGE_FROM_SYSTEM,NULL, iTheErrorCode, MAKELANGID(LANG_NEUTRAL, SUBLANG_SYS_DEFAULT),pMsg, _MAX_PATH, NULL); if ( dwFormatReturn == 0) { if (nNetErr >= NERR_BASE) { HMODULE hDll = (HMODULE)LoadLibrary(_T("netmsg.dll")); if (hDll) { dwFormatReturn = FormatMessage( FORMAT_MESSAGE_FROM_HMODULE,hDll, iTheErrorCode, MAKELANGID(LANG_NEUTRAL, SUBLANG_SYS_DEFAULT),pMsg, _MAX_PATH, NULL); FreeLibrary(hDll); } } }
HandleSpecificErrors(iTheErrorCode, dwFormatReturn, csMsg, pMsg, &csErrMsg);
// Call MyMessageBox which will add title bar and log to log file
iReturn = MyMessageBox(hWnd, csErrMsg, style | MB_SETFOREGROUND);
// Log the eror message to OCM
if (gHelperRoutines.OcManagerContext) { if ( gHelperRoutines.ReportExternalError ) {gHelperRoutines.ReportExternalError(gHelperRoutines.OcManagerContext,_T("IIS"),NULL,(DWORD_PTR)(LPCTSTR)csErrMsg,ERRFLG_PREFORMATTED);} }
return iReturn; }
int MyMessageBox(HWND hWnd, UINT iTheMessage, LPCTSTR lpszTheFileNameOrWhatever1, LPCTSTR lpszTheFileNameOrWhatever2, LPCTSTR lpszTheFileNameOrWhatever3, int iTheErrorCode, UINT style) { SetErrorFlag(__FILE__, __LINE__);
int iReturn = TRUE; CString csMsgForSprintf, csMsg, csErrMsg;
// Get the iTheMessage from the resouce file
// csMsgForSprintf should now look something like: "cannot find file %s %s".
MyLoadString(iTheMessage,csMsgForSprintf);
// now load the passed in filename or whatever.
// csMsg should now look like: "cannot find file Whatever1 Whatever2 Whatever3";
csMsg.Format( csMsgForSprintf, lpszTheFileNameOrWhatever1, lpszTheFileNameOrWhatever2, lpszTheFileNameOrWhatever3);
TCHAR pMsg[_MAX_PATH] = _T(""); int nNetErr = (int)iTheErrorCode; DWORD dwFormatReturn = 0; dwFormatReturn = FormatMessage( FORMAT_MESSAGE_FROM_SYSTEM,NULL, iTheErrorCode, MAKELANGID(LANG_NEUTRAL, SUBLANG_SYS_DEFAULT),pMsg, _MAX_PATH, NULL); if ( dwFormatReturn == 0) { if (nNetErr >= NERR_BASE) { HMODULE hDll = (HMODULE)LoadLibrary(_T("netmsg.dll")); if (hDll) { dwFormatReturn = FormatMessage( FORMAT_MESSAGE_FROM_HMODULE,hDll, iTheErrorCode, MAKELANGID(LANG_NEUTRAL, SUBLANG_SYS_DEFAULT),pMsg, _MAX_PATH, NULL); FreeLibrary(hDll); } } }
HandleSpecificErrors(iTheErrorCode, dwFormatReturn, csMsg, pMsg, &csErrMsg);
// Call MyMessageBox which will add title bar and log to log file
iReturn = MyMessageBox(hWnd, csErrMsg, style | MB_SETFOREGROUND);
// Log the eror message to OCM
if (gHelperRoutines.OcManagerContext) { if ( gHelperRoutines.ReportExternalError ) {gHelperRoutines.ReportExternalError(gHelperRoutines.OcManagerContext,_T("IIS"),NULL,(DWORD_PTR)(LPCTSTR)csErrMsg,ERRFLG_PREFORMATTED);} }
return iReturn; }
int MyMessageBoxArgs(HWND hWnd, TCHAR *pszfmt, ...) { int iReturn = TRUE; TCHAR tszString[1000]; va_list va; va_start(va, pszfmt); _vstprintf(tszString, pszfmt, va); va_end(va);
// Call MyMessageBox which will add title bar and log to log file
iReturn = MyMessageBox(hWnd, tszString, MB_OK | MB_SETFOREGROUND);
return iReturn; }
void GetErrorMsg(int errCode, LPCTSTR szExtraMsg) { SetErrorFlag(__FILE__, __LINE__);
TCHAR pMsg[_MAX_PATH];
FormatMessage( FORMAT_MESSAGE_FROM_SYSTEM,NULL, errCode, MAKELANGID(LANG_NEUTRAL, SUBLANG_SYS_DEFAULT),pMsg, _MAX_PATH, NULL); _tcscat(pMsg, szExtraMsg); MyMessageBox(NULL, pMsg, _T(""), MB_OK | MB_SETFOREGROUND);
return; }
void MyLoadString(int nID, CString &csResult) { TCHAR buf[MAX_STR_LEN];
if (LoadString((HINSTANCE) g_MyModuleHandle, nID, buf, MAX_STR_LEN)) csResult = buf;
return; }
|