SECPidlMgr Class
template <class T>
class SECPidlMgr
SECPidlMgr
Defined in: SECPidlMgr.h
Comments
This class encapsulates the operations on PIDL. It requires a template argument that is only used to access the data in the PIDL in a type safe way. There is a very important requirements to the data in this template class T. That is, all the data in this class has to in a single contigous memory block. Generally, you don't need to override this class. However, if you are data type class T dyamically change size, you should first layout the data in a memory block before call CreateItem method giving it the memory location and the memory size. Refer to MirrorDirectory sample for an example. This class is intended to be used in the shell and namespace extension development. As documented in the Win32 SDK, the memory management should be handled using IMalloc interface obtained from the shell. So you should always use instance of this class to create and delete PIDL. Whenever a instance of this class is successfully created, it will have a usable IMalloc interface pointer.
Class Template Arguments
T
The structured data in the PIDL
Class Members
CComPtr<IMalloc> m_spMalloc
Memory managing object
Constructor
void Delete(LPITEMIDLIST pidl)
Delete the given pidl
virtual LPITEMIDLIST CreateItem(LPBYTE pData, SEC_UINT nInSize)
Create PIDL from given data
LPITEMIDLIST Copy(LPCITEMIDLIST pidlSrc)
Make a copy of the given pidl
T* GetDataPointer(LPCITEMIDLIST pidl)
Get the pointer to the data in the given pidl
T* GetLastDataPointer(LPCITEMIDLIST pidl)
Get the pointer to the data of the last pidl
SEC_UINT GetSize(LPCITEMIDLIST pidl)
Get the totoal size of the pidl
LPITEMIDLIST GetNextItem(LPCITEMIDLIST pidl)
Get Next pidl of the given pidl
LPITEMIDLIST GetLastItem(LPCITEMIDLIST pidl)
Get the last pidl of the given pidl
LPITEMIDLIST Concatenate(LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2)
Create a pidl that is the concatenation of the given two pidls
LPITEMIDLIST* DupPidlArray(LPCITEMIDLIST* aSrcPidls, int nCount)
Duplicate an PIDL array
void DeletePidlArray(LPITEMIDLIST* apidls, int nCount)
Free the memory used by the given PIDL array