📄 jwawinsvc.pas
字号:
{******************************************************************************}
{ }
{ Services API interface Unit for Object Pascal }
{ }
{ Portions created by Microsoft are Copyright (C) 1995-2001 Microsoft }
{ Corporation. All Rights Reserved. }
{ }
{ The original file is: winsvc.h, released June 2000. The original Pascal }
{ code is: WinSvc.pas, released December 2000. The initial developer of the }
{ Pascal code is Marcel van Brakel (brakelm@chello.nl). }
{ }
{ Portions created by Marcel van Brakel are Copyright (C) 1999-2001 }
{ Marcel van Brakel. All Rights Reserved. }
{ }
{ Obtained through: Joint Endeavour of Delphi Innovators (Project JEDI) }
{ }
{ You may retrieve the latest version of this file at the Project JEDI home }
{ page, located at http://delphi-jedi.org or my personal homepage located at }
{ http://members.chello.nl/m.vanbrakel2 }
{ }
{ The contents of this file are used with permission, subject to the Mozilla }
{ Public License Version 1.1 (the "License"); you may not use this file except }
{ in compliance with the License. You may obtain a copy of the License at }
{ http://www.mozilla.org/MPL/MPL-1.1.html }
{ }
{ Software distributed under the License is distributed on an "AS IS" basis, }
{ WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for }
{ the specific language governing rights and limitations under the License. }
{ }
{ Alternatively, the contents of this file may be used under the terms of the }
{ GNU Lesser General Public License (the "LGPL License"), in which case the }
{ provisions of the LGPL License are applicable instead of those above. }
{ If you wish to allow use of your version of this file only under the terms }
{ of the LGPL License and not to allow others to use your version of this file }
{ under the MPL, indicate your decision by deleting the provisions above and }
{ replace them with the notice and other provisions required by the LGPL }
{ License. If you do not delete the provisions above, a recipient may use }
{ your version of this file under either the MPL or the LGPL License. }
{ }
{ For more information about the LGPL: http://www.gnu.org/copyleft/lesser.html }
{ }
{******************************************************************************}
unit JwaWinSvc;
{$WEAKPACKAGEUNIT}
{$HPPEMIT ''}
{$HPPEMIT '#include "WinSvc.h"'}
{$HPPEMIT ''}
{$I WINDEFINES.INC}
interface
uses
JwaWinNT, JwaWinType;
//
// Service database names
//
const
SERVICES_ACTIVE_DATABASEW = 'ServicesActive';
{$EXTERNALSYM SERVICES_ACTIVE_DATABASEW}
SERVICES_FAILED_DATABASEW = 'ServicesFailed';
{$EXTERNALSYM SERVICES_FAILED_DATABASEW}
SERVICES_ACTIVE_DATABASEA = 'ServicesActive';
{$EXTERNALSYM SERVICES_ACTIVE_DATABASEA}
SERVICES_FAILED_DATABASEA = 'ServicesFailed';
{$EXTERNALSYM SERVICES_FAILED_DATABASEA}
//
// Character to designate that a name is a group
//
SC_GROUP_IDENTIFIERW = '+';
{$EXTERNALSYM SC_GROUP_IDENTIFIERW}
SC_GROUP_IDENTIFIERA = '+';
{$EXTERNALSYM SC_GROUP_IDENTIFIERA}
{$IFDEF UNICODE}
SERVICES_ACTIVE_DATABASE = SERVICES_ACTIVE_DATABASEW;
{$EXTERNALSYM SERVICES_ACTIVE_DATABASE}
SERVICES_FAILED_DATABASE = SERVICES_FAILED_DATABASEW;
{$EXTERNALSYM SERVICES_FAILED_DATABASE}
SC_GROUP_IDENTIFIER = SC_GROUP_IDENTIFIERW;
{$EXTERNALSYM SC_GROUP_IDENTIFIER}
{$ELSE}
SERVICES_ACTIVE_DATABASE = SERVICES_ACTIVE_DATABASEA;
{$EXTERNALSYM SERVICES_ACTIVE_DATABASE}
SERVICES_FAILED_DATABASE = SERVICES_FAILED_DATABASEA;
{$EXTERNALSYM SERVICES_FAILED_DATABASE}
SC_GROUP_IDENTIFIER = SC_GROUP_IDENTIFIERA;
{$EXTERNALSYM SC_GROUP_IDENTIFIER}
{$ENDIF}
//
// Value to indicate no change to an optional parameter
//
SERVICE_NO_CHANGE = $ffffffff;
{$EXTERNALSYM SERVICE_NO_CHANGE}
//
// Service State -- for Enum Requests (Bit Mask)
//
SERVICE_ACTIVE = $00000001;
{$EXTERNALSYM SERVICE_ACTIVE}
SERVICE_INACTIVE = $00000002;
{$EXTERNALSYM SERVICE_INACTIVE}
SERVICE_STATE_ALL = SERVICE_ACTIVE or SERVICE_INACTIVE;
{$EXTERNALSYM SERVICE_STATE_ALL}
//
// Controls
//
SERVICE_CONTROL_STOP = $00000001;
{$EXTERNALSYM SERVICE_CONTROL_STOP}
SERVICE_CONTROL_PAUSE = $00000002;
{$EXTERNALSYM SERVICE_CONTROL_PAUSE}
SERVICE_CONTROL_CONTINUE = $00000003;
{$EXTERNALSYM SERVICE_CONTROL_CONTINUE}
SERVICE_CONTROL_INTERROGATE = $00000004;
{$EXTERNALSYM SERVICE_CONTROL_INTERROGATE}
SERVICE_CONTROL_SHUTDOWN = $00000005;
{$EXTERNALSYM SERVICE_CONTROL_SHUTDOWN}
SERVICE_CONTROL_PARAMCHANGE = $00000006;
{$EXTERNALSYM SERVICE_CONTROL_PARAMCHANGE}
SERVICE_CONTROL_NETBINDADD = $00000007;
{$EXTERNALSYM SERVICE_CONTROL_NETBINDADD}
SERVICE_CONTROL_NETBINDREMOVE = $00000008;
{$EXTERNALSYM SERVICE_CONTROL_NETBINDREMOVE}
SERVICE_CONTROL_NETBINDENABLE = $00000009;
{$EXTERNALSYM SERVICE_CONTROL_NETBINDENABLE}
SERVICE_CONTROL_NETBINDDISABLE = $0000000A;
{$EXTERNALSYM SERVICE_CONTROL_NETBINDDISABLE}
SERVICE_CONTROL_DEVICEEVENT = $0000000B;
{$EXTERNALSYM SERVICE_CONTROL_DEVICEEVENT}
SERVICE_CONTROL_HARDWAREPROFILECHANGE = $0000000C;
{$EXTERNALSYM SERVICE_CONTROL_HARDWAREPROFILECHANGE}
SERVICE_CONTROL_POWEREVENT = $0000000D;
{$EXTERNALSYM SERVICE_CONTROL_POWEREVENT}
SERVICE_CONTROL_SESSIONCHANGE = $0000000E;
{$EXTERNALSYM SERVICE_CONTROL_SESSIONCHANGE}
//
// Service State -- for CurrentState
//
SERVICE_STOPPED = $00000001;
{$EXTERNALSYM SERVICE_STOPPED}
SERVICE_START_PENDING = $00000002;
{$EXTERNALSYM SERVICE_START_PENDING}
SERVICE_STOP_PENDING = $00000003;
{$EXTERNALSYM SERVICE_STOP_PENDING}
SERVICE_RUNNING = $00000004;
{$EXTERNALSYM SERVICE_RUNNING}
SERVICE_CONTINUE_PENDING = $00000005;
{$EXTERNALSYM SERVICE_CONTINUE_PENDING}
SERVICE_PAUSE_PENDING = $00000006;
{$EXTERNALSYM SERVICE_PAUSE_PENDING}
SERVICE_PAUSED = $00000007;
{$EXTERNALSYM SERVICE_PAUSED}
//
// Controls Accepted (Bit Mask)
//
SERVICE_ACCEPT_STOP = $00000001;
{$EXTERNALSYM SERVICE_ACCEPT_STOP}
SERVICE_ACCEPT_PAUSE_CONTINUE = $00000002;
{$EXTERNALSYM SERVICE_ACCEPT_PAUSE_CONTINUE}
SERVICE_ACCEPT_SHUTDOWN = $00000004;
{$EXTERNALSYM SERVICE_ACCEPT_SHUTDOWN}
SERVICE_ACCEPT_PARAMCHANGE = $00000008;
{$EXTERNALSYM SERVICE_ACCEPT_PARAMCHANGE}
SERVICE_ACCEPT_NETBINDCHANGE = $00000010;
{$EXTERNALSYM SERVICE_ACCEPT_NETBINDCHANGE}
SERVICE_ACCEPT_HARDWAREPROFILECHANGE = $00000020;
{$EXTERNALSYM SERVICE_ACCEPT_HARDWAREPROFILECHANGE}
SERVICE_ACCEPT_POWEREVENT = $00000040;
{$EXTERNALSYM SERVICE_ACCEPT_POWEREVENT}
SERVICE_ACCEPT_SESSIONCHANGE = $00000080;
{$EXTERNALSYM SERVICE_ACCEPT_SESSIONCHANGE}
//
// Service Control Manager object specific access types
//
SC_MANAGER_CONNECT = $0001;
{$EXTERNALSYM SC_MANAGER_CONNECT}
SC_MANAGER_CREATE_SERVICE = $0002;
{$EXTERNALSYM SC_MANAGER_CREATE_SERVICE}
SC_MANAGER_ENUMERATE_SERVICE = $0004;
{$EXTERNALSYM SC_MANAGER_ENUMERATE_SERVICE}
SC_MANAGER_LOCK = $0008;
{$EXTERNALSYM SC_MANAGER_LOCK}
SC_MANAGER_QUERY_LOCK_STATUS = $0010;
{$EXTERNALSYM SC_MANAGER_QUERY_LOCK_STATUS}
SC_MANAGER_MODIFY_BOOT_CONFIG = $0020;
{$EXTERNALSYM SC_MANAGER_MODIFY_BOOT_CONFIG}
SC_MANAGER_ALL_ACCESS = STANDARD_RIGHTS_REQUIRED or
SC_MANAGER_CONNECT or
SC_MANAGER_CREATE_SERVICE or
SC_MANAGER_ENUMERATE_SERVICE or
SC_MANAGER_LOCK or
SC_MANAGER_QUERY_LOCK_STATUS or
SC_MANAGER_MODIFY_BOOT_CONFIG;
{$EXTERNALSYM SC_MANAGER_ALL_ACCESS}
//
// Service object specific access type
//
SERVICE_QUERY_CONFIG = $0001;
{$EXTERNALSYM SERVICE_QUERY_CONFIG}
SERVICE_CHANGE_CONFIG = $0002;
{$EXTERNALSYM SERVICE_CHANGE_CONFIG}
SERVICE_QUERY_STATUS = $0004;
{$EXTERNALSYM SERVICE_QUERY_STATUS}
SERVICE_ENUMERATE_DEPENDENTS = $0008;
{$EXTERNALSYM SERVICE_ENUMERATE_DEPENDENTS}
SERVICE_START = $0010;
{$EXTERNALSYM SERVICE_START}
SERVICE_STOP = $0020;
{$EXTERNALSYM SERVICE_STOP}
SERVICE_PAUSE_CONTINUE = $0040;
{$EXTERNALSYM SERVICE_PAUSE_CONTINUE}
SERVICE_INTERROGATE = $0080;
{$EXTERNALSYM SERVICE_INTERROGATE}
SERVICE_USER_DEFINED_CONTROL = $0100;
{$EXTERNALSYM SERVICE_USER_DEFINED_CONTROL}
SERVICE_ALL_ACCESS = STANDARD_RIGHTS_REQUIRED or
SERVICE_QUERY_CONFIG or
SERVICE_CHANGE_CONFIG or
SERVICE_QUERY_STATUS or
SERVICE_ENUMERATE_DEPENDENTS or
SERVICE_START or
SERVICE_STOP or
SERVICE_PAUSE_CONTINUE or
SERVICE_INTERROGATE or
SERVICE_USER_DEFINED_CONTROL;
{$EXTERNALSYM SERVICE_ALL_ACCESS}
//
// Service flags for QueryServiceStatusEx
//
SERVICE_RUNS_IN_SYSTEM_PROCESS = $00000001;
{$EXTERNALSYM SERVICE_RUNS_IN_SYSTEM_PROCESS}
//
// Info levels for ChangeServiceConfig2 and QueryServiceConfig2
//
SERVICE_CONFIG_DESCRIPTION = 1;
{$EXTERNALSYM SERVICE_CONFIG_DESCRIPTION}
SERVICE_CONFIG_FAILURE_ACTIONS = 2;
{$EXTERNALSYM SERVICE_CONFIG_FAILURE_ACTIONS}
//
// Service description string
//
type
LPSERVICE_DESCRIPTIONA = ^SERVICE_DESCRIPTIONA;
{$EXTERNALSYM LPSERVICE_DESCRIPTIONA}
_SERVICE_DESCRIPTIONA = record
lpDescription: LPSTR;
end;
{$EXTERNALSYM _SERVICE_DESCRIPTIONA}
SERVICE_DESCRIPTIONA = _SERVICE_DESCRIPTIONA;
{$EXTERNALSYM SERVICE_DESCRIPTIONA}
TServiceDescriptionA = SERVICE_DESCRIPTIONA;
PServiceDescriptionA = LPSERVICE_DESCRIPTIONA;
//
// Service description string
//
LPSERVICE_DESCRIPTIONW = ^SERVICE_DESCRIPTIONW;
{$EXTERNALSYM LPSERVICE_DESCRIPTIONW}
_SERVICE_DESCRIPTIONW = record
lpDescription: LPWSTR;
end;
{$EXTERNALSYM _SERVICE_DESCRIPTIONW}
SERVICE_DESCRIPTIONW = _SERVICE_DESCRIPTIONW;
{$EXTERNALSYM SERVICE_DESCRIPTIONW}
TServiceDescriptionW = SERVICE_DESCRIPTIONW;
PServiceDescriptionW = LPSERVICE_DESCRIPTIONW;
{$IFDEF UNICODE}
SERVICE_DESCRIPTION = SERVICE_DESCRIPTIONW;
{$EXTERNALSYM SERVICE_DESCRIPTION}
LPSERVICE_DESCRIPTION = LPSERVICE_DESCRIPTIONW;
{$EXTERNALSYM LPSERVICE_DESCRIPTION}
TServiceDescription = TServiceDescriptionW;
PServiceDescription = PServiceDescriptionW;
{$ELSE}
SERVICE_DESCRIPTION = SERVICE_DESCRIPTIONA;
{$EXTERNALSYM SERVICE_DESCRIPTION}
LPSERVICE_DESCRIPTION = LPSERVICE_DESCRIPTIONA;
{$EXTERNALSYM LPSERVICE_DESCRIPTION}
TServiceDescription = TServiceDescriptionA;
PServiceDescription = PServiceDescriptionA;
{$ENDIF}
//
// Actions to take on service failure
//
_SC_ACTION_TYPE = (SC_ACTION_NONE, SC_ACTION_RESTART, SC_ACTION_REBOOT,
SC_ACTION_RUN_COMMAND);
{$EXTERNALSYM _SC_ACTION_TYPE}
SC_ACTION_TYPE = _SC_ACTION_TYPE;
{$EXTERNALSYM SC_ACTION_TYPE}
TScActionType = _SC_ACTION_TYPE;
LPSC_ACTION = ^SC_ACTION;
{$EXTERNALSYM LPSC_ACTION}
_SC_ACTION = record
Type_: SC_ACTION_TYPE;
Delay: DWORD;
end;
{$EXTERNALSYM _SC_ACTION}
SC_ACTION = _SC_ACTION;
{$EXTERNALSYM SC_ACTION}
TScAction = SC_ACTION;
PScAction = LPSC_ACTION;
LPSERVICE_FAILURE_ACTIONSA = ^SERVICE_FAILURE_ACTIONSA;
{$EXTERNALSYM LPSERVICE_FAILURE_ACTIONSA}
_SERVICE_FAILURE_ACTIONSA = record
dwResetPeriod: DWORD;
lpRebootMsg: LPSTR;
lpCommand: LPSTR;
cActions: DWORD;
lpsaActions: LPSC_ACTION;
end;
{$EXTERNALSYM _SERVICE_FAILURE_ACTIONSA}
SERVICE_FAILURE_ACTIONSA = _SERVICE_FAILURE_ACTIONSA;
{$EXTERNALSYM SERVICE_FAILURE_ACTIONSA}
TServiceFailureActionsA = SERVICE_FAILURE_ACTIONSA;
PServiceFailureActionsA = LPSERVICE_FAILURE_ACTIONSA;
LPSERVICE_FAILURE_ACTIONSW = ^SERVICE_FAILURE_ACTIONSW;
{$EXTERNALSYM LPSERVICE_FAILURE_ACTIONSW}
_SERVICE_FAILURE_ACTIONSW = record
dwResetPeriod: DWORD;
lpRebootMsg: LPWSTR;
lpCommand: LPWSTR;
cActions: DWORD;
lpsaActions: LPSC_ACTION;
end;
{$EXTERNALSYM _SERVICE_FAILURE_ACTIONSW}
SERVICE_FAILURE_ACTIONSW = _SERVICE_FAILURE_ACTIONSW;
{$EXTERNALSYM SERVICE_FAILURE_ACTIONSW}
TServiceFailureActionsW = SERVICE_FAILURE_ACTIONSW;
PServiceFailureActionsW = LPSERVICE_FAILURE_ACTIONSW;
{$IFDEF UNICODE}
SERVICE_FAILURE_ACTIONS = SERVICE_FAILURE_ACTIONSW;
{$EXTERNALSYM SERVICE_FAILURE_ACTIONS}
LPSERVICE_FAILURE_ACTIONS = LPSERVICE_FAILURE_ACTIONSW;
{$EXTERNALSYM LPSERVICE_FAILURE_ACTIONS}
TServiceFailureActions = TServiceFailureActionsW;
PServiceFailureActions = PServiceFailureActionsW;
{$ELSE}
SERVICE_FAILURE_ACTIONS = SERVICE_FAILURE_ACTIONSA;
{$EXTERNALSYM SERVICE_FAILURE_ACTIONS}
LPSERVICE_FAILURE_ACTIONS = LPSERVICE_FAILURE_ACTIONSA;
{$EXTERNALSYM LPSERVICE_FAILURE_ACTIONS}
TServiceFailureActions = TServiceFailureActionsA;
PServiceFailureActions = PServiceFailureActionsA;
{$ENDIF}
//
// Handle Types
//
SC_HANDLE = HANDLE;
{$EXTERNALSYM SC_HANDLE}
LPSC_HANDLE = ^SC_HANDLE;
{$EXTERNALSYM LPSC_HANDLE}
SERVICE_STATUS_HANDLE = HANDLE;
{$EXTERNALSYM SERVICE_STATUS_HANDLE}
//
// Info levels for QueryServiceStatusEx
//
_SC_STATUS_TYPE = (SC_STATUS_PROCESS_INFO);
{$EXTERNALSYM _SC_STATUS_TYPE}
SC_STATUS_TYPE = _SC_STATUS_TYPE;
{$EXTERNALSYM SC_STATUS_TYPE}
//
// Info levels for EnumServicesStatusEx
//
_SC_ENUM_TYPE = (SC_ENUM_PROCESS_INFO);
{$EXTERNALSYM _SC_ENUM_TYPE}
SC_ENUM_TYPE = _SC_ENUM_TYPE;
{$EXTERNALSYM SC_ENUM_TYPE}
//
// Service Status Structures
//
LPSERVICE_STATUS = ^SERVICE_STATUS;
{$EXTERNALSYM LPSERVICE_STATUS}
_SERVICE_STATUS = record
dwServiceType: DWORD;
dwCurrentState: DWORD;
dwControlsAccepted: DWORD;
dwWin32ExitCode: DWORD;
dwServiceSpecificExitCode: DWORD;
dwCheckPoint: DWORD;
dwWaitHint: DWORD;
end;
{$EXTERNALSYM _SERVICE_STATUS}
SERVICE_STATUS = _SERVICE_STATUS;
{$EXTERNALSYM SERVICE_STATUS}
TServiceStatus = SERVICE_STATUS;
PServiceStatus = LPSERVICE_STATUS;
LPSERVICE_STATUS_PROCESS = ^SERVICE_STATUS_PROCESS;
{$EXTERNALSYM LPSERVICE_STATUS_PROCESS}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -