498 lines
9.8 KiB
C
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
|