//____________________________________________________________________________ // // Microsoft Windows // Copyright (C) Microsoft Corporation, 1995 - 1996. // // File: viewlog.cxx // // Contents: // // Classes: // // Functions: // // History: 3/25/1996 RaviR Created // //____________________________________________________________________________ #include "..\pch\headers.hxx" #pragma hdrstop #include "dbg.h" #include "macros.h" #include "..\inc\common.hxx" #include "..\inc\resource.h" #include "..\inc\misc.hxx" #include "resource.h" extern HINSTANCE g_hInstance; LRESULT OnViewLog_RegGetValue( HKEY hKeyMachine, LPCTSTR pszValueName, LPTSTR pszValueStr); #define SUBKEY_LOGPATH TEXT("LogPath") #define FMT_TSTR "%S" //____________________________________________________________________________ // // Function: OnViewLog // // Synopsis: Open the job sheduler log. // // Arguments: [hwndOwner] -- IN // // Returns: void // // History: 3/25/1996 RaviR Created // //____________________________________________________________________________ void OnViewLog( LPTSTR lpMachineName, HWND hwndOwner) { TCHAR tszLogPath[MAX_PATH + 1]; ULONG ulTemp; HKEY hKeyMachine = HKEY_LOCAL_MACHINE; LRESULT lr = 0; if (lpMachineName != NULL) { lr = RegConnectRegistry(lpMachineName, HKEY_LOCAL_MACHINE, &hKeyMachine); if (lr != ERROR_SUCCESS) { CHECK_LASTERROR(lr); return; } } // // Get the log file name. // lr = OnViewLog_RegGetValue(hKeyMachine, SUBKEY_LOGPATH, tszLogPath); RegCloseKey(hKeyMachine); if (lr == ERROR_SUCCESS) { if (lpMachineName != NULL) { // If path is drive based convert it to share based. if (s_isDriveLetter(tszLogPath[0]) && tszLogPath[1] == TEXT(':')) { TCHAR tszBuf[MAX_PATH + 1]; StringCchCopy(tszBuf, MAX_PATH + 1, tszLogPath); tszBuf[1] = TEXT('$'); if (lpMachineName[0] == TEXT('\\')) { Win4Assert(lpMachineName[1] == TEXT('\\')); tszLogPath[0] = TEXT('\0'); } else { StringCchCopy(tszLogPath, MAX_PATH + 1, TEXT("\\\\")); } StringCchCat(tszLogPath, MAX_PATH + 1, lpMachineName); StringCchCat(tszLogPath, MAX_PATH + 1, TEXT("\\")); StringCchCat(tszLogPath, MAX_PATH + 1, tszBuf); DEBUG_OUT((DEB_USER1, "Viewing log -> " FMT_TSTR "\n", tszLogPath)); } } } else { if (lpMachineName == NULL) { CHECK_LASTERROR(lr); return; } ulTemp = ExpandEnvironmentStrings(TSZ_LOG_NAME_DEFAULT, tszLogPath, MAX_PATH); if (ulTemp == 0) { DEBUG_OUT_LASTERROR; return; } if (ulTemp > MAX_PATH) { CHECK_LASTERROR(ERROR_INSUFFICIENT_BUFFER); return; } } // // Create a process to open the log. // HINSTANCE hinst = ShellExecute(0, TEXT("open"), tszLogPath, 0, 0, SW_SHOW); if ((INT_PTR)hinst <= 32) { DEBUG_OUT((DEB_ERROR, " returned %dL\n", hinst)); } } //____________________________________________________________________________ // // Function: OnViewLog_RegGetValue // // Synopsis: S // // Arguments: [pszValueName] -- IN // [pszValueStr] -- IN // // Returns: LRESULT // // History: 3/25/1996 RaviR Created // //____________________________________________________________________________ LRESULT OnViewLog_RegGetValue( HKEY hKeyMachine, LPCTSTR pszValueName, LPTSTR pszValueStr) { HKEY hKey = NULL; LRESULT lr = ERROR_SUCCESS; // // Read the log path and maximum size from the registry. // lr = RegOpenKeyEx(hKeyMachine, SCH_AGENT_KEY, 0, KEY_READ, &hKey); if (lr == ERROR_SUCCESS) { TCHAR szBuff[MAX_PATH]; DWORD dwTemp = MAX_PATH * sizeof(TCHAR); DWORD dwType; lr = RegQueryValueEx(hKey, pszValueName, 0, &dwType, (UCHAR *)szBuff, &dwTemp); if (lr == ERROR_SUCCESS) { switch (dwType) { case REG_SZ: CopyMemory(pszValueStr, szBuff, dwTemp); break; case REG_EXPAND_SZ: dwTemp = ExpandEnvironmentStrings(szBuff, pszValueStr, MAX_PATH); if (dwTemp > MAX_PATH) { lr = ERROR_INSUFFICIENT_BUFFER; } break; } } RegCloseKey(hKey); } return lr; }