mirror of
https://github.com/reactos/reactos.git
synced 2025-02-22 08:25:03 +00:00
[SERVICES] Use safe-string routines in some places, and do not hardcode buffer lengths.
This commit is contained in:
parent
1aa359ec7f
commit
c6d65fec69
2 changed files with 43 additions and 39 deletions
|
@ -15,6 +15,7 @@
|
|||
#include "services.h"
|
||||
|
||||
#include <userenv.h>
|
||||
#include <strsafe.h>
|
||||
|
||||
#define NDEBUG
|
||||
#include <debug.h>
|
||||
|
@ -88,7 +89,8 @@ ScmCreateNewControlPipe(PSERVICE_IMAGE pServiceImage)
|
|||
}
|
||||
|
||||
/* Create '\\.\pipe\net\NtControlPipeXXX' instance */
|
||||
swprintf(szControlPipeName, L"\\\\.\\pipe\\net\\NtControlPipe%lu", ServiceCurrent);
|
||||
StringCchPrintfW(szControlPipeName, ARRAYSIZE(szControlPipeName),
|
||||
L"\\\\.\\pipe\\net\\NtControlPipe%lu", ServiceCurrent);
|
||||
|
||||
DPRINT("PipeName: %S\n", szControlPipeName);
|
||||
|
||||
|
@ -1861,7 +1863,8 @@ ScmLoadService(PSERVICE Service,
|
|||
if (Service->dwErrorControl != SERVICE_ERROR_IGNORE)
|
||||
{
|
||||
/* Log a failed service start */
|
||||
swprintf(szLogBuffer, L"%lu", dwError);
|
||||
StringCchPrintfW(szLogBuffer, ARRAYSIZE(szLogBuffer),
|
||||
L"%lu", dwError);
|
||||
lpLogStrings[0] = Service->lpServiceName;
|
||||
lpLogStrings[1] = szLogBuffer;
|
||||
ScmLogEvent(EVENT_SERVICE_START_FAILED,
|
||||
|
@ -1990,19 +1993,21 @@ ScmAutoStartServices(VOID)
|
|||
CurrentService = CONTAINING_RECORD(ServiceEntry, SERVICE, ServiceListEntry);
|
||||
|
||||
/* Build the safe boot path */
|
||||
wcscpy(szSafeBootServicePath,
|
||||
L"SYSTEM\\CurrentControlSet\\Control\\SafeBoot");
|
||||
StringCchCopyW(szSafeBootServicePath, ARRAYSIZE(szSafeBootServicePath),
|
||||
L"SYSTEM\\CurrentControlSet\\Control\\SafeBoot");
|
||||
|
||||
switch (SafeBootEnabled)
|
||||
{
|
||||
/* NOTE: Assumes MINIMAL (1) and DSREPAIR (3) load same items */
|
||||
case 1:
|
||||
case 3:
|
||||
wcscat(szSafeBootServicePath, L"\\Minimal\\");
|
||||
StringCchCatW(szSafeBootServicePath, ARRAYSIZE(szSafeBootServicePath),
|
||||
L"\\Minimal\\");
|
||||
break;
|
||||
|
||||
case 2:
|
||||
wcscat(szSafeBootServicePath, L"\\Network\\");
|
||||
StringCchCatW(szSafeBootServicePath, ARRAYSIZE(szSafeBootServicePath),
|
||||
L"\\Network\\");
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -2019,9 +2024,8 @@ ScmAutoStartServices(VOID)
|
|||
RegCloseKey(hKey);
|
||||
|
||||
/* Finish Safe Boot path off */
|
||||
wcsncat(szSafeBootServicePath,
|
||||
CurrentService->lpServiceName,
|
||||
MAX_PATH - wcslen(szSafeBootServicePath));
|
||||
StringCchCatW(szSafeBootServicePath, ARRAYSIZE(szSafeBootServicePath),
|
||||
CurrentService->lpServiceName);
|
||||
|
||||
/* Check that the key is in the Safe Boot path */
|
||||
dwError = RegOpenKeyExW(HKEY_LOCAL_MACHINE,
|
||||
|
|
|
@ -13,6 +13,7 @@
|
|||
#include "services.h"
|
||||
|
||||
#include <winnls.h>
|
||||
#include <strsafe.h>
|
||||
|
||||
#define NDEBUG
|
||||
#include <debug.h>
|
||||
|
@ -1241,36 +1242,36 @@ RControlService(
|
|||
|
||||
if (dwError == ERROR_SUCCESS)
|
||||
{
|
||||
if (dwControl == SERVICE_CONTROL_STOP ||
|
||||
dwControl == SERVICE_CONTROL_PAUSE ||
|
||||
dwControl == SERVICE_CONTROL_CONTINUE)
|
||||
if (dwControl == SERVICE_CONTROL_STOP ||
|
||||
dwControl == SERVICE_CONTROL_PAUSE ||
|
||||
dwControl == SERVICE_CONTROL_CONTINUE)
|
||||
{
|
||||
/* Log a successful send control */
|
||||
|
||||
switch (dwControl)
|
||||
{
|
||||
/* Log a successful send control */
|
||||
case SERVICE_CONTROL_STOP:
|
||||
uID = IDS_SERVICE_STOP;
|
||||
break;
|
||||
|
||||
switch (dwControl)
|
||||
{
|
||||
case SERVICE_CONTROL_STOP:
|
||||
uID = IDS_SERVICE_STOP;
|
||||
break;
|
||||
case SERVICE_CONTROL_PAUSE:
|
||||
uID = IDS_SERVICE_PAUSE;
|
||||
break;
|
||||
|
||||
case SERVICE_CONTROL_PAUSE:
|
||||
uID = IDS_SERVICE_PAUSE;
|
||||
break;
|
||||
|
||||
case SERVICE_CONTROL_CONTINUE:
|
||||
uID = IDS_SERVICE_RESUME;
|
||||
break;
|
||||
}
|
||||
LoadStringW(GetModuleHandle(NULL), uID, szLogBuffer, 80);
|
||||
|
||||
lpLogStrings[0] = lpService->lpDisplayName;
|
||||
lpLogStrings[1] = szLogBuffer;
|
||||
|
||||
ScmLogEvent(EVENT_SERVICE_CONTROL_SUCCESS,
|
||||
EVENTLOG_INFORMATION_TYPE,
|
||||
2,
|
||||
lpLogStrings);
|
||||
case SERVICE_CONTROL_CONTINUE:
|
||||
uID = IDS_SERVICE_RESUME;
|
||||
break;
|
||||
}
|
||||
LoadStringW(GetModuleHandle(NULL), uID, szLogBuffer, ARRAYSIZE(szLogBuffer));
|
||||
|
||||
lpLogStrings[0] = lpService->lpDisplayName;
|
||||
lpLogStrings[1] = szLogBuffer;
|
||||
|
||||
ScmLogEvent(EVENT_SERVICE_CONTROL_SUCCESS,
|
||||
EVENTLOG_INFORMATION_TYPE,
|
||||
2,
|
||||
lpLogStrings);
|
||||
}
|
||||
}
|
||||
|
||||
return dwError;
|
||||
|
@ -1757,7 +1758,8 @@ RSetServiceStatus(
|
|||
(lpServiceStatus->dwWin32ExitCode != ERROR_SUCCESS))
|
||||
{
|
||||
/* Log a failed service stop */
|
||||
swprintf(szLogBuffer, L"%lu", lpServiceStatus->dwWin32ExitCode);
|
||||
StringCchPrintfW(szLogBuffer, ARRAYSIZE(szLogBuffer),
|
||||
L"%lu", lpServiceStatus->dwWin32ExitCode);
|
||||
lpLogStrings[0] = lpService->lpDisplayName;
|
||||
lpLogStrings[1] = szLogBuffer;
|
||||
|
||||
|
@ -1787,7 +1789,7 @@ RSetServiceStatus(
|
|||
break;
|
||||
}
|
||||
|
||||
LoadStringW(GetModuleHandle(NULL), uID, szLogBuffer, 80);
|
||||
LoadStringW(GetModuleHandle(NULL), uID, szLogBuffer, ARRAYSIZE(szLogBuffer));
|
||||
lpLogStrings[0] = lpService->lpDisplayName;
|
||||
lpLogStrings[1] = szLogBuffer;
|
||||
|
||||
|
@ -1797,8 +1799,6 @@ RSetServiceStatus(
|
|||
lpLogStrings);
|
||||
}
|
||||
|
||||
|
||||
|
||||
DPRINT("Set %S to %lu\n", lpService->lpDisplayName, lpService->Status.dwCurrentState);
|
||||
DPRINT("RSetServiceStatus() done\n");
|
||||
|
||||
|
|
Loading…
Reference in a new issue