NT4/public/sdk/inc/wintrust.h

312 lines
10 KiB
C
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/************************************************************************
* *
* wintrust.h -- This module defines the 32-Bit WinTrust definitions *
* needed to build Trust Providers and / Subject *
* Interface Packages. *
* *
* Copyright (c) 1990-1996, Microsoft Corp. All rights reserved. *
* *
************************************************************************/
#ifndef _WINTRUST_
#define _WINTRUST_
#ifdef __cplusplus
extern "C" {
#endif
/***********************************************************************
* *
* This section contains definitions related to: *
* *
* WinTrust in general *
* *
************************************************************************/
//
// WinTrust Revisioning
//
#define WIN_TRUST_MAJOR_REVISION_MASK 0xFFFF0000
#define WIN_TRUST_MINOR_REVISION_MASK 0x0000FFFF
#define WIN_TRUST_REVISION_1_0 0x00010000
/***********************************************************************
* *
* This section contains definitions related to: *
* *
* Subject Interface Packages *
* *
************************************************************************/
//
// Allows passing of subject and type material.
//
typedef struct _WIN_TRUST_SIP_SUBJECT {
GUID * SubjectType;
WIN_TRUST_SUBJECT Subject;
} WIN_TRUST_SIP_SUBJECT, *LPWIN_TRUST_SIP_SUBJECT;
//
// Templates of services that must be EXPORTED by SIPs
// FOR USE by Trust Providers (calling through WinTrust).
//
typedef BOOL
(WINAPI *LPWINTRUST_SUBJECT_CHECK_CONTENT_INFO)(
IN LPWIN_TRUST_SIP_SUBJECT lpSubject, // pointer to subject info
IN LPWIN_CERTIFICATE lpSignedData // PKCS #7 Signed Data
);
typedef BOOL
(WINAPI *LPWINTRUST_SUBJECT_ENUM_CERTIFICATES)(
IN LPWIN_TRUST_SIP_SUBJECT lpSubject, // pointer to subject info
IN DWORD dwTypeFilter, // 0 or WIN_CERT_TYPE_xxx
OUT LPDWORD lpCertificateCount,
IN OUT LPDWORD lpIndices, // Rcvs WIN_CERT_TYPE_
IN DWORD dwIndexCount
);
typedef BOOL
(WINAPI *LPWINTRUST_SUBJECT_GET_CERTIFICATE)(
IN LPWIN_TRUST_SIP_SUBJECT lpSubject,
IN DWORD dwCertificateIndex,
OUT LPWIN_CERTIFICATE lpCertificate,
IN OUT LPDWORD lpRequiredLength
);
typedef BOOL
(WINAPI *LPWINTRUST_SUBJECT_GET_CERT_HEADER)(
IN LPWIN_TRUST_SIP_SUBJECT lpSubject,
IN DWORD dwCertificateIndex,
OUT LPWIN_CERTIFICATE lpCertificateHeader
);
typedef BOOL
(WINAPI *LPWINTRUST_SUBJECT_GET_NAME)(
IN LPWIN_TRUST_SIP_SUBJECT lpSubject,
IN LPWIN_CERTIFICATE lpSignedData,
IN OUT LPWSTR lpBuffer,
IN OUT LPDWORD lpRequiredLength
);
typedef DWORD
(WINAPI *LPWINTRUST_PROVIDER_PING) (
IN LPWSTR lpProviderName,
IN DWORD dwClientParameter,
OUT LPDWORD lpdwServerReturnValue
);
typedef struct _WINTRUST_SIP_DISPATCH_TABLE
{
LPWINTRUST_SUBJECT_CHECK_CONTENT_INFO CheckSubjectContentInfo;
LPWINTRUST_SUBJECT_ENUM_CERTIFICATES EnumSubjectCertificates;
LPWINTRUST_SUBJECT_GET_CERTIFICATE GetSubjectCertificate;
LPWINTRUST_SUBJECT_GET_CERT_HEADER GetSubjectCertHeader;
LPWINTRUST_SUBJECT_GET_NAME GetSubjectName;
} WINTRUST_SIP_DISPATCH_TABLE, *LPWINTRUST_SIP_DISPATCH_TABLE;
//
// Structure describing an individual SIP.
//
// This structure is passed back to WinTrust from a Subject Interface Package
// initialization call.
//
typedef struct _WINTRUST_SIP_INFO {
DWORD dwRevision;
LPWINTRUST_SIP_DISPATCH_TABLE lpServices;
DWORD dwSubjectTypeCount;
GUID * lpSubjectTypeArray;
} WINTRUST_SIP_INFO, *LPWINTRUST_SIP_INFO;
//
// SIP Intialization routine.
// SIP DLLs are required to have a routine named:
//
// WinTrustSipInitialize.
//
// This initialization routine must have the following
// definition:
//
typedef BOOL
(WINAPI *LPWINTRUST_SUBJECT_PACKAGE_INITIALIZE)(
IN DWORD dwWinTrustRevision,
OUT LPWINTRUST_SIP_INFO *lpSipInfo
);
/***********************************************************************
* *
* This section contains definitions related to: *
* *
* Trust Providers *
* *
************************************************************************/
//
// Dispatch table of WinTrust services available to Trust Providers
//
// Client side...
typedef struct _WINTRUST_CLIENT_TP_DISPATCH_TABLE
{
LPWINTRUST_PROVIDER_PING ServerPing;
LPWINTRUST_SUBJECT_CHECK_CONTENT_INFO CheckSubjectContentInfo;
LPWINTRUST_SUBJECT_ENUM_CERTIFICATES EnumSubjectCertificates;
LPWINTRUST_SUBJECT_GET_CERTIFICATE GetSubjectCertificate;
LPWINTRUST_SUBJECT_GET_CERT_HEADER GetSubjectCertHeader;
LPWINTRUST_SUBJECT_GET_NAME GetSubjectName;
} WINTRUST_CLIENT_TP_DISPATCH_TABLE, *LPWINTRUST_CLIENT_TP_DISPATCH_TABLE;
// Server side...
typedef struct _WINTRUST_SERVER_TP_DISPATCH_TABLE
{
LPWINTRUST_SUBJECT_CHECK_CONTENT_INFO CheckSubjectContentInfo;
LPWINTRUST_SUBJECT_ENUM_CERTIFICATES EnumSubectCertificates;
LPWINTRUST_SUBJECT_GET_CERTIFICATE GetSubjectCertificate;
LPWINTRUST_SUBJECT_GET_CERT_HEADER GetSubjectCertHeader;
LPWINTRUST_SUBJECT_GET_NAME GetSubjectName;
} WINTRUST_SERVER_TP_DISPATCH_TABLE, *LPWINTRUST_SERVER_TP_DISPATCH_TABLE;
//
// The following structures are passed by WinTrust to a
// Trust Provider being initialized.
//
// Client side...
typedef struct _WINTRUST_CLIENT_TP_INFO {
DWORD dwRevision;
LPWINTRUST_CLIENT_TP_DISPATCH_TABLE lpServices;
} WINTRUST_CLIENT_TP_INFO, *LPWINTRUST_CLIENT_TP_INFO;
// Server side
typedef struct _WINTRUST_SERVER_TP_INFO {
DWORD dwRevision;
LPWINTRUST_SERVER_TP_DISPATCH_TABLE lpServices;
} WINTRUST_SERVER_TP_INFO, *LPWINTRUST_SERVER_TP_INFO;
//
// Templates of Trust Provider services available to WinTrust
//
typedef LONG
(WINAPI *LPWINTRUST_PROVIDER_VERIFY_TRUST) (
IN HWND hwnd,
IN GUID * ActionID,
IN LPVOID ActionData
);
typedef VOID
(WINAPI *LPWINTRUST_PROVIDER_SUBMIT_CERTIFICATE) (
IN LPWIN_CERTIFICATE lpCertificate
);
typedef VOID
(WINAPI *LPWINTRUST_PROVIDER_CLIENT_UNLOAD) (
IN LPVOID lpTrustProviderInfo
);
typedef VOID
(WINAPI *LPWINTRUST_PROVIDER_SERVER_UNLOAD) (
IN LPVOID lpTrustProviderInfo
);
//
// Dispatch table of Trust provider services available for use by WinTrust
//
// Client side...
typedef struct _WINTRUST_PROVIDER_CLIENT_SERVICES
{
LPWINTRUST_PROVIDER_CLIENT_UNLOAD Unload;
LPWINTRUST_PROVIDER_VERIFY_TRUST VerifyTrust;
LPWINTRUST_PROVIDER_SUBMIT_CERTIFICATE SubmitCertificate;
} WINTRUST_PROVIDER_CLIENT_SERVICES, *LPWINTRUST_PROVIDER_CLIENT_SERVICES;
typedef struct _WINTRUST_PROVIDER_SERVER_SERVICES
{
LPWINTRUST_PROVIDER_SERVER_UNLOAD Unload;
LPWINTRUST_PROVIDER_PING Ping;
} WINTRUST_PROVIDER_SERVER_SERVICES, *LPWINTRUST_PROVIDER_SERVER_SERVICES;
//
// This structure is passed back from the client-side Trust Provider
// following initialization of that Trust Provider.
//
typedef struct _WINTRUST_PROVIDER_CLIENT_INFO {
DWORD dwRevision;
LPWINTRUST_PROVIDER_CLIENT_SERVICES lpServices;
DWORD dwActionIdCount;
GUID * lpActionIdArray;
} WINTRUST_PROVIDER_CLIENT_INFO, *LPWINTRUST_PROVIDER_CLIENT_INFO;
//
// This structure is passed back from the server-side trust provider following
// initialization of that trust provider.
//
typedef struct _WINTRUST_PROVIDER_SERVER_INFO {
DWORD dwRevision;
LPWINTRUST_PROVIDER_SERVER_SERVICES lpServices;
} WINTRUST_PROVIDER_SERVER_INFO, *LPWINTRUST_PROVIDER_SERVER_INFO;
//
// Trust Provider Initialization Routines
// Each Trust Provider DLL must have a client and server side initialization
// routine. The routines must be named:
//
// WinTrustProviderClientInitialize()
// and
// WinTrustProviderServerInitialize()
//
// and must be defined to match the following templates...
//
typedef BOOL
(WINAPI *LPWINTRUST_PROVIDER_CLIENT_INITIALIZE)(
IN DWORD dwWinTrustRevision,
IN LPWINTRUST_CLIENT_TP_INFO lpWinTrustInfo,
IN LPWSTR lpProviderName,
OUT LPWINTRUST_PROVIDER_CLIENT_INFO *lpTrustProviderInfo
);
typedef BOOL
(WINAPI *LPWINTRUST_PROVIDER_SERVER_INITIALIZE) (
IN DWORD dwWinTrustRevision,
IN LPWINTRUST_SERVER_TP_INFO lpWinTrustInfo,
IN LPWSTR lpProviderName,
OUT LPWINTRUST_PROVIDER_SERVER_INFO *lpTrustProviderInfo
);
#ifdef __cplusplus
}
#endif
#endif // _WINTRUST_