📄 jwantquery.pas
字号:
{******************************************************************************}
{ }
{ Indezing Service Query API interface Unit for Object Pascal }
{ }
{ Portions created by Microsoft are Copyright (C) 1995-2001 Microsoft }
{ Corporation. All Rights Reserved. }
{ }
{ The original file is: nyquery.h, released August 2001. The original Pascal }
{ code is: NtQuery.pas, released December 2000. The initial developer of the }
{ Pascal code is Marcel van Brakel (brakelm@chello.nl). }
{ }
{ Portions created by Marcel van Brakel are Copyright (C) 1999-2001 }
{ Marcel van Brakel. All Rights Reserved. }
{ }
{ Obtained through: Joint Endeavour of Delphi Innovators (Project JEDI) }
{ }
{ You may retrieve the latest version of this file at the Project JEDI home }
{ page, located at http://delphi-jedi.org or my personal homepage located at }
{ http://members.chello.nl/m.vanbrakel2 }
{ }
{ The contents of this file are used with permission, subject to the Mozilla }
{ Public License Version 1.1 (the "License"); you may not use this file except }
{ in compliance with the License. You may obtain a copy of the License at }
{ http://www.mozilla.org/MPL/MPL-1.1.html }
{ }
{ Software distributed under the License is distributed on an "AS IS" basis, }
{ WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for }
{ the specific language governing rights and limitations under the License. }
{ }
{ Alternatively, the contents of this file may be used under the terms of the }
{ GNU Lesser General Public License (the "LGPL License"), in which case the }
{ provisions of the LGPL License are applicable instead of those above. }
{ If you wish to allow use of your version of this file only under the terms }
{ of the LGPL License and not to allow others to use your version of this file }
{ under the MPL, indicate your decision by deleting the provisions above and }
{ replace them with the notice and other provisions required by the LGPL }
{ License. If you do not delete the provisions above, a recipient may use }
{ your version of this file under either the MPL or the LGPL License. }
{ }
{ For more information about the LGPL: http://www.gnu.org/copyleft/lesser.html }
{ }
{******************************************************************************}
unit JwaNtQuery;
{$WEAKPACKAGEUNIT}
{$HPPEMIT ''}
{$HPPEMIT '#include "ntquery.h"'}
{$HPPEMIT ''}
{$I WINDEFINES.INC}
interface
uses
ActiveX, ComObj, {TODO} JwaWinType;
type
// TODO STUBS see CmdTree.h (cmdtree.idl)
IFilter = Pointer;
IUnkown = Pointer;
ICommand = Pointer;
PPWCHAR = ^PWCHAR;
REFIID = TGUID; // also in ActiveDS
DBID = Pointer;
DBCOMMANDTREE = Pointer;
PDBCOMMANDTREE = Pointer;
DBCOMMANDOP = Pointer;
//
// Use this path for the null catalog, one that doesn't have an index.
// Use it to search for properties of files that are not indexed.
//
const
CINULLCATALOG = '::_noindex_::';
{$EXTERNALSYM CINULLCATALOG}
//
// Use this path to connect to the server for administration work
// (i.e. DocStoreAdmin.) No catalog is associated with the connection
//
CIADMIN = '::_nodocstore_::';
{$EXTERNALSYM CIADMIN}
//
// Minimal support for persistent handlers.
//
function LoadIFilter(pwcsPath: PWCHAR; pUnkOuter: IUnknown; out ppIUnk: IFilter): HRESULT; stdcall;
{$EXTERNALSYM LoadIFilter}
const
LIFF_LOAD_DEFINED_FILTER = 1;
{$EXTERNALSYM LIFF_LOAD_DEFINED_FILTER}
LIFF_IMPLEMENT_TEXT_FILTER_FALLBACK_POLICY = 2;
{$EXTERNALSYM LIFF_IMPLEMENT_TEXT_FILTER_FALLBACK_POLICY}
LIFF_FORCE_TEXT_FILTER_FALLBACK = 3;
{$EXTERNALSYM LIFF_FORCE_TEXT_FILTER_FALLBACK}
function LoadIFilterEx(pwcsPath: PWCHAR; dwFlags: DWORD; const riid: REFIID; out ppIUnk: IUnknown): HRESULT; stdcall;
{$EXTERNALSYM LoadIFilterEx}
function BindIFilterFromStorage(pStg: IStorage; pUnkOuter: IUnknown; out ppIUnk: IFilter): HRESULT; stdcall;
{$EXTERNALSYM BindIFilterFromStorage}
function BindIFilterFromStream(pStm: IStream; pUnkOuter: IUnkown; out ppIUnk: IFilter): HRESULT; stdcall;
{$EXTERNALSYM BindIFilterFromStream}
function LocateCatalogsW(pwszScope: PWCHAR; iBmk: ULONG; pwszMachine: PWCHAR;
var pccMachine: ULONG; pwszCat: PWCHAR; var pccCat: ULONG): HRESULT; stdcall;
{$EXTERNALSYM LocateCatalogsW}
//
// For calling from VB
//
function LocateCatalogsA(pwszScope: PCHAR; iBmk: ULONG; pwszMachine: PCHAR;
var pccMachine: ULONG; pwszCat: PCHAR; var pccCat: ULONG): HRESULT; stdcall;
{$EXTERNALSYM LocateCatalogsA}
{$IFDEF UNICODE}
function LocateCatalogs(pwszScope: PWCHAR; iBmk: ULONG; pwszMachine: PWCHAR;
var pccMachine: ULONG; pwszCat: PWCHAR; var pccCat: ULONG): HRESULT; stdcall;
{$EXTERNALSYM LocateCatalogs}
{$ELSE}
function LocateCatalogs(pwszScope: PCHAR; iBmk: ULONG; pwszMachine: PCHAR;
var pccMachine: ULONG; pwszCat: PCHAR; var pccCat: ULONG): HRESULT; stdcall;
{$EXTERNALSYM LocateCatalogs}
{$ENDIF}
// The Index Server Data Source Object CLSID
const
CLSID_INDEX_SERVER_DSO: TGUID = (
D1:$F9AE8980; D2:$7E52; D3:$11d0; D4:($89,$64,$00,$C0,$4F,$D6,$11,$D7));
{$EXTERNALSYM CLSID_INDEX_SERVER_DSO}
// The storage property set
PSGUID_STORAGE: TGUID = (
D1:$b725f130; D2:$47ef; D3:$101a; D4:($a5,$f1,$02,$60,$8c,$9e,$eb,$ac));
{$EXTERNALSYM PSGUID_STORAGE}
//#define PID_STG_DICTIONARY ((PROPID) 0x00000000) //reserved
//#define PID_STG_CODEPAGE ((PROPID) 0x00000001) //reserved
PID_STG_DIRECTORY = PROPID($00000002);
{$EXTERNALSYM PID_STG_DIRECTORY}
PID_STG_CLASSID = PROPID($00000003);
{$EXTERNALSYM PID_STG_CLASSID}
PID_STG_STORAGETYPE = PROPID($00000004);
{$EXTERNALSYM PID_STG_STORAGETYPE}
PID_STG_VOLUME_ID = PROPID($00000005);
{$EXTERNALSYM PID_STG_VOLUME_ID}
PID_STG_PARENT_WORKID = PROPID($00000006);
{$EXTERNALSYM PID_STG_PARENT_WORKID}
PID_STG_SECONDARYSTORE = PROPID($00000007);
{$EXTERNALSYM PID_STG_SECONDARYSTORE}
PID_STG_FILEINDEX = PROPID($00000008);
{$EXTERNALSYM PID_STG_FILEINDEX}
PID_STG_LASTCHANGEUSN = PROPID($00000009);
{$EXTERNALSYM PID_STG_LASTCHANGEUSN}
PID_STG_NAME = PROPID($0000000a);
{$EXTERNALSYM PID_STG_NAME}
PID_STG_PATH = PROPID($0000000b);
{$EXTERNALSYM PID_STG_PATH}
PID_STG_SIZE = PROPID($0000000c);
{$EXTERNALSYM PID_STG_SIZE}
PID_STG_ATTRIBUTES = PROPID($0000000d);
{$EXTERNALSYM PID_STG_ATTRIBUTES}
PID_STG_WRITETIME = PROPID($0000000e);
{$EXTERNALSYM PID_STG_WRITETIME}
PID_STG_CREATETIME = PROPID($0000000f);
{$EXTERNALSYM PID_STG_CREATETIME}
PID_STG_ACCESSTIME = PROPID($00000010);
{$EXTERNALSYM PID_STG_ACCESSTIME}
PID_STG_CHANGETIME = PROPID($00000011);
{$EXTERNALSYM PID_STG_CHANGETIME}
PID_STG_CONTENTS = PROPID($00000013);
{$EXTERNALSYM PID_STG_CONTENTS}
PID_STG_SHORTNAME = PROPID($00000014);
{$EXTERNALSYM PID_STG_SHORTNAME}
PID_STG_MAX = PID_STG_SHORTNAME;
{$EXTERNALSYM PID_STG_MAX}
CSTORAGEPROPERTY = $15;
{$EXTERNALSYM CSTORAGEPROPERTY}
// File System Content Index Framework property set
DBPROPSET_FSCIFRMWRK_EXT: TGUID = (
D1:$A9BD1526; D2:$6A80; D3:$11D0; D4:($8C,$9D,$00,$20,$AF,$1D,$74,$0E));
{$EXTERNALSYM DBPROPSET_FSCIFRMWRK_EXT}
DBPROP_CI_CATALOG_NAME = 2;
{$EXTERNALSYM DBPROP_CI_CATALOG_NAME}
DBPROP_CI_INCLUDE_SCOPES = 3;
{$EXTERNALSYM DBPROP_CI_INCLUDE_SCOPES}
DBPROP_CI_DEPTHS = 4; // obsolete
{$EXTERNALSYM DBPROP_CI_DEPTHS}
DBPROP_CI_SCOPE_FLAGS = 4;
{$EXTERNALSYM DBPROP_CI_SCOPE_FLAGS}
DBPROP_CI_EXCLUDE_SCOPES = 5;
{$EXTERNALSYM DBPROP_CI_EXCLUDE_SCOPES}
DBPROP_CI_SECURITY_ID = 6;
{$EXTERNALSYM DBPROP_CI_SECURITY_ID}
DBPROP_CI_QUERY_TYPE = 7;
{$EXTERNALSYM DBPROP_CI_QUERY_TYPE}
// Query Extension property set
DBPROPSET_QUERYEXT: TGUID = (
D1:$A7AC77ED; D2:$F8D7; D3:$11CE; D4:($A7,$98,$00,$20,$F8,$00,$80,$25));
{$EXTERNALSYM DBPROPSET_QUERYEXT}
DBPROP_USECONTENTINDEX = 2;
{$EXTERNALSYM DBPROP_USECONTENTINDEX}
DBPROP_DEFERNONINDEXEDTRIMMING = 3;
{$EXTERNALSYM DBPROP_DEFERNONINDEXEDTRIMMING}
DBPROP_USEEXTENDEDDBTYPES = 4;
{$EXTERNALSYM DBPROP_USEEXTENDEDDBTYPES}
DBPROP_FIRSTROWS = 7;
{$EXTERNALSYM DBPROP_FIRSTROWS}
// Content Index Framework Core property set
DBPROPSET_CIFRMWRKCORE_EXT: TGUID = (
D1:$afafaca5; D2:$b5d1; D3:$11d0; D4:($8c,$62,$00,$c0,$4f,$c2,$db,$8d));
{$EXTERNALSYM DBPROPSET_CIFRMWRKCORE_EXT}
DBPROP_MACHINE = 2;
{$EXTERNALSYM DBPROP_MACHINE}
DBPROP_CLIENT_CLSID = 3;
{$EXTERNALSYM DBPROP_CLIENT_CLSID}
// MSIDXS Rowset property set
DBPROPSET_MSIDXS_ROWSETEXT: TGUID = (
D1:$aa6ee6b0; D2:$e828; D3:$11d0; D4:($b2,$3e,$00,$aa,$00,$47,$fc,$01));
{$EXTERNALSYM DBPROPSET_MSIDXS_ROWSETEXT}
MSIDXSPROP_ROWSETQUERYSTATUS = 2;
{$EXTERNALSYM MSIDXSPROP_ROWSETQUERYSTATUS}
MSIDXSPROP_COMMAND_LOCALE_STRING = 3;
{$EXTERNALSYM MSIDXSPROP_COMMAND_LOCALE_STRING}
MSIDXSPROP_QUERY_RESTRICTION = 4;
{$EXTERNALSYM MSIDXSPROP_QUERY_RESTRICTION}
//
// Query status values returned by MSIDXSPROP_ROWSETQUERYSTATUS
//
// Bits Effect
// ----- -----------------------------------------------------
// 00-02 Fill Status: How data is being updated, if at all.
// 03-15 Bitfield query reliability: How accurate the result is
STAT_BUSY = (0);
{$EXTERNALSYM STAT_BUSY}
STAT_ERROR = ($1);
{$EXTERNALSYM STAT_ERROR}
STAT_DONE = ($2);
{$EXTERNALSYM STAT_DONE}
STAT_REFRESH = ($3);
{$EXTERNALSYM STAT_REFRESH}
function QUERY_FILL_STATUS(x: DWORD): DWORD;
{$EXTERNALSYM QUERY_FILL_STATUS}
const
STAT_PARTIAL_SCOPE = ($8);
{$EXTERNALSYM STAT_PARTIAL_SCOPE}
STAT_NOISE_WORDS = ($10);
{$EXTERNALSYM STAT_NOISE_WORDS}
STAT_CONTENT_OUT_OF_DATE = ($20);
{$EXTERNALSYM STAT_CONTENT_OUT_OF_DATE}
STAT_REFRESH_INCOMPLETE = ($40);
{$EXTERNALSYM STAT_REFRESH_INCOMPLETE}
STAT_CONTENT_QUERY_INCOMPLETE = ($80);
{$EXTERNALSYM STAT_CONTENT_QUERY_INCOMPLETE}
STAT_TIME_LIMIT_EXCEEDED = ($100);
{$EXTERNALSYM STAT_TIME_LIMIT_EXCEEDED}
STAT_SHARING_VIOLATION = ($200);
{$EXTERNALSYM STAT_SHARING_VIOLATION}
function QUERY_RELIABILITY_STATUS(x: DWORD): DWORD;
{$EXTERNALSYM QUERY_RELIABILITY_STATUS}
// Scope flags
const
QUERY_SHALLOW = 0;
{$EXTERNALSYM QUERY_SHALLOW}
QUERY_DEEP = 1;
{$EXTERNALSYM QUERY_DEEP}
QUERY_PHYSICAL_PATH = 0;
{$EXTERNALSYM QUERY_PHYSICAL_PATH}
QUERY_VIRTUAL_PATH = 2;
{$EXTERNALSYM QUERY_VIRTUAL_PATH}
// query property set (PSGUID_QUERY) properties not defined in oledb.h
PROPID_QUERY_WORKID = 5;
{$EXTERNALSYM PROPID_QUERY_WORKID}
PROPID_QUERY_UNFILTERED = 7;
{$EXTERNALSYM PROPID_QUERY_UNFILTERED}
PROPID_QUERY_VIRTUALPATH = 9;
{$EXTERNALSYM PROPID_QUERY_VIRTUALPATH}
PROPID_QUERY_LASTSEENTIME = 10;
{$EXTERNALSYM PROPID_QUERY_LASTSEENTIME}
//
// Change or get the current state of a catalog specified.
//
CICAT_STOPPED = $1;
{$EXTERNALSYM CICAT_STOPPED}
CICAT_READONLY = $2;
{$EXTERNALSYM CICAT_READONLY}
CICAT_WRITABLE = $4;
{$EXTERNALSYM CICAT_WRITABLE}
CICAT_NO_QUERY = $8;
{$EXTERNALSYM CICAT_NO_QUERY}
CICAT_GET_STATE = $10;
{$EXTERNALSYM CICAT_GET_STATE}
CICAT_ALL_OPENED = $20;
{$EXTERNALSYM CICAT_ALL_OPENED}
function SetCatalogState(pwcsCat, pwcsMachine: PWCHAR; dwNewState: DWORD;
var pdwOldState: DWORD): HRESULT; stdcall;
{$EXTERNALSYM SetCatalogState}
//
// Query catalog state
//
const
CI_STATE_SHADOW_MERGE = $0001; // Index is performing a shadow merge
{$EXTERNALSYM CI_STATE_SHADOW_MERGE}
CI_STATE_MASTER_MERGE = $0002; // Index is performing a master merge
{$EXTERNALSYM CI_STATE_MASTER_MERGE}
CI_STATE_CONTENT_SCAN_REQUIRED = $0004; // Index is likely corrupt, and a rescan is required
{$EXTERNALSYM CI_STATE_CONTENT_SCAN_REQUIRED}
CI_STATE_ANNEALING_MERGE = $0008; // Index is performing an annealing (optimizing) merge
{$EXTERNALSYM CI_STATE_ANNEALING_MERGE}
CI_STATE_SCANNING = $0010; // Scans are in-progress
{$EXTERNALSYM CI_STATE_SCANNING}
CI_STATE_RECOVERING = $0020; // Index metadata is being recovered
{$EXTERNALSYM CI_STATE_RECOVERING}
CI_STATE_INDEX_MIGRATION_MERGE = $0040; // Reserved for future use
{$EXTERNALSYM CI_STATE_INDEX_MIGRATION_MERGE}
CI_STATE_LOW_MEMORY = $0080; // Indexing is paused due to low memory availability
{$EXTERNALSYM CI_STATE_LOW_MEMORY}
CI_STATE_HIGH_IO = $0100; // Indexing is paused due to a high rate of I/O
{$EXTERNALSYM CI_STATE_HIGH_IO}
CI_STATE_MASTER_MERGE_PAUSED = $0200; // Master merge is paused
{$EXTERNALSYM CI_STATE_MASTER_MERGE_PAUSED}
CI_STATE_READ_ONLY = $0400; // Indexing has been manually paused (read-only)
{$EXTERNALSYM CI_STATE_READ_ONLY}
CI_STATE_BATTERY_POWER = $0800; // Indexing is paused to conserve battery life
{$EXTERNALSYM CI_STATE_BATTERY_POWER}
CI_STATE_USER_ACTIVE = $1000; // Indexing is paused due to high user activity (keyboard/mouse)
{$EXTERNALSYM CI_STATE_USER_ACTIVE}
CI_STATE_STARTING = $2000; // Index is still starting up
{$EXTERNALSYM CI_STATE_STARTING}
CI_STATE_READING_USNS = $4000; // USNs on NTFS volumes are being processed
{$EXTERNALSYM CI_STATE_READING_USNS}
//#include <pshpack4.h>
type
_CI_STATE = record
cbStruct: DWORD;
cWordList: DWORD;
cPersistentIndex: DWORD;
cQueries: DWORD;
cDocuments: DWORD;
cFreshTest: DWORD;
dwMergeProgress: DWORD;
eState: DWORD;
cFilteredDocuments: DWORD;
cTotalDocuments: DWORD;
cPendingScans: DWORD;
dwIndexSize: DWORD;
cUniqueKeys: DWORD;
cSecQDocuments: DWORD;
dwPropCacheSize: DWORD;
end;
{$EXTERNALSYM _CI_STATE}
CI_STATE = _CI_STATE;
{$EXTERNALSYM CI_STATE}
TCiState = CI_STATE;
PCiState = ^CI_STATE;
//#include <poppack.h>
function CIState(pwcsCat, pwcsMachine: PWCHAR; var pCiState: CI_STATE): HRESULT; stdcall;
{$EXTERNALSYM CIState}
//
// Create an ICommand, specifying scopes, catalogs, and machines
//
function CIMakeICommand(out ppCommand: ICommand; cScope: ULONG; aDepths: LPDWORD;
awcsScope, awcsCatalogs, awcsMachine: PPWCHAR): HRESULT; stdcall;
{$EXTERNALSYM CIMakeICommand}
//
// Create an ICommand, specifying a catalog and machine
//
function CICreateCommand(out ppCommand: IUnknown; pUnkOuter: IUnknown;
const riid: REFIID; pwcsCatalog, pwcsMachine: PWCHAR): HRESULT; stdcall;
{$EXTERNALSYM CICreateCommand}
type
tagCIPROPERTYDEF = record
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -