spiegel-keyman/common/windows/delphi/ext/jwa/Win32API/JwaSoftpub.pas
2022-06-06 08:13:37 +10:00

384 lines
15 KiB
ObjectPascal

{******************************************************************************}
{ }
{ Internet Security Authenticode Policy Provider API interface Unit }
{ for Object Pascal }
{ }
{ Portions created by Microsoft are Copyright (C) 1995-2008 Microsoft }
{ Corporation. All Rights Reserved. }
{ }
{ Portions created by Philip Dittmann are Copyright (C) 2008 }
{ Philip Dittmann. All Rights Reserved. }
{ Portions created by Christian Wimmer are Copyright (C) 2008 }
{ Christian Wimmer. 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 }
{ }
{******************************************************************************}
{$IFNDEF JWA_OMIT_SECTIONS}
unit JwaSoftpub;
{$ENDIF JWA_OMIT_SECTIONS}
{$HPPEMIT ''}
{$HPPEMIT '#include "Softpub.h"'}
{$HPPEMIT ''}
{$IFNDEF JWA_OMIT_SECTIONS}
{$I ..\Includes\JediAPILib.inc}
{$IFDEF DELPHI6_UP}
{$ALIGN 8}
{$ELSE}
{$ALIGN+} //WARNING: Incorrect alignment in this Delphi
{$ENDIF DELPHI6_UP}
interface
{$IFDEF JWA_WINDOWS}
uses JwaWindows;
{$ELSE}
uses JwaWinType, JwaWinCrypt;
{$ENDIF JWA_WINDOWS}
{$ENDIF JWA_OMIT_SECTIONS}
{$IFNDEF JWA_IMPLEMENTATIONSECTION}
//////////////////////////////////////////////////////////////////////////////
//
// Softpub Policy Provider defines
//----------------------------------------------------------------------------
// The following are definitions of the Microsoft Authenticode Policy Provider
// (WINTRUST.DLL's Policy Provider)
//
const
{$EXTERNALSYM SP_POLICY_PROVIDER_DLL_NAME}
SP_POLICY_PROVIDER_DLL_NAME = 'WINTRUST.DLL';
//////////////////////////////////////////////////////////////////////////////
//
// WINTRUST_ACTION_GENERIC_VERIFY_V2 Guid (Authenticode)
//----------------------------------------------------------------------------
// Assigned to the pgActionID parameter of WinVerifyTrust to verify the
// authenticity of a file/object using the Microsoft Authenticode
// Policy Provider,
//
// {00AAC56B-CD44-11d0-8CC2-00C04FC295EE}
//
{$EXTERNALSYM WINTRUST_ACTION_GENERIC_VERIFY_V2}
WINTRUST_ACTION_GENERIC_VERIFY_V2: TGUID = '{00aac56b-cd44-11d0-8cc2-00c04fc295ee}';
{$EXTERNALSYM SP_INIT_FUNCTION}
SP_INIT_FUNCTION = 'SoftpubInitialize';
{$EXTERNALSYM SP_OBJTRUST_FUNCTION}
SP_OBJTRUST_FUNCTION = 'SoftpubLoadMessage';
{$EXTERNALSYM SP_SIGTRUST_FUNCTION}
SP_SIGTRUST_FUNCTION = 'SoftpubLoadSignature';
{$EXTERNALSYM SP_CHKCERT_FUNCTION}
SP_CHKCERT_FUNCTION = 'SoftpubCheckCert';
{$EXTERNALSYM SP_FINALPOLICY_FUNCTION}
SP_FINALPOLICY_FUNCTION = 'SoftpubAuthenticode';
{$EXTERNALSYM SP_CLEANUPPOLICY_FUNCTION}
SP_CLEANUPPOLICY_FUNCTION = 'SoftpubCleanup';
//////////////////////////////////////////////////////////////////////////////
//
// WINTRUST_ACTION_TRUSTPROVIDER_TEST (Authenticode TEST)
//----------------------------------------------------------------------------
// Assigned to the pgActionID parameter of WinVerifyTrust to dump
// the CRYPT_PROVIDER_DATA structure to a file after calling the
// Authenticode Policy Provider.
//
// {573E31F8-DDBA-11d0-8CCB-00C04FC295EE}
//
{$EXTERNALSYM WINTRUST_ACTION_TRUSTPROVIDER_TEST}
WINTRUST_ACTION_TRUSTPROVIDER_TEST: TGUID = '{573e31f8-ddba-11d0-8ccb-00c04fc295ee}';
{$EXTERNALSYM SP_TESTDUMPPOLICY_FUNCTION_TEST}
SP_TESTDUMPPOLICY_FUNCTION_TEST = 'SoftpubDumpStructure';
//////////////////////////////////////////////////////////////////////////////
//
// WINTRUST_ACTION_GENERIC_CERT_VERIFY
//----------------------------------------------------------------------------
// Assigned to the pgActionID parameter of WinVerifyTrust to verify
// a certificate chain only. This is only valid when passing in a
// certificate context in the WinVerifyTrust input structures.
//
// {189A3842-3041-11d1-85E1-00C04FC295EE}
//
{$EXTERNALSYM WINTRUST_ACTION_GENERIC_CERT_VERIFY}
WINTRUST_ACTION_GENERIC_CERT_VERIFY: TGUID = '{189a3842-3041-11d1-85e1-00c04fc295ee}';
{$EXTERNALSYM SP_GENERIC_CERT_INIT_FUNCTION}
SP_GENERIC_CERT_INIT_FUNCTION = 'SoftpubDefCertInit';
//////////////////////////////////////////////////////////////////////////////
//
// WINTRUST_ACTION_GENERIC_CHAIN_VERIFY
//----------------------------------------------------------------------------
// Assigned to the pgActionID parameter of WinVerifyTrust to verify
// certificate chains created from any object type: file, cert, signer, ...
// A callback is provided to implement the final chain policy using
// the chain context for each signer and counter signer.
//
// {fc451c16-ac75-11d1-b4b8-00c04fb66ea0}
//
{$EXTERNALSYM WINTRUST_ACTION_GENERIC_CHAIN_VERIFY}
WINTRUST_ACTION_GENERIC_CHAIN_VERIFY: TGUID = '{fc451c16-ac75-11d1-b4b8-00c04fb66ea0}';
{$EXTERNALSYM GENERIC_CHAIN_FINALPOLICY_FUNCTION}
GENERIC_CHAIN_FINALPOLICY_FUNCTION = 'GenericChainFinalProv';
{$EXTERNALSYM GENERIC_CHAIN_CERTTRUST_FUNCTION}
GENERIC_CHAIN_CERTTRUST_FUNCTION = 'GenericChainCertificateTrust';
type
PPWTD_GENERIC_CHAIN_POLICY_SIGNER_INFO = ^PWTD_GENERIC_CHAIN_POLICY_SIGNER_INFO; //no external!
{$EXTERNALSYM PWTD_GENERIC_CHAIN_POLICY_SIGNER_INFO}
PWTD_GENERIC_CHAIN_POLICY_SIGNER_INFO = ^_WTD_GENERIC_CHAIN_POLICY_SIGNER_INFO;
{$EXTERNALSYM _WTD_GENERIC_CHAIN_POLICY_SIGNER_INFO}
_WTD_GENERIC_CHAIN_POLICY_SIGNER_INFO = record
cbStructOrSize : DWORD;
pChainContext : PCCERT_CHAIN_CONTEXT;
// SGNR_TYPE_TIMESTAMP defined in wintrust.h
dwSignerType : DWORD;
pMsgSignerInfo : PCMSG_SIGNER_INFO;
dwError : DWORD;
cCounterSigner : DWORD;
rgpCounterSigner : PPWTD_GENERIC_CHAIN_POLICY_SIGNER_INFO;
end;
{$EXTERNALSYM WTD_GENERIC_CHAIN_POLICY_SIGNER_INFO}
WTD_GENERIC_CHAIN_POLICY_SIGNER_INFO = _WTD_GENERIC_CHAIN_POLICY_SIGNER_INFO;
//TODO: define PCRYPT_PROVIDER_DATA and restore it here
{$EXTERNALSYM PFN_WTD_GENERIC_CHAIN_POLICY_CALLBACK}
PFN_WTD_GENERIC_CHAIN_POLICY_CALLBACK = function(
{IN} pProvData : {PCRYPT_PROVIDER_DATA in JwaWintrust}Pointer;
{IN} dwStepError : DWORD;
{IN} dwRegPolicySettings : DWORD;
{IN} cSigner : DWORD;
{IN} rgpSigner : PPWTD_GENERIC_CHAIN_POLICY_SIGNER_INFO;
{IN} pvPolicyArg : Pointer
) : HRESULT; stdcall;
// The fields in the following data structure are passed to
// CertGetCertificateChain().
{$EXTERNALSYM _WTD_GENERIC_CHAIN_POLICY_CREATE_INFO}
_WTD_GENERIC_CHAIN_POLICY_CREATE_INFO = record
cbStructOrSize : DWORD;
hChainEngine : HCERTCHAINENGINE;
pChainPara : PCERT_CHAIN_PARA;
dwFlags : DWORD;
pvReserved : Pointer;
end;
{$EXTERNALSYM WTD_GENERIC_CHAIN_POLICY_CREATE_INFO}
WTD_GENERIC_CHAIN_POLICY_CREATE_INFO = _WTD_GENERIC_CHAIN_POLICY_CREATE_INFO;
{$EXTERNALSYM PWTD_GENERIC_CHAIN_POLICY_CREATE_INFO}
PWTD_GENERIC_CHAIN_POLICY_CREATE_INFO = ^WTD_GENERIC_CHAIN_POLICY_CREATE_INFO;
{$EXTERNALSYM _WTD_GENERIC_CHAIN_POLICY_DATA}
_WTD_GENERIC_CHAIN_POLICY_DATA = record
cbStructOrSize : DWORD;
pSignerChainInfo : PWTD_GENERIC_CHAIN_POLICY_CREATE_INFO;
pCounterSignerChainInfo : PWTD_GENERIC_CHAIN_POLICY_CREATE_INFO;
pfnPolicyCallback : PFN_WTD_GENERIC_CHAIN_POLICY_CALLBACK;
pvPolicyArg : Pointer;
end;
{$EXTERNALSYM WTD_GENERIC_CHAIN_POLICY_DATA}
WTD_GENERIC_CHAIN_POLICY_DATA = _WTD_GENERIC_CHAIN_POLICY_DATA;
{$EXTERNALSYM PWTD_GENERIC_CHAIN_POLICY_DATA}
PWTD_GENERIC_CHAIN_POLICY_DATA = ^WTD_GENERIC_CHAIN_POLICY_DATA;
//////////////////////////////////////////////////////////////////////////////
//
// HTTPSPROV_ACTION Guid (Authenticode add-on)
//----------------------------------------------------------------------------
// Assigned to the pgActionID parameter of WinVerifyTrust to verify the
// SSL/PCT connections through IE.
//
// {573E31F8-AABA-11d0-8CCB-00C04FC295EE}
//
const
{$EXTERNALSYM HTTPSPROV_ACTION}
HTTPSPROV_ACTION: TGUID = '{573e31f8-aaba-11d0-8ccb-00c04fc295ee}';
{$EXTERNALSYM HTTPS_FINALPOLICY_FUNCTION}
HTTPS_FINALPOLICY_FUNCTION = 'HTTPSFinalProv';
{$EXTERNALSYM HTTPS_CHKCERT_FUNCTION}
HTTPS_CHKCERT_FUNCTION = 'HTTPSCheckCertProv';
{$EXTERNALSYM HTTPS_CERTTRUST_FUNCTION}
HTTPS_CERTTRUST_FUNCTION = 'HTTPSCertificateTrust';
//////////////////////////////////////////////////////////////////////////////
//
// OFFICESIGN_ACTION_VERIFY Guid (Authenticode add-on)
//----------------------------------------------------------------------------
// Assigned to the pgActionID parameter of WinVerifyTrust to verify the
// authenticity of a Structured Storage file using the Microsoft Office
// Authenticode add-on Policy Provider,
//
// {5555C2CD-17FB-11d1-85C4-00C04FC295EE}
//
{$EXTERNALSYM OFFICESIGN_ACTION_VERIFY}
OFFICESIGN_ACTION_VERIFY: TGUID = '{5555c2cd-17fb-11d1-85c4-00c04fc295ee}';
{$EXTERNALSYM OFFICE_POLICY_PROVIDER_DLL_NAME}
OFFICE_POLICY_PROVIDER_DLL_NAME = SP_POLICY_PROVIDER_DLL_NAME;
{$EXTERNALSYM OFFICE_INITPROV_FUNCTION}
OFFICE_INITPROV_FUNCTION = 'OfficeInitializePolicy';
{$EXTERNALSYM OFFICE_CLEANUPPOLICY_FUNCTION}
OFFICE_CLEANUPPOLICY_FUNCTION = 'OfficeCleanupPolicy';
//////////////////////////////////////////////////////////////////////////////
//
// DRIVER_ACTION_VERIFY Guid (Authenticode add-on)
//----------------------------------------------------------------------------
// Assigned to the pgActionID parameter of WinVerifyTrust to verify the
// authenticity of a WHQL signed driver. This is an Authenticode add-on
// Policy Provider,
//
// {F750E6C3-38EE-11d1-85E5-00C04FC295EE}
//
{$EXTERNALSYM DRIVER_ACTION_VERIFY}
DRIVER_ACTION_VERIFY: TGUID = '{c3e650f7-38ee-11d1-85e5-00c04fc295ee}';
{$EXTERNALSYM DRIVER_INITPROV_FUNCTION}
DRIVER_INITPROV_FUNCTION = 'DriverInitializePolicy';
{$EXTERNALSYM DRIVER_FINALPOLPROV_FUNCTION}
DRIVER_FINALPOLPROV_FUNCTION = 'DriverFinalPolicy';
{$EXTERNALSYM DRIVER_CLEANUPPOLICY_FUNCTION}
DRIVER_CLEANUPPOLICY_FUNCTION = 'DriverCleanupPolicy';
type
{$EXTERNALSYM DRIVER_VER_MAJORMINOR_}
DRIVER_VER_MAJORMINOR_ = record
dwMajor,
dwMinor : DWORD;
end;
{$EXTERNALSYM DRIVER_VER_MAJORMINOR}
DRIVER_VER_MAJORMINOR = DRIVER_VER_MAJORMINOR_;
{$EXTERNALSYM DRIVER_VER_INFO_}
DRIVER_VER_INFO_ = record
cbStruct : DWORD; // IN - set to sizeof(DRIVER_VER_INFO)
dwReserved1, // IN - set to NULL
dwReserved2 : ULONG_PTR; // IN - set to NULL
dwPlatform, // IN - OPTIONAL: platform to use
dwVersion : DWORD; // IN - OPTIONAL: major version to use (NOT USED!!!)
wszVersion, // OUT: version string from catalog file
wszSignedBy : array[0..MAX_PATH-1] of WideChar; // OUT: signer display name from certificate
pcSignerCertContext : PCCERT_CONTEXT; // OUT: client MUST free this!!!
sOSVersionLow, // IN - OPTIONAL: lowest compatible version
sOSVersionHigh : DRIVER_VER_MAJORMINOR; // IN - OPTIONAL: highest compatible version
dwBuildNumberLow, // IN - OPTIONAL: added to sOSVersionLow as
// third node for finer version granularity
dwBuildNumberHigh : DWORD; // IN - OPTIONAL: added to sOSVersionHigh as
// third node for finer version granularity
//
// NOTES:
// 1. dwPlatform _must_ be set to a non-zero value in order for proper version checking to be done.
// 2. dwVersion is no longer used, sOSVersionLow and sOsVersionhigh have taken its place
// 3. If dwBuildNumberLow and dwBuildNumberHigh are 0, they are unused. Otherwise, they are considered
// to be extensions of sOSVersionLow and sOSVersionHigh respectively. Make special note of this when
// reading note 4.
// 4. If you are validating against a single OS version, then set both sOSVersionLow and sOSVersion high,
// to the version you are validating against. If sOSVersionLow and sOSVersionHigh are different, then
// the validation is done for the whole version range, from sOSVersionLow to sOSVersionHigh.
//
end;
{$EXTERNALSYM DRIVER_VER_INFO}
DRIVER_VER_INFO = DRIVER_VER_INFO_;
{$EXTERNALSYM PDRIVER_VER_INFO}
PDRIVER_VER_INFO = ^DRIVER_VER_INFO;
// WINTRUST_ACTION_GENERIC_VERIFY //is no longer defined in the PSDK headers
{$ENDIF JWA_IMPLEMENTATIONSECTION}
{$IFNDEF JWA_OMIT_SECTIONS}
implementation
uses JwaWinDllNames;
{$ENDIF JWA_OMIT_SECTIONS}
{$IFNDEF JWA_INTERFACESECTION}
{$IFNDEF JWA_INCLUDEMODE}
const
{$IFDEF UNICODE}
AWSuffix = 'W';
{$ELSE}
AWSuffix = 'A';
{$ENDIF UNICODE}
{$ENDIF JWA_INCLUDEMODE}
{$IFDEF DYNAMIC_LINK}
{$ELSE}
{$ENDIF DYNAMIC_LINK}
{$ENDIF JWA_INTERFACESECTION}
{$IFNDEF JWA_OMIT_SECTIONS}
end.
{$ENDIF JWA_OMIT_SECTIONS}