X-Git-Url: http://git.iain.cx/?a=blobdiff_plain;f=nssm.h;h=f95391d12a65f1c4a0e5523b9f8dbdecd918f2e1;hb=32a1d0fab47a050086106aac346342c70f4d985b;hp=d50e9d620cf2f0636ad5cf1082141a440ee5d160;hpb=03f6899464b863fc2dd05e7c8e5047e0c1b9281d;p=nssm.git diff --git a/nssm.h b/nssm.h index d50e9d6..f95391d 100644 --- a/nssm.h +++ b/nssm.h @@ -1,14 +1,51 @@ #ifndef NSSM_H #define NSSM_H +/* + MSDN says, basically, that the maximum length of a path is 260 characters, + which is represented by the constant MAX_PATH. Except when it isn't. + + The maximum length of a directory path is MAX_PATH - 12 because it must be + possible to create a file in 8.3 format under any valid directory. + + Unicode versions of filesystem API functions accept paths up to 32767 + characters if the first four (wide) characters are L"\\?\" and each component + of the path, separated by L"\", does not exceed the value of + lpMaximumComponentLength returned by GetVolumeInformation(), which is + probably 255. But might not be. + + Relative paths are always limited to MAX_PATH because the L"\\?\" prefix + is not valid for a relative path. + + Note that we don't care about the last two paragraphs because we're only + concerned with allocating buffers big enough to store valid paths. If the + user tries to store invalid paths they will fit in the buffers but the + application will fail. The reason for the failure will end up in the + event log and the user will realise the mistake. + + So that's that cleared up, then. +*/ +#ifdef UNICODE +#define PATH_LENGTH 32767 +#else +#define PATH_LENGTH MAX_PATH +#endif +#define DIR_LENGTH PATH_LENGTH - 12 + #define _WIN32_WINNT 0x0500 +#include +#include #include #include #include #include #include #include "service.h" +#include "account.h" +#include "console.h" +#include "env.h" #include "event.h" +#include "hook.h" #include "imports.h" #include "messages.h" #include "process.h" @@ -21,6 +58,7 @@ int str_equiv(const TCHAR *, const TCHAR *); void strip_basename(TCHAR *); int str_number(const TCHAR *, unsigned long *, TCHAR **); int str_number(const TCHAR *, unsigned long *); +int num_cpus(); int usage(int); #define NSSM _T("NSSM") @@ -59,6 +97,9 @@ int usage(int); */ #define NSSM_KILL_THREADS_GRACE_PERIOD 1500 +/* How many milliseconds to pause after rotating logs. */ +#define NSSM_ROTATE_DELAY 0 + /* Margin of error for service status wait hints in milliseconds. */ #define NSSM_WAITHINT_MARGIN 2000 @@ -92,4 +133,14 @@ int usage(int); /* How many milliseconds to wait before updating service status. */ #define NSSM_SERVICE_STATUS_DEADLINE 20000 +/* User-defined service controls can be in the range 128-255. */ +#define NSSM_SERVICE_CONTROL_START 0 +#define NSSM_SERVICE_CONTROL_ROTATE 128 + +/* How many milliseconds to wait for a hook. */ +#define NSSM_HOOK_DEADLINE 60000 + +/* How many milliseconds to wait for outstanding hooks. */ +#define NSSM_HOOK_THREAD_DEADLINE 80000 + #endif