mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2026-01-11 04:42:35 +01:00
336 lines
13 KiB
ObjectPascal
336 lines
13 KiB
ObjectPascal
{******************************************************************************}
|
|
{ }
|
|
{ Security Service Attachements API interface Unit for Object Pascal }
|
|
{ }
|
|
{ Portions created by Microsoft are Copyright (C) 1995-2001 Microsoft }
|
|
{ Corporation. All Rights Reserved. }
|
|
{ }
|
|
{ The original file is: scesvc.h, released June 2000. The original Pascal }
|
|
{ code is: SceSvc.pas, released December 2000. The initial developer of the }
|
|
{ Pascal code is Marcel van Brakel (brakelm att chello dott 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 }
|
|
{ APILIB home page, located at http://jedi-apilib.sourceforge.net }
|
|
{ }
|
|
{ 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 JwaSceSvc;
|
|
|
|
{$WEAKPACKAGEUNIT}
|
|
|
|
{$HPPEMIT ''}
|
|
{$HPPEMIT '#include "scesvc.h"'}
|
|
{$HPPEMIT ''}
|
|
{$HPPEMIT 'typedef SCESVC_HANDLE *PSCESVC_HANDLE'}
|
|
{$HPPEMIT ''}
|
|
|
|
{$I jediapilib.inc}
|
|
|
|
interface
|
|
|
|
uses
|
|
JwaWinType;
|
|
|
|
type
|
|
SCESTATUS = DWORD;
|
|
{$EXTERNALSYM SCESTATUS}
|
|
|
|
const
|
|
SCESTATUS_SUCCESS = 0;
|
|
{$EXTERNALSYM SCESTATUS_SUCCESS}
|
|
SCESTATUS_INVALID_PARAMETER = 1;
|
|
{$EXTERNALSYM SCESTATUS_INVALID_PARAMETER}
|
|
SCESTATUS_RECORD_NOT_FOUND = 2;
|
|
{$EXTERNALSYM SCESTATUS_RECORD_NOT_FOUND}
|
|
SCESTATUS_INVALID_DATA = 3;
|
|
{$EXTERNALSYM SCESTATUS_INVALID_DATA}
|
|
SCESTATUS_OBJECT_EXIST = 4;
|
|
{$EXTERNALSYM SCESTATUS_OBJECT_EXIST}
|
|
SCESTATUS_BUFFER_TOO_SMALL = 5;
|
|
{$EXTERNALSYM SCESTATUS_BUFFER_TOO_SMALL}
|
|
SCESTATUS_PROFILE_NOT_FOUND = 6;
|
|
{$EXTERNALSYM SCESTATUS_PROFILE_NOT_FOUND}
|
|
SCESTATUS_BAD_FORMAT = 7;
|
|
{$EXTERNALSYM SCESTATUS_BAD_FORMAT}
|
|
SCESTATUS_NOT_ENOUGH_RESOURCE = 8;
|
|
{$EXTERNALSYM SCESTATUS_NOT_ENOUGH_RESOURCE}
|
|
SCESTATUS_ACCESS_DENIED = 9;
|
|
{$EXTERNALSYM SCESTATUS_ACCESS_DENIED}
|
|
SCESTATUS_CANT_DELETE = 10;
|
|
{$EXTERNALSYM SCESTATUS_CANT_DELETE}
|
|
SCESTATUS_PREFIX_OVERFLOW = 11;
|
|
{$EXTERNALSYM SCESTATUS_PREFIX_OVERFLOW}
|
|
SCESTATUS_OTHER_ERROR = 12;
|
|
{$EXTERNALSYM SCESTATUS_OTHER_ERROR}
|
|
SCESTATUS_ALREADY_RUNNING = 13;
|
|
{$EXTERNALSYM SCESTATUS_ALREADY_RUNNING}
|
|
SCESTATUS_SERVICE_NOT_SUPPORT = 14;
|
|
{$EXTERNALSYM SCESTATUS_SERVICE_NOT_SUPPORT}
|
|
SCESTATUS_MOD_NOT_FOUND = 15;
|
|
{$EXTERNALSYM SCESTATUS_MOD_NOT_FOUND}
|
|
SCESTATUS_EXCEPTION_IN_SERVER = 16;
|
|
{$EXTERNALSYM SCESTATUS_EXCEPTION_IN_SERVER}
|
|
SCESTATUS_NO_TEMPLATE_GIVEN = 17;
|
|
{$EXTERNALSYM SCESTATUS_NO_TEMPLATE_GIVEN}
|
|
SCESTATUS_NO_MAPPING = 18;
|
|
{$EXTERNALSYM SCESTATUS_NO_MAPPING}
|
|
SCESTATUS_TRUST_FAIL = 19;
|
|
{$EXTERNALSYM SCESTATUS_TRUST_FAIL}
|
|
|
|
type
|
|
PSCESVC_CONFIGURATION_LINE = ^SCESVC_CONFIGURATION_LINE;
|
|
{$EXTERNALSYM PSCESVC_CONFIGURATION_LINE}
|
|
_SCESVC_CONFIGURATION_LINE_ = record
|
|
Key: LPTSTR;
|
|
Value: LPTSTR;
|
|
ValueLen: DWORD; // number of bytes
|
|
end;
|
|
{$EXTERNALSYM _SCESVC_CONFIGURATION_LINE_}
|
|
SCESVC_CONFIGURATION_LINE = _SCESVC_CONFIGURATION_LINE_;
|
|
{$EXTERNALSYM SCESVC_CONFIGURATION_LINE}
|
|
TScesvcConfigurationLine = SCESVC_CONFIGURATION_LINE;
|
|
PScesvcConfigurationLine = PSCESVC_CONFIGURATION_LINE;
|
|
|
|
PSCESVC_CONFIGURATION_INFO = ^SCESVC_CONFIGURATION_INFO;
|
|
{$EXTERNALSYM PSCESVC_CONFIGURATION_INFO}
|
|
_SCESVC_CONFIGURATION_INFO_ = record
|
|
Count: DWORD;
|
|
Lines: PSCESVC_CONFIGURATION_INFO;
|
|
end;
|
|
{$EXTERNALSYM _SCESVC_CONFIGURATION_INFO_}
|
|
SCESVC_CONFIGURATION_INFO = _SCESVC_CONFIGURATION_INFO_;
|
|
{$EXTERNALSYM SCESVC_CONFIGURATION_INFO}
|
|
TScesvcConfigurationInfo = SCESVC_CONFIGURATION_INFO;
|
|
PScesvcConfigurationInfo = PSCESVC_CONFIGURATION_INFO;
|
|
|
|
SCE_HANDLE = PVOID;
|
|
{$EXTERNALSYM SCE_HANDLE}
|
|
SCE_ENUMERATION_CONTEXT = ULONG;
|
|
{$EXTERNALSYM SCE_ENUMERATION_CONTEXT}
|
|
PSCE_ENUMERATION_CONTEXT = ^SCE_ENUMERATION_CONTEXT;
|
|
{$EXTERNALSYM PSCE_ENUMERATION_CONTEXT}
|
|
|
|
_SCESVC_INFO_TYPE = (
|
|
SceSvcConfigurationInfo,
|
|
SceSvcMergedPolicyInfo,
|
|
SceSvcAnalysisInfo,
|
|
SceSvcInternalUse); // !!!do not use this type!!!
|
|
{$EXTERNALSYM _SCESVC_INFO_TYPE}
|
|
SCESVC_INFO_TYPE = _SCESVC_INFO_TYPE;
|
|
{$EXTERNALSYM SCESVC_INFO_TYPE}
|
|
TScesvcInfoType = _SCESVC_INFO_TYPE;
|
|
|
|
const
|
|
SCE_ROOT_PATH = 'Software\Microsoft\Windows NT\CurrentVersion\SeCEdit';
|
|
{$EXTERNALSYM SCE_ROOT_PATH}
|
|
|
|
SCE_ROOT_SERVICE_PATH = SCE_ROOT_PATH + '\SvcEngs';
|
|
{$EXTERNALSYM SCE_ROOT_SERVICE_PATH}
|
|
|
|
type
|
|
SCESVC_HANDLE = PVOID;
|
|
{$EXTERNALSYM SCESVC_HANDLE}
|
|
|
|
PSCESVC_HANDLE = ^SCESVC_HANDLE;
|
|
{$NODEFINE PSCESVC_HANDLE}
|
|
|
|
PSCESVC_ANALYSIS_LINE = ^SCESVC_ANALYSIS_LINE;
|
|
{$EXTERNALSYM PSCESVC_ANALYSIS_LINE}
|
|
_SCESVC_ANALYSIS_LINE_ = record
|
|
Key: LPTSTR;
|
|
Value: PBYTE;
|
|
ValueLen: DWORD; // number of bytes
|
|
end;
|
|
{$EXTERNALSYM _SCESVC_ANALYSIS_LINE_}
|
|
SCESVC_ANALYSIS_LINE = _SCESVC_ANALYSIS_LINE_;
|
|
{$EXTERNALSYM SCESVC_ANALYSIS_LINE}
|
|
TScesvcAnalysisLine = SCESVC_ANALYSIS_LINE;
|
|
PScesvcAnalysisLine = PSCESVC_ANALYSIS_LINE;
|
|
|
|
PSCESVC_ANALYSIS_INFO = ^SCESVC_ANALYSIS_INFO;
|
|
{$EXTERNALSYM PSCESVC_ANALYSIS_INFO}
|
|
_SCESVC_ANALYSIS_INFO_ = record
|
|
Count: DWORD;
|
|
Lines: PSCESVC_ANALYSIS_LINE;
|
|
end;
|
|
{$EXTERNALSYM _SCESVC_ANALYSIS_INFO_}
|
|
SCESVC_ANALYSIS_INFO = _SCESVC_ANALYSIS_INFO_;
|
|
{$EXTERNALSYM SCESVC_ANALYSIS_INFO}
|
|
TScesvcAnalysisInfo = SCESVC_ANALYSIS_INFO;
|
|
PScesvcAnalysisInfo = PSCESVC_ANALYSIS_INFO;
|
|
|
|
const
|
|
SCESVC_ENUMERATION_MAX = 100;
|
|
{$EXTERNALSYM SCESVC_ENUMERATION_MAX}
|
|
|
|
type
|
|
PFSCE_QUERY_INFO = function(sceHandle: SCE_HANDLE; sceType: SCESVC_INFO_TYPE;
|
|
lpPrefix: LPTSTR; bExact: BOOL; ppvInfo: PPVOID;
|
|
var psceEnumHandle: SCE_ENUMERATION_CONTEXT): SCESTATUS; stdcall;
|
|
{$EXTERNALSYM PFSCE_QUERY_INFO}
|
|
|
|
PFSCE_SET_INFO = function(sceHandle: SCE_HANDLE; sceType: SCESVC_INFO_TYPE;
|
|
lpPrefix: LPTSTR; bExact: BOOL; pvInfo: PVOID): SCESTATUS; stdcall;
|
|
{$EXTERNALSYM PFSCE_SET_INFO}
|
|
|
|
PFSCE_FREE_INFO = function(pvServiceInfo: PVOID): SCESTATUS; stdcall;
|
|
{$EXTERNALSYM PFSCE_FREE_INFO}
|
|
|
|
const
|
|
SCE_LOG_LEVEL_ALWAYS = 0;
|
|
{$EXTERNALSYM SCE_LOG_LEVEL_ALWAYS}
|
|
SCE_LOG_LEVEL_ERROR = 1;
|
|
{$EXTERNALSYM SCE_LOG_LEVEL_ERROR}
|
|
SCE_LOG_LEVEL_DETAIL = 2;
|
|
{$EXTERNALSYM SCE_LOG_LEVEL_DETAIL}
|
|
SCE_LOG_LEVEL_DEBUG = 3;
|
|
{$EXTERNALSYM SCE_LOG_LEVEL_DEBUG}
|
|
|
|
type
|
|
PFSCE_LOG_INFO = function(ErrLevel: Integer; Win32rc: DWORD; pErrFmt: LPTSTR {...}): SCESTATUS; stdcall;
|
|
{$EXTERNALSYM PFSCE_LOG_INFO}
|
|
|
|
PSCESVC_CALLBACK_INFO = ^SCESVC_CALLBACK_INFO;
|
|
{$EXTERNALSYM PSCESVC_CALLBACK_INFO}
|
|
_SCESVC_CALLBACK_INFO_ = record
|
|
sceHandle: SCE_HANDLE;
|
|
pfQueryInfo: PFSCE_QUERY_INFO;
|
|
pfSetInfo: PFSCE_SET_INFO;
|
|
pfFreeInfo: PFSCE_FREE_INFO;
|
|
pfLogInfo: PFSCE_LOG_INFO;
|
|
end;
|
|
{$EXTERNALSYM _SCESVC_CALLBACK_INFO_}
|
|
SCESVC_CALLBACK_INFO = _SCESVC_CALLBACK_INFO_;
|
|
{$EXTERNALSYM SCESVC_CALLBACK_INFO}
|
|
TScesvcCallbackInfo = SCESVC_CALLBACK_INFO;
|
|
PScesvcCallbackInfo = PSCESVC_CALLBACK_INFO;
|
|
|
|
PF_ConfigAnalyzeService = function(pSceCbInfo: PSCESVC_CALLBACK_INFO): SCESTATUS; stdcall;
|
|
{$EXTERNALSYM PF_ConfigAnalyzeService}
|
|
|
|
PF_UpdateService = function(pSceCbInfo: PSCESVC_CALLBACK_INFO;
|
|
ServiceInfo: PSCESVC_CONFIGURATION_INFO): SCESTATUS; stdcall;
|
|
{$EXTERNALSYM PF_UpdateService}
|
|
|
|
//
|
|
// headers for extension snap-ins
|
|
// only define this for NT5
|
|
//
|
|
|
|
const
|
|
struuidNodetypeSceTemplateServices = '{24a7f717-1f0c-11d1-affb-00c04fb984f9}';
|
|
{$EXTERNALSYM struuidNodetypeSceTemplateServices}
|
|
lstruuidNodetypeSceTemplateServices = '{24a7f717-1f0c-11d1-affb-00c04fb984f9}';
|
|
{$EXTERNALSYM lstruuidNodetypeSceTemplateServices}
|
|
cNodetypeSceTemplateServices: GUID = (
|
|
D1:$24a7f717; D2:$1f0c; D3:$11d1; D4:($af, $fb, $0, $c0, $4f, $b9, $84, $f9));
|
|
{$EXTERNALSYM cNodetypeSceTemplateServices}
|
|
struuidNodetypeSceAnalysisServices = '{678050c7-1ff8-11d1-affb-00c04fb984f9}';
|
|
{$EXTERNALSYM struuidNodetypeSceAnalysisServices}
|
|
lstruuidNodetypeSceAnalysisServices = '{678050c7-1ff8-11d1-affb-00c04fb984f9}';
|
|
{$EXTERNALSYM lstruuidNodetypeSceAnalysisServices}
|
|
cNodetypeSceAnalysisServices: GUID = (
|
|
D1:$678050c7; D2:$1ff8; D3:$11d1; D4:($af, $fb, $0, $c0, $4f, $b9, $84, $f9));
|
|
{$EXTERNALSYM cNodetypeSceAnalysisServices}
|
|
struuidNodetypeSceEventLog = '{2ce06698-4bf3-11d1-8c30-00c04fb984f9}';
|
|
{$EXTERNALSYM struuidNodetypeSceEventLog}
|
|
lstruuidNodetypeSceEventLog = '{2ce06698-4bf3-11d1-8c30-00c04fb984f9}';
|
|
{$EXTERNALSYM lstruuidNodetypeSceEventLog}
|
|
cNodetypeSceEventLog: GUID = (
|
|
D1:$2ce06698; D2:$4bf3; D3:$11d1; D4:($8c, $30, $0, $c0, $4f, $b9, $84, $f9));
|
|
{$EXTERNALSYM cNodetypeSceEventLog}
|
|
|
|
type
|
|
LPSCESVC_CONFIGURATION_INFO = ^PSCESVC_CONFIGURATION_INFO;
|
|
{$EXTERNALSYM LPSCESVC_CONFIGURATION_INFO}
|
|
LPSCESVC_ANALYSIS_INFO = ^PSCESVC_ANALYSIS_INFO;
|
|
{$EXTERNALSYM LPSCESVC_ANALYSIS_INFO}
|
|
|
|
const
|
|
CCF_SCESVC_ATTACHMENT = 'CCF_SCESVC_ATTACHMENT';
|
|
{$EXTERNALSYM CCF_SCESVC_ATTACHMENT}
|
|
CCF_SCESVC_ATTACHMENT_DATA = 'CCF_SCESVC_ATTACHMENT_DATA';
|
|
{$EXTERNALSYM CCF_SCESVC_ATTACHMENT_DATA}
|
|
|
|
//
|
|
// implemented by service attachment
|
|
//
|
|
|
|
const
|
|
IID_ISceSvcAttachmentPersistInfo: GUID = (
|
|
D1:$6d90e0d0; D2:$200d; D3:$11d1; D4:($af, $fb, $0, $c0, $4f, $b9, $84, $f9));
|
|
{$EXTERNALSYM IID_ISceSvcAttachmentPersistInfo}
|
|
|
|
SID_ISceSvcAttachmentPersistInfo = '{6d90e0d0-200d-11d1-affb-00c04fb984f9}';
|
|
|
|
type
|
|
ISceSvcAttachmentPersistInfo = interface (IUnknown)
|
|
[SID_ISceSvcAttachmentPersistInfo]
|
|
function Save(lpTemplateName: LPTSTR; scesvcHandle: PSCESVC_HANDLE;
|
|
ppvData: PPVOID; pbOverwriteAll: PBOOL): HRESULT; stdcall;
|
|
function IsDirty(lpTemplateName: LPTSTR): HRESULT; stdcall;
|
|
function FreeBuffer(pvData: PVOID): HRESULT; stdcall;
|
|
end;
|
|
{$EXTERNALSYM ISceSvcAttachmentPersistInfo}
|
|
|
|
LPSCESVCATTACHMENTPERSISTINFO = ISceSvcAttachmentPersistInfo;
|
|
{$EXTERNALSYM LPSCESVCATTACHMENTPERSISTINFO}
|
|
|
|
//
|
|
// implemented by SecEdit
|
|
//
|
|
|
|
const
|
|
IID_ISceSvcAttachmentData: GUID = (
|
|
D1:$17c35fde; D2:$200d; D3:$11d1; D4:($af, $fb, $0, $c0, $4f, $b9, $84, $f9));
|
|
{$EXTERNALSYM IID_ISceSvcAttachmentData}
|
|
|
|
SID_ISceSvcAttachmentData = '{17c35fde-200d-11d1-affb-00c04fb984f9}';
|
|
|
|
type
|
|
ISceSvcAttachmentData = interface (IUnknown)
|
|
[SID_ISceSvcAttachmentData]
|
|
function GetData(scesvcHandle: SCESVC_HANDLE; sceType: SCESVC_INFO_TYPE;
|
|
ppvData: PPVOID; psceEnumHandle: PSCE_ENUMERATION_CONTEXT): HRESULT; stdcall;
|
|
function Initialize(lpServiceName, lpTemplateName: LPCTSTR;
|
|
lpSceSvcPersistInfo: LPSCESVCATTACHMENTPERSISTINFO;
|
|
pscesvcHandle: PSCESVC_HANDLE): HRESULT; stdcall;
|
|
function FreeBuffer(pvData: PVOID): HRESULT; stdcall;
|
|
function CloseHandle(scesvcHandle: SCESVC_HANDLE): HRESULT; stdcall;
|
|
end;
|
|
{$EXTERNALSYM ISceSvcAttachmentData}
|
|
|
|
LPSCESVCATTACHMENTDATA = ISceSvcAttachmentData;
|
|
{$EXTERNALSYM LPSCESVCATTACHMENTDATA}
|
|
|
|
implementation
|
|
|
|
end.
|