119 lines
4.8 KiB
C
119 lines
4.8 KiB
C
|
#include <windows.h>
|
|||
|
#define OLEDBVER 0x0250 // enable ICommandTree interface
|
|||
|
#include <ole2.h>
|
|||
|
#include <oledb.h>
|
|||
|
#include <cmdtree.h>
|
|||
|
#include <ntquery.h>
|
|||
|
|
|||
|
// the maximum number of columns that the user can request in their
|
|||
|
// comma delimited list
|
|||
|
#define MAX_COLUMNS 6
|
|||
|
#define MAX_FRIENDLYNAME 128
|
|||
|
|
|||
|
typedef HRESULT
|
|||
|
(STDAPICALLTYPE *PCIMAKEICOMMAND)(ICommand ** ppQuery,
|
|||
|
ULONG cScope,
|
|||
|
DWORD const * aDepths,
|
|||
|
WCHAR const * const * awcsScope,
|
|||
|
WCHAR const * const * awcsCat,
|
|||
|
WCHAR const * const * awcsMachine );
|
|||
|
|
|||
|
typedef HRESULT
|
|||
|
(STDAPICALLTYPE *PCITEXTTOFULLTREE)(WCHAR const * pwszRestriction,
|
|||
|
WCHAR const * pwszColumns,
|
|||
|
WCHAR const * pwszSortColumns, // may be NULL
|
|||
|
WCHAR const * pwszGroupings, // may be NULL
|
|||
|
DBCOMMANDTREE * * ppTree,
|
|||
|
ULONG cProperties,
|
|||
|
/*optional*/ CIPROPERTYDEF * pReserved,
|
|||
|
LCID LocaleID );
|
|||
|
|
|||
|
class CIndexServerQuery {
|
|||
|
public:
|
|||
|
// This is used to globally initalize the CIndexServerQuery classes
|
|||
|
// by having it load the necessary bits that it needs from Tripoli.
|
|||
|
// It should be called on service startup by any service which
|
|||
|
// expects to use CIndexServerQuery
|
|||
|
static HRESULT GlobalInitialize();
|
|||
|
// This is the global shutdown code... it should be called on service
|
|||
|
// shutdown
|
|||
|
static HRESULT GlobalShutdown();
|
|||
|
// constructor
|
|||
|
CIndexServerQuery();
|
|||
|
//
|
|||
|
// start the query going.
|
|||
|
//
|
|||
|
// arguments:
|
|||
|
// [in] bDeepQuery - TRUE if deep query, FALSE if shallow
|
|||
|
// [in] pwszQueryString - the tripoli query string
|
|||
|
// [in] pwszMachine - the machine to query against (NULL for localhost)
|
|||
|
// [in] pwszCatalog - the tripoli catalog to query against (name or
|
|||
|
// path is okay).
|
|||
|
// [in] pwszScope - the tripoli scope to query against. NULL for the
|
|||
|
// default scope (\).
|
|||
|
// [in] pwszColumns - the columns to return. supported columns are
|
|||
|
// filename,newsarticleid,newsgroup,newsmsgid.
|
|||
|
// note: this string gets altered internally, so
|
|||
|
// it might change from what you pass in.
|
|||
|
// [in] pwszSortOrder - sort priority for the columns. NULL to return
|
|||
|
// unsorted
|
|||
|
//
|
|||
|
HRESULT MakeQuery( BOOL bDeepQuery, WCHAR const *pwszQueryString,
|
|||
|
WCHAR const *pwszMachine, WCHAR const *pwszCatalog,
|
|||
|
WCHAR const *pwszScope, WCHAR *pwszColumns, WCHAR const *pwszSortOrder,
|
|||
|
LCID LocaleID = GetSystemDefaultLCID(), DWORD cMaxRows = 0);
|
|||
|
//
|
|||
|
// get the results from the query
|
|||
|
//
|
|||
|
// arguments:
|
|||
|
// [in] pcResults - pointer to the a size of the ppvResults array
|
|||
|
// [out] pcResults - the number of items put into ppvResults
|
|||
|
// [in/out] ppvResults - an array of pointers to PROPVARIANTS. this is
|
|||
|
// filled in by column for up to *pcResults
|
|||
|
// rows.
|
|||
|
// [out] pfMore - set to TRUE if there are more results, FALSE if
|
|||
|
// this is the last set of results.
|
|||
|
//
|
|||
|
// usage:
|
|||
|
// DWORD cResults;
|
|||
|
// PROPVARIANT *rgpvResults[COLUMNS * ROWS];
|
|||
|
// BOOL fMore;
|
|||
|
// cResults = ROWS;
|
|||
|
// HRESULT hr;
|
|||
|
// hr = GetQueryResults(&cResults, rgpvResults, &fMore);
|
|||
|
// if (FAILED(hr)) /* handle error */
|
|||
|
// else {
|
|||
|
// for (i = 0; i < ROWS; i++) {
|
|||
|
// PROPVARIANT **ppvColumn = rgpvResults + (j * ROWS);
|
|||
|
// /* ppvColumn[0] has column 0 in row j */
|
|||
|
// /* ppvColumn[1] has column 1 in row j */
|
|||
|
// /* etc... */
|
|||
|
// }
|
|||
|
// }
|
|||
|
//
|
|||
|
HRESULT GetQueryResults(DWORD *pcResults, PROPVARIANT **ppvResults,
|
|||
|
BOOL *pfMore);
|
|||
|
~CIndexServerQuery();
|
|||
|
|
|||
|
private:
|
|||
|
// class globals
|
|||
|
static HMODULE m_hmQuery;
|
|||
|
static PCIMAKEICOMMAND m_pfnCIMakeICommand;
|
|||
|
static PCITEXTTOFULLTREE m_pfnCITextToFullTree;
|
|||
|
|
|||
|
// class variables
|
|||
|
HACCESSOR m_hAccessor;
|
|||
|
IRowset *m_pRowset;
|
|||
|
DWORD m_cCols;
|
|||
|
BOOL m_fNoMoreRows;
|
|||
|
HROW *m_phRows;
|
|||
|
DBCOUNTITEM m_cRowHandlesAllocated;
|
|||
|
DBCOUNTITEM m_cRowHandlesInUse;
|
|||
|
struct tagCIPROPERTYDEF *m_pPropDef;
|
|||
|
DWORD m_cPropDef;
|
|||
|
|
|||
|
HRESULT CreateAccessor(WCHAR *szColumns);
|
|||
|
HRESULT BuildFriendlyNames(const WCHAR *pwszQueryString);
|
|||
|
void ReleaseAccessor();
|
|||
|
};
|
|||
|
|