void CServiceModule::SetupAsLocalServer() { USES_CONVERSION; CRegKey keyClasses,key; LPOLESTR pCLSID; Uninstall(); if (keyClasses.Open(HKEY_CLASSES_ROOT, _T("CLSID")) != ERROR_SUCCESS) return; _ATL_OBJMAP_ENTRY* pEntry = m_pObjMap; while (pEntry->pclsid != NULL) { StringFromCLSID(*pEntry->pclsid, &pCLSID); CString csTemp = pCLSID; if (key.Open(keyClasses, (LPCTSTR)csTemp) == ERROR_SUCCESS) { TCHAR szModule[_MAX_PATH]; key.DeleteValue(_T("AppID")); key.DeleteValue(_T("_LocalServer32")); GetModuleFileName(GetModuleInstance(), szModule, _MAX_PATH); key.SetKeyValue(_T("LocalServer32"), szModule, _T("")); } pEntry++; } }
DWORD AddPropertyPageAdvanced(_In_ DI_FUNCTION InstallFunction, _In_ HDEVINFO hDeviceInfoSet, _In_ PSP_DEVINFO_DATA pDeviceInfoData) { SP_ADDPROPERTYPAGE_DATA addPropertyPageData; HPROPSHEETPAGE hPropSheetPage; PROPSHEETPAGE propSheetPage; PCOISANE_Data privateData; HANDLE hActCtx, hHeap; HINSTANCE hInstance; BOOL res; hActCtx = GetActivationContext(); hInstance = GetModuleInstance(); if (!hInstance) return ERROR_OUTOFMEMORY; hHeap = GetProcessHeap(); if (!hHeap) return ERROR_OUTOFMEMORY; ZeroMemory(&addPropertyPageData, sizeof(addPropertyPageData)); addPropertyPageData.ClassInstallHeader.cbSize = sizeof(addPropertyPageData.ClassInstallHeader); addPropertyPageData.ClassInstallHeader.InstallFunction = InstallFunction; res = SetupDiGetClassInstallParams(hDeviceInfoSet, pDeviceInfoData, &addPropertyPageData.ClassInstallHeader, sizeof(addPropertyPageData), NULL); if (!res) return GetLastError(); if (addPropertyPageData.NumDynamicPages >= MAX_INSTALLWIZARD_DYNAPAGES) return NO_ERROR; privateData = (PCOISANE_Data) HeapAlloc(hHeap, HEAP_ZERO_MEMORY, sizeof(COISANE_Data)); if (!privateData) return ERROR_OUTOFMEMORY; privateData->hHeap = hHeap; privateData->hInstance = hInstance; privateData->hDeviceInfoSet = hDeviceInfoSet; privateData->pDeviceInfoData = pDeviceInfoData; ZeroMemory(&propSheetPage, sizeof(propSheetPage)); propSheetPage.dwSize = sizeof(propSheetPage); propSheetPage.dwFlags = PSP_USECALLBACK; propSheetPage.hActCtx = hActCtx; propSheetPage.hInstance = hInstance; propSheetPage.pfnDlgProc = &DialogProcPropertyPageAdvanced; propSheetPage.pfnCallback = &PropSheetPageProcPropertyPageAdvanced; propSheetPage.pszTemplate = MAKEINTRESOURCE(IDD_PROPERTIES); propSheetPage.lParam = (LPARAM) privateData; hPropSheetPage = CreatePropertySheetPage(&propSheetPage); if (!hPropSheetPage) return GetLastError(); addPropertyPageData.DynamicPages[addPropertyPageData.NumDynamicPages++] = hPropSheetPage; res = SetupDiSetClassInstallParams(hDeviceInfoSet, pDeviceInfoData, &addPropertyPageData.ClassInstallHeader, sizeof(addPropertyPageData)); if (!res) return GetLastError(); return NO_ERROR; }
HRESULT WeaselIME::UnregisterUIClass() { if (!UnregisterClassW(GetUIClassName(), GetModuleInstance())) { DWORD dwErr = GetLastError(); return HRESULT_FROM_WIN32(dwErr); } return S_OK; }
HRESULT CComModule::UpdateRegistry(BOOL bRegTypeLib) { _ASSERTE(m_hInst != NULL); _ASSERTE(m_pObjMap != NULL); _ATL_OBJMAP_ENTRY* pEntry = m_pObjMap; while (pEntry->pclsid != NULL) { pEntry->UpdateRegistry(GetModuleInstance(), GetResourceInstance()); pEntry++; } HRESULT hRes = S_OK; #ifndef ATL_NOTYPEINFO if (bRegTypeLib) hRes = RegisterTypeLib(); #endif return hRes; }
HRESULT WeaselIME::RegisterUIClass() { WNDCLASSEX wc; wc.cbSize = sizeof(WNDCLASSEX); wc.style = CS_IME; wc.lpfnWndProc = WeaselIME::UIWndProc; wc.cbClsExtra = 0; wc.cbWndExtra = 2 * sizeof(LONG); wc.hInstance = GetModuleInstance(); wc.hCursor = NULL; wc.hIcon = NULL; wc.lpszMenuName = NULL; wc.lpszClassName = GetUIClassName(); wc.hbrBackground = NULL; wc.hIconSm = NULL; if (RegisterClassExW(&wc) == 0) { DWORD dwErr = GetLastError(); return HRESULT_FROM_WIN32(dwErr); } return S_OK; }
DWORD CreateInstallInfo(_In_ HANDLE hHeap, _Out_ PINSTALLERINFO pInstallerInfo, _Outptr_result_maybenull_ LPVOID *plpData) { TCHAR szModuleFileName[MAX_PATH + 1]; LPTSTR lpszSubBlock, lpszValue; LPWORD lpwLanguage; DWORD dwLen, dwHandle; size_t cbSubBlock; HMODULE hModule; UINT cbSize; HRESULT hr; BOOL res; if (!pInstallerInfo || !plpData) return ERROR_INVALID_PARAMETER; ZeroMemory(pInstallerInfo, sizeof(INSTALLERINFO)); *plpData = NULL; hModule = GetModuleInstance(); if (!hModule) return ERROR_OUTOFMEMORY; dwLen = GetModuleFileName(hModule, szModuleFileName, MAX_PATH); if (!dwLen) return GetLastError(); dwLen = GetFileVersionInfoSize(szModuleFileName, &dwHandle); if (!dwLen) return GetLastError(); *plpData = HeapAlloc(hHeap, HEAP_ZERO_MEMORY, dwLen); if (!*plpData) return ERROR_OUTOFMEMORY; LoadString(hModule, IDS_APPLICATION_ID, (LPWSTR) &pInstallerInfo->pApplicationId, 0); res = GetFileVersionInfo(szModuleFileName, dwHandle, dwLen, *plpData); if (res) { res = VerQueryValue(*plpData, TEXT("\\VarFileInfo\\Translation"), (LPVOID*) &lpwLanguage, &cbSize); if (res) { Trace(TEXT("Translation: %04x%04x (%d)"), lpwLanguage[0], lpwLanguage[1], cbSize); hr = StringCbAPrintf(hHeap, &lpszSubBlock, &cbSubBlock, TEXT("\\StringFileInfo\\%04x%04x\\ProductName"), lpwLanguage[0], lpwLanguage[1]); if (SUCCEEDED(hr)) { Trace(TEXT("SubBlock: %s (%d)"), lpszSubBlock, cbSubBlock); res = VerQueryValue(*plpData, lpszSubBlock, (LPVOID*) &lpszValue, &cbSize); if (res) { pInstallerInfo->pDisplayName = lpszValue; pInstallerInfo->pProductName = lpszValue; } else Trace(TEXT("VerQueryValue 2 failed: %08X"), GetLastError()); } else Trace(TEXT("StringCbAPrintf 1 failed: %08X"), hr); hr = StringCbAPrintf(hHeap, &lpszSubBlock, &cbSubBlock, TEXT("\\StringFileInfo\\%04x%04x\\CompanyName"), lpwLanguage[0], lpwLanguage[1]); if (SUCCEEDED(hr)) { Trace(TEXT("SubBlock: %s (%d)"), lpszSubBlock, cbSubBlock); res = VerQueryValue(*plpData, lpszSubBlock, (LPVOID*) &lpszValue, &cbSize); if (res) { pInstallerInfo->pMfgName = lpszValue; } else Trace(TEXT("VerQueryValue 3 failed: %08X"), GetLastError()); } else Trace(TEXT("StringCbAPrintf 2 failed: %08X"), hr); } else Trace(TEXT("VerQueryValue 1 failed: %08X"), GetLastError()); } else Trace(TEXT("GetFileVersionInfo failed: %08X"), GetLastError()); Trace(TEXT("ApplicationID: %s"), pInstallerInfo->pApplicationId); Trace(TEXT("DisplayName: %s"), pInstallerInfo->pDisplayName); Trace(TEXT("ProductName: %s"), pInstallerInfo->pProductName); Trace(TEXT("MfgName: %s"), pInstallerInfo->pMfgName); return ERROR_SUCCESS; }
VOID CMimicsArcCtrl::DrawCtrl(HDC hDC, CONST RECT *pRect, BOOL bShape) { INT nPt; INT nPts; INT nMode; HPEN hOldPen; HPEN hBorderPen; POINT ptRadial[2]; double fxRadial; double fyRadial; HBRUSH hOldBrush; HBRUSH hInteriorBrush; HBITMAP hInteriorBitmap; LOGBRUSH sInteriorBrush; COLORREF nOldColor[2]; if ((hBorderPen = CreatePen(PS_GEOMETRIC | PS_ENDCAP_FLAT | PS_JOIN_MITER | m_nBorderStyle, m_nBorderSize, GetNearestColor(hDC, (!bShape) ? m_nBorderColor : VGA_COLOR_WHITE)))) { if ((hInteriorBitmap = LoadBitmap(GetModuleInstance(), (m_nInteriorHatch == HT_SOLID || m_nInteriorHatch < 0) ? MAKEINTRESOURCE(IDB_MIMICSOBJECTCTLHATCHSOLID) : ((m_nInteriorHatch == HT_HORIZONTAL) ? MAKEINTRESOURCE(IDB_MIMICSOBJECTCTLHATCHHORIZONTAL) : ((m_nInteriorHatch == HT_VERTICAL) ? MAKEINTRESOURCE(IDB_MIMICSOBJECTCTLHATCHVERTICAL) : ((m_nInteriorHatch == HT_BDIAGONAL) ? MAKEINTRESOURCE(IDB_MIMICSOBJECTCTLHATCHDIAGONALDOWN) : ((m_nInteriorHatch == HT_FDIAGONAL) ? MAKEINTRESOURCE(IDB_MIMICSOBJECTCTLHATCHDIAGONALUP) : ((m_nInteriorHatch == HT_CROSS) ? MAKEINTRESOURCE(IDB_MIMICSOBJECTCTLHATCHCROSS) : ((m_nInteriorHatch == HT_DIAGCROSS) ? MAKEINTRESOURCE(IDB_MIMICSOBJECTCTLHATCHCROSSDIAGONAL) : ((m_nInteriorHatch == HT_LPOINTS) ? MAKEINTRESOURCE(IDB_MIMICSOBJECTCTLHATCHPOINTSLOW) : ((m_nInteriorHatch == HT_MPOINTS) ? MAKEINTRESOURCE(IDB_MIMICSOBJECTCTLHATCHPOINTSMEDIUM) : MAKEINTRESOURCE(IDB_MIMICSOBJECTCTLHATCHPOINTSHIGH)))))))))))) { sInteriorBrush.lbStyle = (m_nInteriorColor != (COLORREF)-1) ? ((m_nInteriorHatch > 0) ? BS_PATTERN : BS_SOLID) : BS_HOLLOW; sInteriorBrush.lbColor = (sInteriorBrush.lbStyle == BS_SOLID) ? GetNearestColor(hDC, (!bShape) ? m_nInteriorColor : VGA_COLOR_WHITE) : 0; sInteriorBrush.lbHatch = (sInteriorBrush.lbStyle == BS_PATTERN) ? (ULONG_PTR)hInteriorBitmap : (ULONG_PTR)NULL; if ((hInteriorBrush = CreateBrushIndirect(&sInteriorBrush)) != (HBRUSH)NULL) { if ((hOldPen = (HPEN)SelectObject(hDC, hBorderPen)) != (HPEN)NULL) { if ((hOldBrush = (HBRUSH)SelectObject(hDC, hInteriorBrush))) { for (nPt = 0, nPts = sizeof(ptRadial) / sizeof(POINT); nPt < nPts; nPt++) { fxRadial = (INT)((double)(pRect->left + pRect->right) / 2.0 + ((double)(pRect->right - pRect->left + pRect->bottom - pRect->top) / 2.0)*cos(2.0*M_PI - m_ptRadial[nPt])); fyRadial = (INT)((double)(pRect->top + pRect->bottom) / 2.0 + ((double)(pRect->right - pRect->left + pRect->bottom - pRect->top) / 2.0)*sin(2.0*M_PI - m_ptRadial[nPt])); ptRadial[nPt].x = (fxRadial >= 0.0) ? (INT)(fxRadial + 0.5) : (INT)(fxRadial - 0.5); ptRadial[nPt].y = (fyRadial >= 0.0) ? (INT)(fyRadial + 0.5) : (INT)(fyRadial - 0.5); } for (nMode = SetBkMode(hDC, OPAQUE), nOldColor[0] = SetBkColor(hDC, GetNearestColor(hDC, (!bShape) ? m_nInteriorColor : VGA_COLOR_WHITE)), nOldColor[1] = SetTextColor(hDC, GetNearestColor(hDC, (!bShape) ? m_nHatchColor : VGA_COLOR_WHITE)); m_nStyle & MIMICSARCCTRL_TYPE_ARC; ) { Arc(hDC, pRect->left + m_nBorderSize / 2, pRect->top + m_nBorderSize / 2, pRect->right - m_nBorderSize / 2 - m_nBorderSize % 2, pRect->bottom - m_nBorderSize / 2 - m_nBorderSize % 2, ptRadial[0].x, ptRadial[0].y, ptRadial[1].x, ptRadial[1].y); break; } for (; m_nStyle & MIMICSARCCTRL_TYPE_PIE; ) { Pie(hDC, pRect->left + m_nBorderSize / 2, pRect->top + m_nBorderSize / 2, pRect->right - m_nBorderSize / 2 - m_nBorderSize % 2, pRect->bottom - m_nBorderSize / 2 - m_nBorderSize % 2, ptRadial[0].x, ptRadial[0].y, ptRadial[1].x, ptRadial[1].y); break; } for (; m_nStyle & MIMICSARCCTRL_TYPE_CHORD; ) { Chord(hDC, pRect->left + m_nBorderSize / 2, pRect->top + m_nBorderSize / 2, pRect->right - m_nBorderSize / 2 - m_nBorderSize % 2, pRect->bottom - m_nBorderSize / 2 - m_nBorderSize % 2, ptRadial[0].x, ptRadial[0].y, ptRadial[1].x, ptRadial[1].y); break; } SetBkMode(hDC, nMode); SetBkColor(hDC, nOldColor[0]); SetTextColor(hDC, nOldColor[1]); SelectObject(hDC, hOldBrush); } SelectObject(hDC, hOldPen); } DeleteObject(hInteriorBrush); } DeleteObject(hInteriorBitmap); } DeletePen(hBorderPen); } }