|
|
/*++
Copyright (c) 1991 Microsoft Corporation
Module Name:
control.h
Abstract:
This file contains data structures and function prototypes for the Service Controller Control Interface.
Author:
Dan Lafferty (danl) 28-Mar-1991
Environment:
User Mode -Win32
Revision History:
28-Mar-1991 danl created
--*/
#ifdef __cplusplus
extern "C" { #endif
//
// Internal controls.
// These must not be in the range or public controls ( 1-10)
// or in the range of user-defined controls (0x00000080 - 0x000000ff)
//
//
// Range for OEM defined control opcodes
//
#define OEM_LOWER_LIMIT 128
#define OEM_UPPER_LIMIT 255
//
// Used to start a service that shares a process with other services.
//
#define SERVICE_CONTROL_START_SHARE 0x00000050 // INTERNAL
//
// Used to start a service that has its own process.
//
#define SERVICE_CONTROL_START_OWN 0x00000051 // INTERNAL
//
// Private access level for OpenService to get a context handle for SetServiceStatus.
// This MUST NOT CONFLICT with the access levels in winsvc.h.
//
#define SERVICE_SET_STATUS 0x8000 // INTERNAL
//
// Service controls that can be passed to a non-EX control handler. Relies
// on ordering/values of SERVICE_CONTROL_* constants in winsvc.h.
//
#define IS_NON_EX_CONTROL(dwControl) \
((dwControl >= SERVICE_CONTROL_STOP && dwControl <= SERVICE_CONTROL_NETBINDDISABLE) \ || \ (dwControl >= OEM_LOWER_LIMIT && dwControl <= OEM_UPPER_LIMIT))
//
// Data Structures
//
//
// The control message has the following format:
// [MessageHeader][ServiceNameString][CmdArg1Ptr][CmdArg2Ptr]
// [...][CmdArgnPtr][CmdArg1String][CmdArg2String][...][CmdArgnString]
//
// Where CmdArg pointers are replaced with offsets that are relative to
// the location of the 1st command arg pointer (the top of the argv list).
//
// In the header, the NumCmdArgs, StatusHandle, and ArgvOffset parameters
// are only used when the SERVICE_START OpCode is passed in. They are
// expected to be 0 at all other times. The ServiceNameOffset and the
// ArgvOffset are relative to the top of the buffer containing the
// message (ie. the header Count field). The Count field in the header
// contains the number of bytes in the entire message (including the
// header).
//
//
typedef struct _CTRL_MSG_HEADER { DWORD Count; // num bytes in buffer.
DWORD OpCode; // control opcode.
DWORD NumCmdArgs; // number of command Args.
DWORD ServiceNameOffset; // pointer to ServiceNameString
DWORD ArgvOffset; // pointer to Argument Vectors.
} CTRL_MSG_HEADER, *PCTRL_MSG_HEADER, *LPCTRL_MSG_HEADER;
typedef struct _PIPE_RESPONSE_MSG { DWORD dwDispatcherStatus; DWORD dwHandlerRetVal; } PIPE_RESPONSE_MSG, *PPIPE_RESPONSE_MSG, *LPPIPE_RESPONSE_MSG;
typedef struct _PNP_ARGUMENTS { DWORD dwEventType; DWORD dwEventDataSize; PVOID EventData; } PNP_ARGUMENTS, *PPNP_ARGUMENTS, *LPPNP_ARGUMENTS;
//
// Union to hold arguments to ScSendControl
//
typedef union _CONTROL_ARGS { LPWSTR *CmdArgs; PNP_ARGUMENTS PnPArgs; } CONTROL_ARGS, *PCONTROL_ARGS, *LPCONTROL_ARGS;
//
// Defines and Typedefs
//
#define CONTROL_PIPE_NAME L"\\\\.\\pipe\\net\\NtControlPipe"
#define PID_LEN 10 // Max PID (DWORD_MAX) is 10 digits
#define CONTROL_TIMEOUT 30000 // timeout for waiting for pipe.
#define RESPONSE_WAIT_TIME 5000 // wait until service response.
//
// Function Prototypes
//
DWORD ScCreateControlInstance ( OUT LPHANDLE PipeHandlePtr, IN DWORD dwProcessId, IN PSID pAccountSid );
VOID ScDeleteControlInstance ( IN HANDLE PipeHandle );
DWORD ScWaitForConnect ( IN HANDLE PipeHandle, IN HANDLE hProcess OPTIONAL, IN LPWSTR lpDisplayName, OUT LPDWORD ProcessIdPtr );
DWORD ScSendControl ( IN LPWSTR ServiceName, IN LPWSTR DisplayName, IN HANDLE PipeHandle, IN DWORD OpCode, IN LPCONTROL_ARGS lpControlArgs OPTIONAL, IN DWORD NumArgs, OUT LPDWORD lpdwHandlerRetVal OPTIONAL );
VOID ScShutdownAllServices( VOID );
DWORD ScSendPnPMessage( IN SERVICE_STATUS_HANDLE hServiceStatus, IN DWORD OpCode, IN DWORD dwEventType, IN LPARAM EventData, OUT LPDWORD lpdwHandlerRetVal );
DWORD ScValidatePnPService( IN LPWSTR lpServiceName, OUT SERVICE_STATUS_HANDLE *lphServiceStatus );
#ifdef __cplusplus
} #endif
|