STDAPI DllUnregisterServer (VOID) { HRESULT hResult = S_OK; LRESULT lResult = NOERROR; HKEY hKey = NULL; TCHAR szClsid[MAX_PATH] = TEXT(""); TCHAR szSubKey[MAX_PATH] = TEXT(""); // // Load some necessary string values // LoadString (hDllInstance, IDS_CLSID, szClsid, MAX_PATH); // // Delete the key HKCR\CLSID\{CLSID}\InprocServer32 // wsprintf (szSubKey, TEXT("CLSID\\%s\\InprocServer32"), szClsid); lResult = RegDeleteKey (HKEY_CLASSES_ROOT, szSubKey); if (lResult != NOERROR) { hResult = SELFREG_E_CLASS; } // // Delete the key HKCR\CLSID\{CLSID} // wsprintf (szSubKey, TEXT("CLSID\\%s"), szClsid); lResult = RegDeleteKey (HKEY_CLASSES_ROOT, szSubKey); if (lResult != NOERROR) { hResult = SELFREG_E_CLASS; } // // Delete the key HKCR\Folder\shellex\ColumnHandlers\{CLSID} // LoadString (hDllInstance, IDS_REGKEY_COLUMNPROVIDER, szSubKey, MAX_PATH); StrCatBuff (szSubKey, TEXT("\\"), ARRAYSIZE(szSubKey)); StrCatBuff (szSubKey, szClsid, ARRAYSIZE(szSubKey)); lResult = RegDeleteKey (HKEY_CLASSES_ROOT, szSubKey); if (lResult != NOERROR) { hResult = SELFREG_E_CLASS; } return hResult; }
PTSTR WINAPI PrepPath( PTSTR pszPath ) { // Appending a semicolon to the strings not only make their joining a bit // easier, but it also ensures that when determining if a path already // exists, the search will not be affected by subpath matches StrTrim(pszPath, TEXT(" \t;")); StrCatBuff(pszPath, TEXT(";"), CCHMAX_BUFFER); return(pszPath); }
static HSATELLITE PAL_GetSatelliteResource() { WCHAR szSatellitePath[MAX_PATH+1]; WCHAR* pwzFileName; lstrcpyW(szSatellitePath, g_FusionDllPath); pwzFileName = PathFindFileName(szSatellitePath); ASSERT(pwzFileName); *pwzFileName = '\0'; StrCatBuff(szSatellitePath, L"fusion.satellite", MAX_PATH); return PAL_LoadSatelliteResourceW(szSatellitePath); }
UINT_PTR CALLBACK FindReplaceHookProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) { LPFINDREPLACE pFr ; TCHAR szMsg[75] ; TCHAR szTmp[20] ; int i ; TCHAR szDefString[] = TEXT("Default String ") ; switch(msg) { case WM_INITDIALOG: pFr = (LPFINDREPLACE) lParam ; if (pFr->lCustData != 0L) { wsprintf(szMsg, TEXT("FINDREPLACE->lCustData is: %ld"), pFr->lCustData) ; MessageBox(hwnd, szMsg, TEXT("lCustData Sent!"), MB_OK | MB_APPLMODAL) ; } SetWindowText(hwnd, TEXT("Find Hook Proc Dialog")) ; if (GetDlgItem(hwnd, ID_DEFSTRINGS)) { for (i=0; i<5; i++) { lstrcpyn(szMsg, szDefString, ARRAYSIZE(szMsg)) ; wsprintf(szTmp, TEXT("Number %d"), i+1) ; StrCatBuff(szMsg, szTmp, ARRAYSIZE(szTmp)) ; SendDlgItemMessage(hwnd, ID_DEFSTRINGS, LB_ADDSTRING, (WPARAM) 0, (LONG_PTR) (LPTSTR) szMsg) ; } } return 1 ; break ; /* use the WM_CTLCOLOR* messages to change the color of the Open dialog */ case WM_CTLCOLORDLG: if (!hBrushDlg) hBrushDlg = GetStockObject(LTGRAY_BRUSH) ; return (LRESULT) hBrushDlg; break ; case WM_CTLCOLORBTN: SetBkMode((HDC) wParam, TRANSPARENT) ; //sets background color //for push and check box //buttons... if (!hBrushButton) hBrushButton = GetStockObject(LTGRAY_BRUSH) ; return (LRESULT) hBrushButton ; break ; case WM_CTLCOLORSTATIC: SetTextColor((HDC) wParam, RGB(0x00, 0xff, 0x00)) ; //green SetBkMode((HDC) wParam, TRANSPARENT) ; //transparent text if (!hBrushDlg) hBrushDlg = GetStockObject(LTGRAY_BRUSH) ; return (LRESULT) hBrushDlg; break ; default: break ; } return 0 ; //send msg to the common dialog code }
HRESULT CDebugLog::Init(IApplicationContext *pAppCtx, LPCWSTR pwzAsmName) { HRESULT hr = S_OK; LPWSTR wzAppName = NULL; if (!pwzAsmName) { hr = E_INVALIDARG; goto Exit; } hr = SetAsmName(pwzAsmName); if (FAILED(hr)) { goto Exit; } // Get the executable name hr = ::AppCtxGetWrapper(pAppCtx, ACTAG_APP_NAME, &wzAppName); if (FAILED(hr)) { goto Exit; } if (wzAppName && lstrlenW(wzAppName)) { _wzEXEName = WSTRDupDynamic(wzAppName); if (!_wzEXEName) { hr = E_OUTOFMEMORY; goto Exit; } } else { LPWSTR wzFileName; // Didn't find EXE name in appctx. Use the .EXE name. wzFileName = PathFindFileName(g_wzEXEPath); ASSERT(wzFileName); _wzEXEName = WSTRDupDynamic(wzFileName); if (!_wzEXEName) { hr = E_OUTOFMEMORY; goto Exit; } } // Log path if (!PAL_FetchConfigurationString(TRUE, REG_VAL_FUSION_LOG_PATH, _szLogPath, MAX_PATH)) { // fallback to default if (!PAL_GetUserConfigurationDirectory(_szLogPath, MAX_PATH)) { hr = HRESULT_FROM_WIN32(GetLastError()); goto Exit; } StrCatBuff(_szLogPath, L"\\FusionLogs", MAX_PATH); } PathRemoveBackslashW(_szLogPath); Exit: SAFEDELETEARRAY(wzAppName); return hr; }
__forceinline UINT WINAPI EntryMain( UINT argc, PTSTR *argv, PBUFFER pBuffer ) { UINT uRetCode = 1; HKEY hKey = NULL; if (argc != 3 || (StrCmpI(argv[1], TEXT("pre")) && StrCmpI(argv[1], TEXT("post"))) || argv[2][0] == 0) { MessageBox( NULL, TEXT("Usage:\naddpath pre \"path\"\naddpath post \"path\""), TEXT("Usage Error"), MB_OK | MB_ICONWARNING ); return(~0); } if ( RegOpenKeyEx(HKEY_LOCAL_MACHINE, REGSTR_ENV, 0, KEY_QUERY_VALUE | KEY_SET_VALUE, &hKey) == ERROR_SUCCESS && hKey != NULL ) { DWORD cbBuffer = sizeof(pBuffer->szOld); DWORD dwType; StrCpyN(pBuffer->szNew, argv[2], CCHMAX_BUFFER); if ( RegQueryValueEx(hKey, TEXT("Path"), NULL, &dwType, (PBYTE)pBuffer->szOld, &cbBuffer) == ERROR_SUCCESS && cbBuffer >= 2 && (dwType == REG_SZ || dwType == REG_EXPAND_SZ) && StrStrI(PrepPath(pBuffer->szOld), PrepPath(pBuffer->szNew)) == NULL ) { PTSTR pszHead, pszTail; if (StrCmpI(argv[1], TEXT("pre")) == 0) { pszHead = pBuffer->szNew; pszTail = pBuffer->szOld; } else { pszHead = pBuffer->szOld; pszTail = pBuffer->szNew; } StrCatBuff(pszHead, pszTail, CCHMAX_BUFFER); StrTrim(pszHead, TEXT(";")); cbBuffer = (lstrlen(pszHead) + 1) * sizeof(TCHAR); if (RegSetValueEx(hKey, TEXT("Path"), 0, dwType, (PBYTE)pszHead, cbBuffer) == ERROR_SUCCESS) { SendMessageTimeout( HWND_BROADCAST, WM_SETTINGCHANGE, 0, (LPARAM)TEXT("Environment"), SMTO_ABORTIFHUNG, 5000, NULL ); uRetCode = 0; } else { uRetCode = 2; } } RegCloseKey(hKey); } return(uRetCode); }
// --------------------------------------------------------------------------- // CEnumCache::GetNextAssemblyDir // --------------------------------------------------------------------------- HRESULT CEnumCache::GetNextAssemblyDir(CTransCache* pOutRecord) { HRESULT hr = S_FALSE; DWORD dwCmpResult = 0; BOOL fIsMatch = FALSE; BOOL fFound = FALSE; WIN32_FIND_DATA FindFileData; WCHAR wzFullSearchPath[MAX_PATH+1]; DWORD dwAttr=0; WCHAR wzFullPath[MAX_PATH+1]; DWORD dwCacheType=0; if( !pOutRecord ) { hr = E_INVALIDARG; goto exit; } if(_fAllDone) { hr = S_FALSE; goto exit; } ASSERT(lstrlenW(_wzParentDir)); if(_hAsmDir == INVALID_HANDLE_VALUE) { if( (lstrlenW(_wzCachePath) + lstrlenW(_wzParentDir) + lstrlenW(g_szFindAllMask) + 4) >= MAX_PATH) { hr = HRESULT_FROM_WIN32(FUSION_E_INVALID_NAME); goto exit; } StrCpy(wzFullSearchPath, _wzCachePath); PathAddBackslash(wzFullSearchPath); StrCat(wzFullSearchPath, _wzParentDir); dwAttr = GetFileAttributes(wzFullSearchPath); if((dwAttr == (DWORD) -1) || !(dwAttr & FILE_ATTRIBUTE_DIRECTORY )) { hr = S_FALSE; goto exit; } StrCat(wzFullSearchPath, g_szFindAllMask); _hAsmDir = FindFirstFile(wzFullSearchPath, &FindFileData); if(_hAsmDir == INVALID_HANDLE_VALUE) { hr = FusionpHresultFromLastError(); goto exit; } fFound = TRUE; } else { if(FindNextFile(_hAsmDir, &FindFileData)) fFound = TRUE; } do { if(!fFound) break; if (!StrCmp(FindFileData.cFileName, L".")) continue; if (!StrCmp(FindFileData.cFileName, L"..")) continue; if (!(FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)) continue; hr = ParseDirName ( pOutRecord, _wzParentDir, FindFileData.cFileName ); if(hr != S_OK) { pOutRecord->CleanInfo(pOutRecord->_pInfo, TRUE); continue; } if( (lstrlenW(_wzCachePath) + lstrlenW(_wzParentDir) + lstrlenW(FindFileData.cFileName) + 4) >= MAX_PATH) { hr = HRESULT_FROM_WIN32(FUSION_E_INVALID_NAME); goto exit; } StrCpy(wzFullPath, _wzCachePath); PathAddBackslash(wzFullPath); StrCat(wzFullPath, _wzParentDir); PathAddBackslash(wzFullPath); StrCat(wzFullPath, FindFileData.cFileName); dwCacheType = _pQry->GetCacheType(); hr = GetFusionInfo( pOutRecord, wzFullPath); if((hr != S_OK) && (dwCacheType != ASM_CACHE_GAC) && !_bShowAll) { pOutRecord->CleanInfo(pOutRecord->_pInfo, TRUE); continue; } PathAddBackslash(wzFullPath); DWORD dwLen = 0; if(dwCacheType & ASM_CACHE_DOWNLOAD) { if(!pOutRecord->_pInfo->pwzName) { if(_bShowAll) goto Done; else continue; } StrCatBuff(wzFullPath, pOutRecord->_pInfo->pwzName, MAX_PATH); } else { StrCatBuff(wzFullPath, _wzParentDir, MAX_PATH); } dwLen = lstrlenW(wzFullPath); StrCatBuff(wzFullPath, g_szDotDLL, MAX_PATH); if(((dwCacheType & ASM_CACHE_DOWNLOAD) || (dwCacheType & ASM_CACHE_ZAP) ) && (GetFileAttributes(wzFullPath) == (DWORD) -1) ) { // there is no AsmName.dll look for AsmName.exe if( (dwLen + lstrlenW(g_szDotEXE)) >= MAX_PATH) { hr = HRESULT_FROM_WIN32(FUSION_E_INVALID_NAME); goto exit; } StrCpy(wzFullPath+dwLen, g_szDotEXE); } if(!_bShowAll) { fIsMatch = _pQry->IsMatch(pOutRecord, _dwCmpMask, &dwCmpResult); if(!fIsMatch) { pOutRecord->CleanInfo(pOutRecord->_pInfo, TRUE); continue; } } Done : SAFEDELETEARRAY(pOutRecord->_pInfo->pwzPath); pOutRecord->_pInfo->pwzPath = WSTRDupDynamic(wzFullPath); hr = S_OK; goto exit; }while(FindNextFile(_hAsmDir, &FindFileData)); // while if( GetLastError() != ERROR_NO_MORE_FILES) { hr = FusionpHresultFromLastError(); goto exit; } hr = S_FALSE; FindClose(_hAsmDir); _hAsmDir = INVALID_HANDLE_VALUE; if(_hParentDir == INVALID_HANDLE_VALUE) _fAllDone = TRUE; exit : return hr; }
STDAPI DllRegisterServer (VOID) { TCHAR szModuleName[MAX_PATH]; HRESULT hResult = S_OK; TCHAR szBuffer[MAX_PATH+10] = TEXT(""); TCHAR szClsid[MAX_PATH] = TEXT(""); TCHAR szSubKey[MAX_PATH] = TEXT(""); TCHAR szColumnProvider[MAX_PATH] = TEXT(""); TCHAR szDescription[MAX_PATH] = TEXT(""); SECURITY_ATTRIBUTES SA; SA.nLength = sizeof(SECURITY_ATTRIBUTES); SA.bInheritHandle = TRUE; WCHAR *pwszSD=L"D:(A;OICI;GA;;;SY)(A;OICI;GA;;;BA)(A;OICI;GA;;;CO)(A;OICI;GRGWGX;;;IU)"; // // Load some necessary string values // // // Initialize the security attributes structure // if (ConvertStringSecurityDescriptorToSecurityDescriptor(pwszSD, SDDL_REVISION_1, &(SA.lpSecurityDescriptor), NULL)) { LoadString (hDllInstance, IDS_CLSID, szClsid, MAX_PATH); LoadString (hDllInstance, IDS_DESCRIPTION, szDescription, MAX_PATH); LoadString (hDllInstance, IDS_REGKEY_COLUMNPROVIDER, szColumnProvider, MAX_PATH); // // Get the name of this module // GetModuleFileName (hDllInstance, szModuleName, MAX_PATH); // // Register the component under HKCR\CLSID // HKEY hKey = NULL; DWORD dwDisposition = 0; LRESULT lResult = 0; wsprintf (szSubKey, TEXT("CLSID\\%s"), szClsid); lResult = RegCreateKeyEx (HKEY_CLASSES_ROOT, szSubKey, 0, NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, &SA, &hKey, &dwDisposition); if (lResult == NOERROR) { lResult = RegSetValueEx (hKey, TEXT(""), 0, REG_SZ, (LPBYTE) szDescription, GetStringByteSize(szDescription)); if (lResult != NOERROR) hResult = SELFREG_E_CLASS; RegCloseKey (hKey); hKey = NULL; } else { hResult = SELFREG_E_CLASS; } // // Register component information under HKCR\CLSID\{CLSID} // StrCatBuff (szSubKey, TEXT("\\InprocServer32"), ARRAYSIZE(szSubKey)); lResult = RegCreateKeyEx (HKEY_CLASSES_ROOT, szSubKey, 0, NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, &SA, &hKey, &dwDisposition); if (lResult == NOERROR) { lstrcpyn (szBuffer, TEXT("Apartment"), ARRAYSIZE(szBuffer)); lResult = RegSetValueEx (hKey, TEXT("ThreadingModel"), 0, REG_SZ, (LPBYTE) szBuffer, GetStringByteSize (szBuffer)); if (lResult != NOERROR) hResult = SELFREG_E_CLASS; lResult = RegSetValueEx (hKey, TEXT(""), 0, REG_SZ, (LPBYTE) szModuleName, GetStringByteSize(szModuleName)); if (lResult != NOERROR) hResult = SELFREG_E_CLASS; RegCloseKey (hKey); hKey = NULL; } else { hResult = SELFREG_E_CLASS; } // // Register the component as a column provider extension under // HKCR\Folder\shellex\ColumnHandlers // wsprintf (szSubKey, TEXT("%s\\%s"), szColumnProvider, szClsid); lResult = RegCreateKeyEx (HKEY_CLASSES_ROOT, szSubKey, 0, NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, &SA, &hKey, &dwDisposition); if (lResult != NOERROR) { hResult = SELFREG_E_CLASS; } LocalFree(SA.lpSecurityDescriptor); } else { hResult = E_FAIL; } return hResult; }