// Provider interface header file // // all secure provider calls are prefixed by "SP" // providers must implement all of these interfaces! // #ifdef __cplusplus extern "C"{ #endif // note: we typedef here because it is convenient and needed for // filling struct by GetProcAddress() later. After defining the types, // we simply instantiate the actual call as an implementation of that type. // load notification, register callbacks typedef HRESULT SPPROVIDERINITIALIZE( DISPIF_CALLBACKS *psCallbacks); SPPROVIDERINITIALIZE SPProviderInitialize; // Acquire Context notification typedef HRESULT SPACQUIRECONTEXT( PST_PROVIDER_HANDLE* phPSTProv, DWORD dwFlags); SPACQUIRECONTEXT SPAcquireContext; // Release Context notification typedef HRESULT SPRELEASECONTEXT( PST_PROVIDER_HANDLE* phPSTProv, DWORD dwFlags); SPRELEASECONTEXT SPReleaseContext; // GetProvInfo typedef HRESULT SPGETPROVINFO( /* [out] */ PPST_PROVIDERINFO __RPC_FAR *ppPSTInfo, /* [in] */ DWORD dwFlags); SPGETPROVINFO SPGetProvInfo; // GetProvParam typedef HRESULT SPGETPROVPARAM( /* [in] */ PST_PROVIDER_HANDLE* phPSTProv, /* [in] */ DWORD dwParam, /* [out] */ DWORD __RPC_FAR *pcbData, /* [size_is][size_is][out] */ BYTE __RPC_FAR *__RPC_FAR *ppbData, /* [in] */ DWORD dwFlags); SPGETPROVPARAM SPGetProvParam; // SetProvParam typedef HRESULT SPSETPROVPARAM( /* [in] */ PST_PROVIDER_HANDLE* phPSTProv, /* [in] */ DWORD dwParam, /* [in] */ DWORD cbData, /* [in] */ BYTE* pbData, /* [in] */ DWORD dwFlags); SPSETPROVPARAM SPSetProvParam; // EnumTypes typedef HRESULT SPENUMTYPES( /* [in] */ PST_PROVIDER_HANDLE *phPSTProv, /* [in] */ PST_KEY Key, /* [out] */ GUID *pguidType, /* [in] */ DWORD dwIndex, /* [in] */ DWORD dwFlags); SPENUMTYPES SPEnumTypes; // GetTypeInfo typedef HRESULT SPGETTYPEINFO( /* [in] */ PST_PROVIDER_HANDLE *phPSTProv, /* [in] */ PST_KEY Key, /* [in] */ const GUID *pguidType, /* [in] */ PPST_TYPEINFO *ppinfoType, /* [in] */ DWORD dwFlags); SPGETTYPEINFO SPGetTypeInfo; // EnumSubtypes typedef HRESULT SPENUMSUBTYPES( /* [in] */ PST_PROVIDER_HANDLE *phPSTProv, /* [in] */ PST_KEY Key, /* [in] */ const GUID *pguidType, /* [out] */ GUID *pguidSubtype, /* [in] */ DWORD dwIndex, /* [in] */ DWORD dwFlags); SPENUMSUBTYPES SPEnumSubtypes; // GetSubtypeInfo typedef HRESULT SPGETSUBTYPEINFO( /* [in] */ PST_PROVIDER_HANDLE *phPSTProv, /* [in] */ PST_KEY Key, /* [in] */ const GUID *pguidType, /* [in] */ const GUID *pguidSubtype, /* [in] */ PPST_TYPEINFO *ppinfoSubtype, /* [in] */ DWORD dwFlags); SPGETSUBTYPEINFO SPGetSubtypeInfo; // EnumItems typedef HRESULT SPENUMITEMS( /* [in] */ PST_PROVIDER_HANDLE *phPSTProv, /* [in] */ PST_KEY Key, /* [in] */ const GUID *pguidType, /* [in] */ const GUID *pguidSubtype, /* [out] */ LPWSTR *ppszItemName, /* [in] */ DWORD dwIndex, /* [in] */ DWORD dwFlags); SPENUMITEMS SPEnumItems; // CreateType typedef HRESULT SPCREATETYPE( /* [in] */ PST_PROVIDER_HANDLE *phPSTProv, /* [in] */ PST_KEY Key, /* [in] */ const GUID *pguidType, /* [in] */ PPST_TYPEINFO pinfoType, /* [in] */ DWORD dwFlags); SPCREATETYPE SPCreateType; // DeleteType typedef HRESULT SPDELETETYPE( /* [in] */ PST_PROVIDER_HANDLE *phPSTProv, /* [in] */ PST_KEY Key, /* [in] */ const GUID __RPC_FAR *pguidType, /* [in] */ DWORD dwFlags); SPDELETETYPE SPDeleteType; // CreateSubtype typedef HRESULT SPCREATESUBTYPE( /* [in] */ PST_PROVIDER_HANDLE *phPSTProv, /* [in] */ PST_KEY Key, /* [in] */ const GUID *pguidType, /* [in] */ const GUID *pguidSubtype, /* [in] */ PPST_TYPEINFO pinfoSubtype, /* [in] */ PPST_ACCESSRULESET psRules, /* [in] */ DWORD dwFlags); SPCREATESUBTYPE SPCreateSubtype; // DeleteSubtype typedef HRESULT SPDELETESUBTYPE( /* [in] */ PST_PROVIDER_HANDLE *phPSTProv, /* [in] */ PST_KEY Key, /* [in] */ const GUID __RPC_FAR *pguidType, /* [in] */ const GUID __RPC_FAR *pguidSubtype, /* [in] */ DWORD dwFlags); SPDELETESUBTYPE SPDeleteSubtype; // WriteItem typedef HRESULT SPWRITEITEM( /* [in] */ PST_PROVIDER_HANDLE *phPSTProv, /* [in] */ PST_KEY Key, /* [in] */ const GUID *pguidType, /* [in] */ const GUID *pguidSubtype, /* [in] */ LPCWSTR szItemName, /* [in] */ DWORD cbData, /* [size_is][in] */ BYTE *pbData, /* [in] */ PPST_PROMPTINFO psPrompt, /* [in] */ DWORD dwDefaultConfirmationStyle, /* [in] */ DWORD dwFlags); SPWRITEITEM SPWriteItem; // ReadItem typedef HRESULT SPREADITEM( /* [in] */ PST_PROVIDER_HANDLE *phPSTProv, /* [in] */ PST_KEY Key, /* [in] */ const GUID *pguidType, /* [in] */ const GUID *pguidSubtype, /* [in] */ LPCWSTR szItemName, /* [out] */ DWORD *pcbData, /* [size_is][size_is][out] */ BYTE **ppbData, /* [in] */ PPST_PROMPTINFO psPrompt, /* [in] */ DWORD dwFlags); SPREADITEM SPReadItem; // OpenItem typedef HRESULT SPOPENITEM( /* [in] */ PST_PROVIDER_HANDLE *phPSTProv, /* [in] */ PST_KEY Key, /* [in] */ const GUID *pguidType, /* [in] */ const GUID *pguidSubtype, /* [in] */ LPCWSTR szItemName, /* [in] */ DWORD dwModeFlags, /* [in] */ PPST_PROMPTINFO psPrompt, /* [in] */ DWORD dwFlags); // CloseItem typedef HRESULT SPCLOSEITEM( /* [in] */ PST_PROVIDER_HANDLE *phPSTProv, /* [in] */ PST_KEY Key, /* [in] */ const GUID *pguidType, /* [in] */ const GUID *pguidSubtype, /* [in] */ LPCWSTR szItemName, /* [in] */ DWORD dwFlags); // DeleteItem typedef HRESULT SPDELETEITEM( /* [in] */ PST_PROVIDER_HANDLE *phPSTProv, /* [in] */ PST_KEY Key, /* [in] */ const GUID *pguidType, /* [in] */ const GUID *pguidSubtype, /* [in] */ LPCWSTR szItemName, /* [in] */ PPST_PROMPTINFO psPrompt, /* [in] */ DWORD dwFlags); SPDELETEITEM SPDeleteItem; // ReadAccessRuleset typedef HRESULT SPREADACCESSRULESET( /* [in] */ PST_PROVIDER_HANDLE *phPSTProv, /* [in] */ PST_KEY Key, /* [in] */ const GUID *pguidType, /* [in] */ const GUID *pguidSubtype, /* [out] */ PPST_ACCESSRULESET *ppsRules, /* [in] */ DWORD dwFlags); SPREADACCESSRULESET SPReadAccessRuleset; // WriteAccessRuleset typedef HRESULT SPWRITEACCESSRULESET( /* [in] */ PST_PROVIDER_HANDLE *phPSTProv, /* [in] */ PST_KEY Key, /* [in] */ const GUID *pguidType, /* [in] */ const GUID *pguidSubtype, /* [in] */ PPST_ACCESSRULESET psRules, /* [in] */ DWORD dwFlags); SPWRITEACCESSRULESET SPWriteAccessRuleset; //////////////////////////////////////////////////// // side door interfaces: dispatcher/provider only // PasswordChangeNotify typedef BOOL FPASSWORDCHANGENOTIFY( /* [in] */ LPWSTR szUser, /* [in] */ LPWSTR szPasswordName, /* [in] */ BYTE rgbOldPwd[], /* [in] */ DWORD cbOldPwd, /* [in] */ BYTE rgbNewPwd[], /* [in] */ DWORD cbNewPwd); FPASSWORDCHANGENOTIFY FPasswordChangeNotify; #ifdef __cplusplus } // extern C #endif