BLOB Access Interface: ISPExternalBinaryProvider
Applies to: SharePoint Foundation 2010
The external binary large object (BLOB) store—the EBS Provider—is integrated into the SharePoint storage access stack of Microsoft SharePoint Foundation 2010 as a COM component. The core of the EBS Provider is an interface, ISPExternalBinaryProvider, which you must implement to write your custom provider. The interface has two methods, StoreBinary and RetrieveBinary, which you implement to store and retrieve binary data to and from the external BLOB store.
Interface Definition (IDL)
Your SharePoint application holds a common, stateless instance of the ISPExternalBinaryProvider class. This persistent instance gets called when you want to store or retrieve BLOB data from the external BLOB store.
The contents of the interface IDL file (extstore.idl) are as follows:
/*************************************************
File: extstore.idl
Copyright (c): 2006 Microsoft Corp.
*************************************************/
import "objidl.idl";
[
uuid(39082a0c-af6e-4ac2-b6f0-1a1ff6abbae1)
]
library SharePointBinaryStore
{
[
local,
object,
uuid(48036587-c8bc-4aa0-8694-5a7000b4ba4f),
helpstring("ISPExternalBinaryProvider interface")
]
interface ISPExternalBinaryProvider : IUnknown
{
HRESULT StoreBinary(
[in] unsigned long cbPartitionId,
[in, size_is(cbPartitionId)] const byte* pbPartitionId,
[in] ILockBytes* pilb,
[out] unsigned long* pcbBinaryId,
[out, size_is(, *pcbBinaryId)] byte** ppbBinaryId,
[out,optional] VARIANT_BOOL* pfAccepted);
HRESULT RetrieveBinary(
[in] unsigned long cbPartitionId,
[in, size_is(cbPartitionId)] const byte* pbPartitionId,
[in] unsigned long cbBinaryId,
[in, size_is(cbBinaryId)] const byte* pbBinaryId,
[out] ILockBytes** ppilb);
}
}
StoreBinary Method Parameters
Following are descriptions for the parameters of the StoreBinary method.
[in] unsigned long cbPartitionId
Size of the byte array passed to the pbPartitionId parameter. SharePoint Foundation always specifies this value to be 16, which is the size of a GUID.
[in, size_is(cbPartitionId)] const byte* pbPartitionId
Identifier of the site where the binary file belongs. The EBS Provider can use this to map the BlobId parameter to logical collections in the external BLOB store.
[in] ILockBytes* pilb
Pointer to the BLOB data as an ILockBytes instance. Important: The provider must not hold a reference to the ILockBytes* object after returning the HRESULT.
[out] unsigned long* pcbBinaryId
The number of bytes in the BLOB ID.
[out, size_is(, *pcbBinaryId)] byte** ppbBinaryId
Out parameter from the EBS Provider after the BLOB is stored in the external BLOB store. The EBS Provider can provide this ID to the external BLOB store, or the store can return an EBS Provider. SharePoint Foundation does not specify which approach to use. However, it is recommended that you select an approach that can be adapted to future versions of the EBS Provider.
This parameter should be allocated by using CoTaskMemAlloc.
[out,optional] VARIANT_BOOL* pfAccepted
A Boolean parameter. FALSE indicates to SharePoint Foundation that the BLOB file should be stored inline. Under some circumstances, as when SharePoint Foundation cannot support the EBS Provider rejecting a BLOB (that is, when a file is updated for link fix-up or virus scan), SharePoint Foundation passes a NULL pointer. When this occurs, the EBS Provider must either store the file or return a failure HRESULT.
RetrieveBinary Method Parameters
Following are descriptions for the parameters of the RetrieveBinary method. Note that the parameters themselves are the same as for the StoreBinary method.
[in] unsigned long cbPartitionId
Size of the byte array passed to pbPartitionId. SharePoint Foundation always specifies this value to be 16, which is the size of a GUID.[in, size_is(cbPartitionId)] const byte* pbPartitionId
Identifier of the site where the binary file belongs. The EBS Provider can use this to map the BLOB ID to logical collections within the external BLOB store.[in] unsigned long cbBinaryId
The number of bytes in the BLOB ID.[in, size_is(cbBinaryId)] const byte* pbBinaryId
Identifier passed to the EBS Provider to locate the BLOB in the external BLOB store.[out] ILockBytes** ppilb
Pointer to the BLOB data as an ILockBytes instance.
Return Values for StoreBinary
Following are return values and their descriptions when using the ISPExternalBinaryProvider:StoreBinary method.
S_OK |
The method ran successfully. If SharePoint Foundation passed *pfAccepted with a non-NULL address, the file is stored in SQL Server in cases where *pfAccepted is VARIANT_FALSE. Otherwise SharePoint Foundation stores the value in ppbBinaryId and records that the BLOB was stored externally. |
E_FAIL |
SharePoint Foundation indicates to the user that the file was not stored; further, SharePoint Foundation does not alter any of the out parameters. (The EBS Provider is assumed to have called CoTaskMemFree if CoTaskMemAlloc was called.) |
SharePoint Foundation logs unexpected HRESULT returns and reacts appropriately to both successful and failed HRESULTs.
Return Values for RetrieveBinary
Following are return values and their descriptions when using the ISPExternalBinaryProvider:RetrieveBinary method.
S_OK |
The method ran successfully. SharePoint Foundation reads the file content from the *ppilb parameter and then releases it. |
E_FAIL |
Execution of the method failed. SharePoint Foundation indicates to the user that the file could not be retrieved. SharePoint Foundation does not alter the value in the *ppilb parameter. |
The Provider returns an ILockBytes interface to the storage access stack.
As with the StoreBinary method, the EBS Provider is responsible for logging retrieval events. Windows SharePoint Services logs unexpected HRESULT returns, but otherwise acts as though returns are simply S_OK or E_FAIL.
See Also
Concepts
External Storage of Binary Large Objects (BLOBs) in SharePoint Foundation