windows-nt/Source/XPSP1/NT/base/screg/sc/server/scconfig.h
2020-09-26 16:20:57 +08:00

498 lines
9.8 KiB
C

/*++
Copyright (c) 1991, 1992 Microsoft Corporation
Module Name:
scconfig.h
Abstract:
Service configuration related function prototypes.
Author:
Dan Lafferty (danl) 03-Apr-1991
Revision History:
22-Apr-1992 JohnRo
Added ScAllocateAndReadConfigValue(), ScOpenServiceConfigKey(),
and ScWriteServiceType(). Added CreateIfMissing flag to
ScOpenServiceConfigKey(). Added ScWriteImageFileName(),
ScWriteDependencies(), ScWriteGroupForThisService().
24-Apr-1992 RitaW
ScAllocateAndReadConfigValue() returns DWORD.
--*/
#ifndef SCCONFIG_INCLUDED
#define SCCONFIG_INCLUDED
#include <winreg.h> // HKEY, PHKEY.
#include <scwow.h> // 32/64-bit interop structures
//
// Macros
//
#define ScRegCloseKey(handle) RtlNtStatusToDosError(NtClose((HANDLE)handle))
#define ScRegFlushKey(handle) RtlNtStatusToDosError(NtFlushKey((HANDLE)handle))
//
// Value names in registry
//
#define START_VALUENAME_W L"Start"
#define GROUP_VALUENAME_W L"Group"
#define TAG_VALUENAME_W L"Tag"
#define DEPENDONSERVICE_VALUENAME_W L"DependOnService"
#define DEPENDONGROUP_VALUENAME_W L"DependOnGroup"
#define ERRORCONTROL_VALUENAME_W L"ErrorControl"
#define IMAGE_VALUENAME_W L"ImagePath"
#define SERVICETYPE_VALUENAME_W L"Type"
#define STARTNAME_VALUENAME_W L"ObjectName"
#define DISPLAYNAME_VALUENAME_W L"DisplayName"
#define DESCRIPTION_VALUENAME_W L"Description"
#define REBOOTMESSAGE_VALUENAME_W L"RebootMessage"
#define FAILURECOMMAND_VALUENAME_W L"FailureCommand"
#define FAILUREACTIONS_VALUENAME_W L"FailureActions"
#define SD_VALUENAME_W L"Security"
#define LOAD_ORDER_GROUP_LIST_KEY L"System\\CurrentControlSet\\Control\\ServiceGroupOrder"
#define GROUP_VECTORS_KEY L"System\\CurrentControlSet\\Control\\GroupOrderList"
#define GROUPLIST_VALUENAME_W L"List"
#define CONTROL_WINDOWS_KEY_W L"System\\CurrentControlSet\\Control\\Windows"
#define NOINTERACTIVE_VALUENAME_W L"NoInteractiveServices"
#define NOBOOTPOPUPS_VALUENAME_W L"NoPopupsOnBoot"
#define ENVIRONMENT_VALUENAME_W L"Environment"
#define PROVIDER_KEY_BASE L"System\\CurrentControlSet\\Control\\NetworkProvider"
#define PROVIDER_KEY_ORDER L"Order"
#define PROVIDER_KEY_HW L"HwOrder"
#define PROVIDER_VALUE L"ProviderOrder"
//
// Function Prototypes
//
DWORD
ScGetEnvironment (
IN LPWSTR ServiceName,
OUT LPVOID *Environment
);
DWORD
ScGetImageFileName (
LPWSTR ServiceName,
LPWSTR *ImageNamePtr
);
BOOL
ScGenerateServiceDB(
VOID
);
#ifndef _CAIRO_
BOOL
ScInitSecurityProcess(
LPSERVICE_RECORD ServiceRecord
);
#endif // _CAIRO_
DWORD
ScAllocateAndReadConfigValue(
IN HKEY Key,
IN LPCWSTR ValueName,
OUT LPWSTR *Value,
OUT LPDWORD BytesReturned OPTIONAL
);
DWORD
ScReadOptionalString(
IN HKEY ServiceNameKey,
IN LPCWSTR ValueName,
OUT LPWSTR *Value,
IN OUT LPDWORD TotalBytes = NULL
);
BOOL
ScCreateLoadOrderGroupList(
VOID
);
DWORD
ScGetGroupVector(
IN LPWSTR Group,
OUT LPBYTE *Buffer,
OUT LPDWORD BufferSize
);
BOOL
ScGetToken(
IN OUT LPWSTR *CurrentPtr,
OUT LPWSTR *TokenPtr
);
DWORD
ScOpenServiceConfigKey(
IN LPWSTR ServiceName,
IN DWORD DesiredAccess,
IN BOOL CreateIfMissing,
OUT PHKEY ServiceKey
);
DWORD
ScReadServiceType(
IN HKEY ServiceNameKey,
OUT LPDWORD ServiceTypePtr
);
DWORD
ScReadStartType(
IN HKEY ServiceNameKey,
OUT LPDWORD StartTypePtr
);
DWORD
ScReadTag(
IN HKEY ServiceNameKey,
OUT LPDWORD TagPtr
);
DWORD
ScReadFailureActions(
IN HKEY ServiceNameKey,
OUT LPSERVICE_FAILURE_ACTIONS_WOW64 * FailActPtr,
IN OUT LPDWORD TotalBytes = NULL
);
DWORD
ScReadErrorControl(
IN HKEY ServiceNameKey,
OUT LPDWORD ErrorControlPtr
);
DWORD
ScReadStartName(
IN HKEY ServiceNameKey,
OUT LPWSTR *AccountName
);
DWORD
ScWriteOptionalString(
IN HKEY ServiceNameKey,
IN LPCWSTR ValueName,
IN LPCWSTR Value
);
DWORD
ScWriteDependencies(
IN HKEY ServiceNameKey,
IN LPWSTR Dependencies,
IN DWORD DependSize
);
DWORD
ScWriteDisplayName(
IN HKEY ServiceNameKey,
IN LPWSTR DisplayName
);
DWORD
ScWriteErrorControl(
IN HKEY hServiceKey,
IN DWORD dwErrorControl
);
DWORD
ScWriteSd(
IN HKEY ServiceNameKey,
IN PSECURITY_DESCRIPTOR Security
);
DWORD
ScWriteGroupForThisService(
IN HKEY ServiceNameKey,
IN LPWSTR Group
);
DWORD
ScWriteImageFileName(
IN HKEY hServiceKey,
IN LPWSTR ImageFileName
);
DWORD
ScWriteServiceType(
IN HKEY hServiceKey,
IN DWORD dwServiceType
);
DWORD
ScWriteStartType(
IN HKEY hServiceKey,
IN DWORD lpStartType
);
DWORD
ScWriteTag(
IN HKEY hServiceKey,
IN DWORD dwTag
);
DWORD
ScWriteFailureActions(
IN HKEY ServiceNameKey,
IN LPSERVICE_FAILURE_ACTIONSW psfa
);
DWORD
ScWriteCurrentServiceValue(
OUT LPDWORD lpdwID
);
VOID
ScDeleteTag(
IN HKEY hServiceKey
);
DWORD
ScWriteStartName(
IN HKEY ServiceNameKey,
IN LPWSTR StartName
);
DWORD
ScOpenServicesKey(
OUT PHKEY ServicesKey
);
DWORD
ScRegCreateKeyExW(
IN HKEY hKey,
IN LPWSTR lpSubKey,
IN DWORD dwReserved,
IN LPWSTR lpClass,
IN DWORD dwOptions,
IN REGSAM samDesired,
IN LPSECURITY_ATTRIBUTES lpSecurityAttributes,
OUT PHKEY phkResult,
OUT LPDWORD lpdwDisposition
);
DWORD
ScRegOpenKeyExW(
IN HKEY hKey,
IN LPWSTR lpSubKey,
IN DWORD dwOptions,
IN REGSAM samDesired,
OUT PHKEY phkResult
);
DWORD
ScRegQueryValueExW(
IN HKEY hKey,
IN LPCWSTR lpValueName,
OUT LPDWORD lpReserved,
OUT LPDWORD lpType,
OUT LPBYTE lpData,
IN OUT LPDWORD lpcbData
);
DWORD
ScRegSetValueExW(
IN HKEY hKey,
IN LPCWSTR lpValueName,
IN DWORD lpReserved,
IN DWORD dwType,
IN LPVOID lpData,
IN DWORD cbData
);
DWORD
ScRegDeleteValue(
IN HKEY hKey,
IN LPCWSTR lpValueName
);
DWORD
ScRegEnumKeyW(
HKEY hKey,
DWORD dwIndex,
LPWSTR lpName,
DWORD cbName
);
DWORD
ScRegDeleteKeyW (
HKEY hKey,
LPWSTR lpSubKey
);
DWORD
ScRegQueryInfoKeyW (
HKEY hKey,
LPWSTR lpClass,
LPDWORD lpcbClass,
LPDWORD lpReserved,
LPDWORD lpcSubKeys,
LPDWORD lpcbMaxSubKeyLen,
LPDWORD lpcbMaxClassLen,
LPDWORD lpcValues,
LPDWORD lpcbMaxValueNameLen,
LPDWORD lpcbMaxValueLen,
LPDWORD lpcbSecurityDescriptor,
PFILETIME lpftLastWriteTime
);
DWORD
ScRegGetKeySecurity (
HKEY hKey,
SECURITY_INFORMATION SecurityInformation,
PSECURITY_DESCRIPTOR pSecurityDescriptor,
LPDWORD lpcbSecurityDescriptor
);
DWORD
ScRegSetKeySecurity (
HKEY hKey,
SECURITY_INFORMATION SecurityInformation,
PSECURITY_DESCRIPTOR pSecurityDescriptor
);
DWORD
ScRegEnumValueW (
HKEY hKey,
DWORD dwIndex,
LPWSTR lpValueName,
LPDWORD lpcbValueName,
LPDWORD lpReserved,
LPDWORD lpType,
LPBYTE lpData,
LPDWORD lpcbData
);
VOID
ScHandleProviderChange(
PVOID pContext,
BOOLEAN fWaitStatus
);
VOID
ScMarkForDelete(
LPSERVICE_RECORD ServiceRecord
);
DWORD
ScReadDependencies(
HKEY ServiceNameKey,
LPWSTR *Dependencies,
LPWSTR ServiceName
);
DWORD
ScReadConfigFromReg(
LPSERVICE_RECORD ServiceRecord,
LPDWORD lpdwServiceType,
LPDWORD lpdwStartType,
LPDWORD lpdwErrorControl,
LPDWORD lpdwTagId,
LPWSTR *Dependencies,
LPWSTR *LoadOrderGroup,
LPWSTR *DisplayName
);
inline DWORD
ScReadDisplayName(
IN HKEY ServiceNameKey,
OUT LPWSTR *DisplayName
)
{
return (ScReadOptionalString(
ServiceNameKey,
DISPLAYNAME_VALUENAME_W,
DisplayName
));
}
inline DWORD
ScWriteDisplayName(
IN HKEY ServiceNameKey,
IN LPWSTR DisplayName
)
{
return (ScWriteOptionalString(
ServiceNameKey,
DISPLAYNAME_VALUENAME_W,
DisplayName
));
}
DWORD
ScReadNoInteractiveFlag(
IN HKEY ServiceNameKey,
OUT LPDWORD NoInteractivePtr
);
inline DWORD
ScReadDescription(
IN HKEY ServiceNameKey,
OUT LPWSTR *Description,
IN OUT LPDWORD TotalBytes = NULL
)
{
return (ScReadOptionalString(
ServiceNameKey,
DESCRIPTION_VALUENAME_W,
Description,
TotalBytes
));
}
inline DWORD
ScWriteDescription(
IN HKEY ServiceNameKey,
IN LPWSTR Description
)
{
return (ScWriteOptionalString(
ServiceNameKey,
DESCRIPTION_VALUENAME_W,
Description
));
}
inline DWORD
ScReadRebootMessage(
IN HKEY ServiceNameKey,
OUT LPWSTR *RebootMessage,
IN OUT LPDWORD TotalBytes = NULL
)
{
return (ScReadOptionalString(
ServiceNameKey,
REBOOTMESSAGE_VALUENAME_W,
RebootMessage,
TotalBytes
));
}
inline DWORD
ScReadFailureCommand(
IN HKEY ServiceNameKey,
OUT LPWSTR *FailureCommand,
IN OUT LPDWORD TotalBytes = NULL
)
{
return (ScReadOptionalString(
ServiceNameKey,
FAILURECOMMAND_VALUENAME_W,
FailureCommand,
TotalBytes
));
}
#endif // #ifndef SCCONFIG_INCLUDED