📄 winsvc.pas
字号:
LPQUERY_SERVICE_CONFIG = LPQUERY_SERVICE_CONFIGA;
{$EXTERNALSYM LPQUERY_SERVICE_CONFIG}
TQueryServiceConfig = TQueryServiceConfigA;
PQueryServiceConfig = PQueryServiceConfigA;
{$ENDIF}
//
// Function Prototype for the Service Main Function
//
type
LPSERVICE_MAIN_FUNCTIONW = procedure (dwNumServicesArgs: DWORD;
lpServiceArgVectors: LPWSTR); stdcall;
{$EXTERNALSYM LPSERVICE_MAIN_FUNCTIONW}
LPSERVICE_MAIN_FUNCTIONA = procedure (dwNumServicesArgs: DWORD;
lpServiceArgVectors: LPSTR); stdcall;
{$EXTERNALSYM LPSERVICE_MAIN_FUNCTIONA}
TServiceMainFunctionA = LPSERVICE_MAIN_FUNCTIONA;
TServiceMainFunctionW = LPSERVICE_MAIN_FUNCTIONW;
{$IFDEF UNICODE}
LPSERVICE_MAIN_FUNCTION = LPSERVICE_MAIN_FUNCTIONW;
{$EXTERNALSYM LPSERVICE_MAIN_FUNCTION}
TServiceMainFunction = LPSERVICE_MAIN_FUNCTIONW;
{$ELSE}
LPSERVICE_MAIN_FUNCTION = LPSERVICE_MAIN_FUNCTIONA;
{$EXTERNALSYM LPSERVICE_MAIN_FUNCTION}
TServiceMainFunction = LPSERVICE_MAIN_FUNCTIONA;
{$ENDIF}
//
// Service Start Table
//
LPSERVICE_TABLE_ENTRYA = ^SERVICE_TABLE_ENTRYA;
{$EXTERNALSYM LPSERVICE_TABLE_ENTRYA}
_SERVICE_TABLE_ENTRYA = record
lpServiceName: LPSTR;
lpServiceProc: LPSERVICE_MAIN_FUNCTIONA;
end;
{$EXTERNALSYM _SERVICE_TABLE_ENTRYA}
SERVICE_TABLE_ENTRYA = _SERVICE_TABLE_ENTRYA;
{$EXTERNALSYM SERVICE_TABLE_ENTRYA}
TServiceTableEntryA = SERVICE_TABLE_ENTRYA;
PServiceTableEntryA = LPSERVICE_TABLE_ENTRYA;
LPSERVICE_TABLE_ENTRYW = ^SERVICE_TABLE_ENTRYW;
{$EXTERNALSYM LPSERVICE_TABLE_ENTRYW}
_SERVICE_TABLE_ENTRYW = record
lpServiceName: LPWSTR;
lpServiceProc: LPSERVICE_MAIN_FUNCTIONW;
end;
{$EXTERNALSYM _SERVICE_TABLE_ENTRYW}
SERVICE_TABLE_ENTRYW = _SERVICE_TABLE_ENTRYW;
{$EXTERNALSYM SERVICE_TABLE_ENTRYW}
TServiceTableEntryW = SERVICE_TABLE_ENTRYW;
PServiceTableEntryW = LPSERVICE_TABLE_ENTRYW;
{$IFDEF UNICODE}
SERVICE_TABLE_ENTRY = SERVICE_TABLE_ENTRYW;
LPSERVICE_TABLE_ENTRY = LPSERVICE_TABLE_ENTRYW;
TServiceTableEntry = TServiceTableEntryW;
PServiceTableEntry = PServiceTableEntryW;
{$ELSE}
SERVICE_TABLE_ENTRY = SERVICE_TABLE_ENTRYA;
LPSERVICE_TABLE_ENTRY = LPSERVICE_TABLE_ENTRYA;
TServiceTableEntry = TServiceTableEntryA;
PServiceTableEntry = PServiceTableEntryA;
{$ENDIF}
//
// Prototype for the Service Control Handler Function
//
LPHANDLER_FUNCTION = procedure (dwControl: DWORD); stdcall;
{$EXTERNALSYM LPHANDLER_FUNCTION}
THandlerFunction = LPHANDLER_FUNCTION;
LPHANDLER_FUNCTION_EX = function (dwControl, dwEventType: DWORD;
lpEventData, lpContext: LPVOID): DWORD; stdcall;
{$EXTERNALSYM LPHANDLER_FUNCTION_EX}
THandlerFunctionEx = LPHANDLER_FUNCTION_EX;
///////////////////////////////////////////////////////////////////////////
// API Function Prototypes
///////////////////////////////////////////////////////////////////////////
function ChangeServiceConfigA(hService: SC_HANDLE; dwServiceType, dwStartType,
dwErrorControl: DWORD; lpBinaryPathName, lpLoadOrderGroup: LPCSTR;
lpdwTagId: LPDWORD; lpDependencies, lpServiceStartName, lpPassword,
lpDisplayName: LPCSTR): BOOL; stdcall;
{$EXTERNALSYM ChangeServiceConfigA}
function ChangeServiceConfigW(hService: SC_HANDLE; dwServiceType, dwStartType,
dwErrorControl: DWORD; lpBinaryPathName, lpLoadOrderGroup: LPCWSTR;
lpdwTagId: LPDWORD; lpDependencies, lpServiceStartName, lpPassword,
lpDisplayName: LPCWSTR): BOOL; stdcall;
{$EXTERNALSYM ChangeServiceConfigW}
{$IFDEF UNICODE}
function ChangeServiceConfig(hService: SC_HANDLE; dwServiceType, dwStartType,
dwErrorControl: DWORD; lpBinaryPathName, lpLoadOrderGroup: LPCWSTR;
lpdwTagId: LPDWORD; lpDependencies, lpServiceStartName, lpPassword,
lpDisplayName: LPCWSTR): BOOL; stdcall;
{$EXTERNALSYM ChangeServiceConfig}
{$ELSE}
function ChangeServiceConfig(hService: SC_HANDLE; dwServiceType, dwStartType,
dwErrorControl: DWORD; lpBinaryPathName, lpLoadOrderGroup: LPCSTR;
lpdwTagId: LPDWORD; lpDependencies, lpServiceStartName, lpPassword,
lpDisplayName: LPCSTR): BOOL; stdcall;
{$EXTERNALSYM ChangeServiceConfig}
{$ENDIF}
function ChangeServiceConfig2A(hService: SC_HANDLE; dwInfoLevel: DWORD;
lpInfo: LPVOID): BOOL; stdcall;
{$EXTERNALSYM ChangeServiceConfig2A}
function ChangeServiceConfig2W(hService: SC_HANDLE; dwInfoLevel: DWORD;
lpInfo: LPVOID): BOOL; stdcall;
{$EXTERNALSYM ChangeServiceConfig2W}
{$IFDEF UNICODE}
function ChangeServiceConfig2(hService: SC_HANDLE; dwInfoLevel: DWORD;
lpInfo: LPVOID): BOOL; stdcall;
{$EXTERNALSYM ChangeServiceConfig2}
{$ELSE}
function ChangeServiceConfig2(hService: SC_HANDLE; dwInfoLevel: DWORD;
lpInfo: LPVOID): BOOL; stdcall;
{$EXTERNALSYM ChangeServiceConfig2}
{$ENDIF}
function CloseServiceHandle(hSCObject: SC_HANDLE): BOOL; stdcall;
{$EXTERNALSYM CloseServiceHandle}
function ControlService(hService: SC_HANDLE; dwControl: DWORD;
var lpServiceStatus: SERVICE_STATUS): BOOL; stdcall;
{$EXTERNALSYM ControlService}
function CreateServiceA(hSCManager: SC_HANDLE; lpServiceName, lpDisplayName: LPCSTR;
dwDesiredAccess, dwServiceType, dwStartType, dwErrorControl: DWORD;
lpBinaryPathName, lpLoadOrderGroup: LPCSTR; lpdwTagId: LPDWORD;
lpDependencies, lpServiceStartName, lpPassword: LPCSTR): SC_HANDLE; stdcall;
{$EXTERNALSYM CreateServiceA}
function CreateServiceW(hSCManager: SC_HANDLE; lpServiceName, lpDisplayName: LPCWSTR;
dwDesiredAccess, dwServiceType, dwStartType, dwErrorControl: DWORD;
lpBinaryPathName, lpLoadOrderGroup: LPCWSTR; lpdwTagId: LPDWORD;
lpDependencies, lpServiceStartName, lpPassword: LPCWSTR): SC_HANDLE; stdcall;
{$EXTERNALSYM CreateServiceW}
{$IFDEF UNICODE}
function CreateService(hSCManager: SC_HANDLE; lpServiceName, lpDisplayName: LPCWSTR;
dwDesiredAccess, dwServiceType, dwStartType, dwErrorControl: DWORD;
lpBinaryPathName, lpLoadOrderGroup: LPCWSTR; lpdwTagId: LPDWORD;
lpDependencies, lpServiceStartName, lpPassword: LPCWSTR): SC_HANDLE; stdcall;
{$EXTERNALSYM CreateService}
{$ELSE}
function CreateService(hSCManager: SC_HANDLE; lpServiceName, lpDisplayName: LPCSTR;
dwDesiredAccess, dwServiceType, dwStartType, dwErrorControl: DWORD;
lpBinaryPathName, lpLoadOrderGroup: LPCSTR; lpdwTagId: LPDWORD;
lpDependencies, lpServiceStartName, lpPassword: LPCSTR): SC_HANDLE; stdcall;
{$EXTERNALSYM CreateService}
{$ENDIF}
function DeleteService(hService: SC_HANDLE): BOOL; stdcall;
{$EXTERNALSYM DeleteService}
function EnumDependentServicesA(hService: SC_HANDLE; dwServiceState: DWORD;
lpServices: LPENUM_SERVICE_STATUSA; cbBufSize: DWORD; var pcbBytesNeeded,
lpServicesReturned: DWORD): BOOL; stdcall;
{$EXTERNALSYM EnumDependentServicesA}
function EnumDependentServicesW(hService: SC_HANDLE; dwServiceState: DWORD;
lpServices: LPENUM_SERVICE_STATUSW; cbBufSize: DWORD; var pcbBytesNeeded,
lpServicesReturned: DWORD): BOOL; stdcall;
{$EXTERNALSYM EnumDependentServicesW}
{$IFDEF UNICODE}
function EnumDependentServices(hService: SC_HANDLE; dwServiceState: DWORD;
lpServices: LPENUM_SERVICE_STATUSW; cbBufSize: DWORD; var pcbBytesNeeded,
lpServicesReturned: DWORD): BOOL; stdcall;
{$EXTERNALSYM EnumDependentServices}
{$ELSE}
function EnumDependentServices(hService: SC_HANDLE; dwServiceState: DWORD;
lpServices: LPENUM_SERVICE_STATUSA; cbBufSize: DWORD; var pcbBytesNeeded,
lpServicesReturned: DWORD): BOOL; stdcall;
{$EXTERNALSYM EnumDependentServices}
{$ENDIF}
function EnumServicesStatusA(hSCManager: SC_HANDLE; dwServiceType: DWORD;
dwServiceState: DWORD; lpServices: LPENUM_SERVICE_STATUSA; cbBufSize: DWORD;
var pcbBytesNeeded, lpServicesReturned, lpResumeHandle: DWORD): BOOL; stdcall;
{$EXTERNALSYM EnumServicesStatusA}
function EnumServicesStatusW(hSCManager: SC_HANDLE; dwServiceType: DWORD;
dwServiceState: DWORD; lpServices: LPENUM_SERVICE_STATUSW; cbBufSize: DWORD;
var pcbBytesNeeded, lpServicesReturned, lpResumeHandle: DWORD): BOOL; stdcall;
{$EXTERNALSYM EnumServicesStatusW}
{$IFDEF UNICODE}
function EnumServicesStatus(hSCManager: SC_HANDLE; dwServiceType: DWORD;
dwServiceState: DWORD; lpServices: LPENUM_SERVICE_STATUSW; cbBufSize: DWORD;
var pcbBytesNeeded, lpServicesReturned, lpResumeHandle: DWORD): BOOL; stdcall;
{$EXTERNALSYM EnumServicesStatus}
{$ELSE}
function EnumServicesStatus(hSCManager: SC_HANDLE; dwServiceType: DWORD;
dwServiceState: DWORD; lpServices: LPENUM_SERVICE_STATUSA; cbBufSize: DWORD;
var pcbBytesNeeded, lpServicesReturned, lpResumeHandle: DWORD): BOOL; stdcall;
{$EXTERNALSYM EnumServicesStatus}
{$ENDIF}
function EnumServicesStatusExA(hSCManager: SC_HANDLE; InfoLevel: SC_ENUM_TYPE;
dwServiceType: DWORD; dwServiceState: DWORD; lpServices: LPBYTE;
cbBufSize: DWORD; var pcbBytesNeeded, lpServicesReturned, lpResumeHandle: DWORD;
pszGroupName: LPCSTR): BOOL; stdcall;
{$EXTERNALSYM EnumServicesStatusExA}
function EnumServicesStatusExW(hSCManager: SC_HANDLE; InfoLevel: SC_ENUM_TYPE;
dwServiceType: DWORD; dwServiceState: DWORD; lpServices: LPBYTE;
cbBufSize: DWORD; var pcbBytesNeeded, lpServicesReturned, lpResumeHandle: DWORD;
pszGroupName: LPCWSTR): BOOL; stdcall;
{$EXTERNALSYM EnumServicesStatusExW}
{$IFDEF UNICODE}
function EnumServicesStatusEx(hSCManager: SC_HANDLE; InfoLevel: SC_ENUM_TYPE;
dwServiceType: DWORD; dwServiceState: DWORD; lpServices: LPBYTE;
cbBufSize: DWORD; var pcbBytesNeeded, lpServicesReturned, lpResumeHandle: DWORD;
pszGroupName: LPCWSTR): BOOL; stdcall;
{$EXTERNALSYM EnumServicesStatusEx}
{$ELSE}
function EnumServicesStatusEx(hSCManager: SC_HANDLE; InfoLevel: SC_ENUM_TYPE;
dwServiceType: DWORD; dwServiceState: DWORD; lpServices: LPBYTE;
cbBufSize: DWORD; var pcbBytesNeeded, lpServicesReturned, lpResumeHandle: DWORD;
pszGroupName: LPCSTR): BOOL; stdcall;
{$EXTERNALSYM EnumServicesStatusEx}
{$ENDIF}
function GetServiceKeyNameA(hSCManager: SC_HANDLE; lpDisplayName: LPCSTR;
lpServiceName: LPSTR; var lpcchBuffer: DWORD): BOOL; stdcall;
{$EXTERNALSYM GetServiceKeyNameA}
function GetServiceKeyNameW(hSCManager: SC_HANDLE; lpDisplayName: LPCWSTR;
lpServiceName: LPWSTR; var lpcchBuffer: DWORD): BOOL; stdcall;
{$EXTERNALSYM GetServiceKeyNameW}
{$IFDEF UNICODE}
function GetServiceKeyName(hSCManager: SC_HANDLE; lpDisplayName: LPCWSTR;
lpServiceName: LPWSTR; var lpcchBuffer: DWORD): BOOL; stdcall;
{$EXTERNALSYM GetServiceKeyName}
{$ELSE}
function GetServiceKeyName(hSCManager: SC_HANDLE; lpDisplayName: LPCSTR;
lpServiceName: LPSTR; var lpcchBuffer: DWORD): BOOL; stdcall;
{$EXTERNALSYM GetServiceKeyName}
{$ENDIF}
function GetServiceDisplayNameA(hSCManager: SC_HANDLE; lpServiceName: LPCSTR;
lpDisplayName: LPSTR; var lpcchBuffer: DWORD): BOOL; stdcall;
{$EXTERNALSYM GetServiceDisplayNameA}
function GetServiceDisplayNameW(hSCManager: SC_HANDLE; lpServiceName: LPCWSTR;
lpDisplayName: LPWSTR; var lpcchBuffer: DWORD): BOOL; stdcall;
{$EXTERNALSYM GetServiceDisplayNameW}
{$IFDEF UNICODE}
function GetServiceDisplayName(hSCManager: SC_HANDLE; lpServiceName: LPCWSTR;
lpDisplayName: LPWSTR; var lpcchBuffer: DWORD): BOOL; stdcall;
{$EXTERNALSYM GetServiceDisplayName}
{$ELSE}
function GetServiceDisplayName(hSCManager: SC_HANDLE; lpServiceName: LPCSTR;
lpDisplayName: LPSTR; var lpcchBuffer: DWORD): BOOL; stdcall;
{$EXTERNALSYM GetServiceDisplayName}
{$ENDIF}
function LockServiceDatabase(hSCManager: SC_HANDLE): SC_LOCK; stdcall;
{$EXTERNALSYM LockServiceDatabase}
function NotifyBootConfigStatus(BootAcceptable: BOOL): BOOL; stdcall;
{$EXTERNALSYM NotifyBootConfigStatus}
function OpenSCManagerA(lpMachineName: LPCSTR; lpDatabaseName: LPCSTR;
dwDesiredAccess: DWORD): SC_HANDLE; stdcall;
{$EXTERNALSYM OpenSCManagerA}
function OpenSCManagerW(lpMachineName: LPCWSTR; lpDatabaseName: LPCWSTR;
dwDesiredAccess: DWORD): SC_HANDLE; stdcall;
{$EXTERNALSYM OpenSCManagerW}
{$IFDEF UNICODE}
function OpenSCManager(lpMachineName: LPCWSTR; lpDatabaseName: LPCWSTR;
dwDesiredAccess: DWORD): SC_HANDLE; stdcall;
{$EXTERNALSYM OpenSCManager}
{$ELSE}
function OpenSCManager(lpMachineName: LPCSTR; lpDatabaseName: LPCSTR;
dwDesiredAccess: DWORD): SC_HANDLE; stdcall;
{$EXTERNALSYM OpenSCManager}
{$ENDIF}
function OpenServiceA(hSCManager: SC_HANDLE; lpServiceName: LPCSTR;
dwDesiredAccess: DWORD): SC_HANDLE; stdcall;
{$EXTERNALSYM OpenServiceA}
function OpenServiceW(hSCManager: SC_HANDLE; lpServiceName: LPCWSTR;
dwDesiredAccess: DWORD): SC_HANDLE; stdcall;
{$EXTERNALSYM OpenServiceW}
{$IFDEF UNICODE}
function OpenService(hSCManager: SC_HANDLE; lpServiceName: LPCWSTR;
dwDesiredAccess: DWORD): SC_HANDLE; stdcall;
{$EXTERNALSYM OpenService}
{$ELSE}
function OpenService(hSCManager: SC_HANDLE; lpServiceName: LPCSTR;
dwDesiredAccess: DWORD): SC_HANDLE; stdcall;
{$EXTERNALSYM OpenService}
{$ENDIF}
function QueryServiceConfigA(hService: SC_HANDLE;
lpServiceConfig: LPQUERY_SERVICE_CONFIGA; cbBufSize: DWORD;
var pcbBytesNeeded: DWORD): BOOL; stdcall;
{$EXTERNALSYM QueryServiceConfigA}
function QueryServiceConfigW(hService: SC_HANDLE;
lpServiceConfig: LPQUERY_SERVICE_CONFIGW; cbBufSize: DWORD;
var pcbBytesNeeded: DWORD): BOOL; stdcall;
{$EXTERNALSYM QueryServiceConfigW}
{$IFDEF UNICODE}
function QueryServiceConfig(hService: SC_HANDLE;
lpServiceConfig: LPQUERY_SERVICE_CONFIGW; cbBufSize: DWORD;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -