master
  1/**
  2 * This file has no copyright assigned and is placed in the Public Domain.
  3 * This file is part of the mingw-w64 runtime package.
  4 * No warranty is given; refer to the file DISCLAIMER.PD within this package.
  5 */
  6#ifndef MSSIP_H
  7#define MSSIP_H
  8
  9#ifdef __cplusplus
 10extern "C" {
 11#endif
 12
 13#pragma pack (8)
 14
 15  typedef CRYPT_HASH_BLOB CRYPT_DIGEST_DATA;
 16
 17#define MSSIP_FLAGS_PROHIBIT_RESIZE_ON_CREATE 0x00010000
 18#define MSSIP_FLAGS_USE_CATALOG 0x00020000
 19
 20#define SPC_INC_PE_RESOURCES_FLAG 0x80
 21#define SPC_INC_PE_DEBUG_INFO_FLAG 0x40
 22#define SPC_INC_PE_IMPORT_ADDR_TABLE_FLAG 0x20
 23
 24  typedef struct SIP_SUBJECTINFO_ {
 25    DWORD cbSize;
 26    GUID *pgSubjectType;
 27    HANDLE hFile;
 28    LPCWSTR pwsFileName;
 29    LPCWSTR pwsDisplayName;
 30    DWORD dwReserved1;
 31    DWORD dwIntVersion;
 32    HCRYPTPROV hProv;
 33    CRYPT_ALGORITHM_IDENTIFIER DigestAlgorithm;
 34    DWORD dwFlags;
 35    DWORD dwEncodingType;
 36    DWORD dwReserved2;
 37    DWORD fdwCAPISettings;
 38    DWORD fdwSecuritySettings;
 39    DWORD dwIndex;
 40    DWORD dwUnionChoice;
 41#define MSSIP_ADDINFO_NONE 0
 42#define MSSIP_ADDINFO_FLAT 1
 43#define MSSIP_ADDINFO_CATMEMBER 2
 44#define MSSIP_ADDINFO_BLOB 3
 45#define MSSIP_ADDINFO_NONMSSIP 500
 46    __C89_NAMELESS union {
 47      struct MS_ADDINFO_FLAT_ *psFlat;
 48      struct MS_ADDINFO_CATALOGMEMBER_ *psCatMember;
 49      struct MS_ADDINFO_BLOB_ *psBlob;
 50    };
 51    LPVOID pClientData;
 52  } SIP_SUBJECTINFO,*LPSIP_SUBJECTINFO;
 53
 54  typedef struct MS_ADDINFO_FLAT_ {
 55    DWORD cbStruct;
 56    struct SIP_INDIRECT_DATA_ *pIndirectData;
 57  } MS_ADDINFO_FLAT,*PMS_ADDINFO_FLAT;
 58
 59  typedef struct MS_ADDINFO_CATALOGMEMBER_ {
 60    DWORD cbStruct;
 61    struct CRYPTCATSTORE_ *pStore;
 62    struct CRYPTCATMEMBER_ *pMember;
 63  } MS_ADDINFO_CATALOGMEMBER,*PMS_ADDINFO_CATALOGMEMBER;
 64
 65  typedef struct MS_ADDINFO_BLOB_ {
 66    DWORD cbStruct;
 67    DWORD cbMemObject;
 68    BYTE *pbMemObject;
 69    DWORD cbMemSignedMsg;
 70    BYTE *pbMemSignedMsg;
 71  } MS_ADDINFO_BLOB,*PMS_ADDINFO_BLOB;
 72
 73  typedef struct SIP_INDIRECT_DATA_ {
 74    CRYPT_ATTRIBUTE_TYPE_VALUE Data;
 75    CRYPT_ALGORITHM_IDENTIFIER DigestAlgorithm;
 76    CRYPT_HASH_BLOB Digest;
 77  } SIP_INDIRECT_DATA,*PSIP_INDIRECT_DATA;
 78
 79#pragma pack()
 80
 81  extern WINBOOL WINAPI CryptSIPGetSignedDataMsg(SIP_SUBJECTINFO *pSubjectInfo,DWORD *pdwEncodingType,DWORD dwIndex,DWORD *pcbSignedDataMsg,BYTE *pbSignedDataMsg);
 82  typedef WINBOOL (WINAPI *pCryptSIPGetSignedDataMsg)(SIP_SUBJECTINFO *pSubjectInfo,DWORD *pdwEncodingType,DWORD dwIndex,DWORD *pcbSignedDataMsg,BYTE *pbSignedDataMsg);
 83  extern WINBOOL WINAPI CryptSIPPutSignedDataMsg(SIP_SUBJECTINFO *pSubjectInfo,DWORD dwEncodingType,DWORD *pdwIndex,DWORD cbSignedDataMsg,BYTE *pbSignedDataMsg);
 84  typedef WINBOOL (WINAPI *pCryptSIPPutSignedDataMsg)(SIP_SUBJECTINFO *pSubjectInfo,DWORD dwEncodingType,DWORD *pdwIndex,DWORD cbSignedDataMsg,BYTE *pbSignedDataMsg);
 85  extern WINBOOL WINAPI CryptSIPCreateIndirectData(SIP_SUBJECTINFO *pSubjectInfo,DWORD *pcbIndirectData,SIP_INDIRECT_DATA *pIndirectData);
 86  typedef WINBOOL (WINAPI *pCryptSIPCreateIndirectData)(SIP_SUBJECTINFO *pSubjectInfo,DWORD *pcbIndirectData,SIP_INDIRECT_DATA *pIndirectData);
 87  extern WINBOOL WINAPI CryptSIPVerifyIndirectData(SIP_SUBJECTINFO *pSubjectInfo,SIP_INDIRECT_DATA *pIndirectData);
 88  typedef WINBOOL (WINAPI *pCryptSIPVerifyIndirectData)(SIP_SUBJECTINFO *pSubjectInfo,SIP_INDIRECT_DATA *pIndirectData);
 89  extern WINBOOL WINAPI CryptSIPRemoveSignedDataMsg(SIP_SUBJECTINFO *pSubjectInfo,DWORD dwIndex);
 90  typedef WINBOOL (WINAPI *pCryptSIPRemoveSignedDataMsg)(SIP_SUBJECTINFO *pSubjectInfo,DWORD dwIndex);
 91
 92#pragma pack(8)
 93
 94  typedef struct SIP_DISPATCH_INFO_ {
 95    DWORD cbSize;
 96    HANDLE hSIP;
 97    pCryptSIPGetSignedDataMsg pfGet;
 98    pCryptSIPPutSignedDataMsg pfPut;
 99    pCryptSIPCreateIndirectData pfCreate;
100    pCryptSIPVerifyIndirectData pfVerify;
101    pCryptSIPRemoveSignedDataMsg pfRemove;
102  } SIP_DISPATCH_INFO,*LPSIP_DISPATCH_INFO;
103
104  typedef WINBOOL (WINAPI *pfnIsFileSupported)(HANDLE hFile,GUID *pgSubject);
105  typedef WINBOOL (WINAPI *pfnIsFileSupportedName)(WCHAR *pwszFileName,GUID *pgSubject);
106
107  typedef struct SIP_ADD_NEWPROVIDER_ {
108    DWORD cbStruct;
109    GUID *pgSubject;
110    WCHAR *pwszDLLFileName;
111    WCHAR *pwszMagicNumber;
112    WCHAR *pwszIsFunctionName;
113    WCHAR *pwszGetFuncName;
114    WCHAR *pwszPutFuncName;
115    WCHAR *pwszCreateFuncName;
116    WCHAR *pwszVerifyFuncName;
117    WCHAR *pwszRemoveFuncName;
118    WCHAR *pwszIsFunctionNameFmt2;
119  } SIP_ADD_NEWPROVIDER,*PSIP_ADD_NEWPROVIDER;
120
121#define SIP_MAX_MAGIC_NUMBER 4
122
123#pragma pack()
124
125  extern WINBOOL WINAPI CryptSIPLoad(const GUID *pgSubject,DWORD dwFlags,SIP_DISPATCH_INFO *pSipDispatch);
126  extern WINBOOL WINAPI CryptSIPRetrieveSubjectGuid(LPCWSTR FileName,HANDLE hFileIn,GUID *pgSubject);
127  extern WINBOOL WINAPI CryptSIPRetrieveSubjectGuidForCatalogFile(LPCWSTR FileName,HANDLE hFileIn,GUID *pgSubject);
128  extern WINBOOL WINAPI CryptSIPAddProvider(SIP_ADD_NEWPROVIDER *psNewProv);
129  extern WINBOOL WINAPI CryptSIPRemoveProvider(GUID *pgProv);
130
131#ifdef __cplusplus
132}
133#endif
134#endif