windows-nt/Source/XPSP1/NT/admin/services/sched/folderui/viewlog.cxx
2020-09-26 16:20:57 +08:00

226 lines
4.9 KiB
C++

//____________________________________________________________________________
//
// 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")
#ifdef UNICODE
#define FMT_TSTR "%S"
#else
#define FMT_TSTR "%s"
#endif
//____________________________________________________________________________
//
// 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];
lstrcpy(tszBuf, tszLogPath);
tszBuf[1] = TEXT('$');
if (lpMachineName[0] == TEXT('\\'))
{
Win4Assert(lpMachineName[1] == TEXT('\\'));
tszLogPath[0] = TEXT('\0');
}
else
{
lstrcpy(tszLogPath, TEXT("\\\\"));
}
lstrcat(tszLogPath, lpMachineName);
lstrcat(tszLogPath, TEXT("\\"));
lstrcat(tszLogPath, 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;
}