//+--------------------------------------------------------------------------- // // File: iofs.h // // Contents: OFS interfaces // // History: 27-Oct-93 VicH Created. // // Copyright (C) Microsoft Corporation 1991 // //---------------------------------------------------------------------------- #ifndef INCL_IOFS #define INCL_IOFS #include #include #include #include #define CGUID_StdOfsFolder \ { 0x49691d58, \ 0x7e17, 0x101a, \ { 0xa9, 0x1c, 0x08, 0x00, 0x2b, 0x2e, 0xcd, 0xa9 } } #define CGUID_StdOfsFile \ { 0x49691dbc, \ 0x7e17, 0x101a, \ { 0xa9, 0x1c, 0x08, 0x00, 0x2b, 0x2e, 0xcd, 0xa9 } } #define CGUID_StdDownlevelFolder \ { 0x49691e20, \ 0x7e17, 0x101a, \ { 0xa9, 0x1c, 0x08, 0x00, 0x2b, 0x2e, 0xcd, 0xa9 } } #define CGUID_StdDownlevelFile \ { 0x49691e84, \ 0x7e17, 0x101a, \ { 0xa9, 0x1c, 0x08, 0x00, 0x2b, 0x2e, 0xcd, 0xa9 } } //+-------------------------------------------------------------------------- // Structure: DELETION_ENTRY // // Synopsis: information stored in index about each deleted object // and returned from enumerations //--------------------------------------------------------------------------- typedef struct _DELETION_ENTRY // de { USN usn; // usn of deletion operation LONGLONG llDeleteTime; // time of deletion ULONG workid; // id of object deleted ULONG workidParent; // id of parent of object deleted unsigned cwcPathOld:12; // length of old path unsigned cwcPathNew:12; // length of new path if rename unsigned cwcShortName:4; // length of old short name unsigned Flags:4; // flags (DELEF_*) OBJECTID oid; // object id WCHAR awcPath[1]; // paths : // oldpath [+ newpath] [+ shortname] } DELETION_ENTRY; #define CB_DELETION_ENTRY FIELD_OFFSET(DELETION_ENTRY, awcPath) #define DELEF_OBJECTID_EXISTS 0x00000001 //+-------------------------------------------------------------------------- // Structure: DELETION_ENUM_ENTRY // // Synopsis: entry returned by a deletion enumerator //--------------------------------------------------------------------------- typedef struct _DELETION_ENUM_ENTRY // dee { ULONG offset; // offset to next entry ULONG pad; // quad align next field DELETION_ENTRY de; // entry } DELETION_ENUM_ENTRY; #define CB_DELETION_ENUM_ENTRY FIELD_OFFSET(DELETION_ENUM_ENTRY, de.awcPath) //+-------------------------------------------------------------------------- // Structure: DELETION_ENUM_BUFFER // // Synopsis: actual deletion enumeration buffer //--------------------------------------------------------------------------- typedef struct _DELETION_ENUM_BUFFER // denb { USN usnMin; // minimum usn in log DELETION_ENUM_ENTRY adee[1]; // array of deletion entries } DELETION_ENUM_BUFFER; //+-------------------------------------------------------------------------- // Structure: DELETION_ENUM_ARGS // // Synopsis: arguments to GetDeletionsAfterUsn fsctl //--------------------------------------------------------------------------- typedef struct _DELETION_ENUM_ARGS // dea { USN usn; ULONG grbit; ULONG pad; // pad to quadword boundary } DELETION_ENUM_ARGS; #define DENF_INCLUDE_RENAMES 0x00000001 //+-------------------------------------------------------------------------- // Structure: SERVICE_ARGS // // Synopsis: arguments to RegisterDeletionLogService fsctl //--------------------------------------------------------------------------- typedef struct _SERVICE_ARGS // sa { USN usnMinRetain; // minimum usn to retain OBJECTID oidService; // guid of service BOOLEAN fCancel; // cancel service BYTE pad[3]; // pad to quadword boundary } SERVICE_ARGS; #define CB_SERVICE_ARGS FIELD_OFFSET(SERVICE_ARGS, pad) //+-------------------------------------------------------------------------- // Structure: SERVICE_ENUM_ENTRY // // Synopsis: entry within a service enum //--------------------------------------------------------------------------- typedef struct _SERVICE_ENUM_ENTRY // see { USN usnMinRetain; // minimum usn to retain OBJECTID oid; // object id of service ULONG pad; } SERVICE_ENUM_ENTRY; //+-------------------------------------------------------------------------- // Structure: SERVICE_ENUM // // Synopsis: result of EnumerateDeletionLogServices //--------------------------------------------------------------------------- typedef struct _SERVICE_ENUM // se { ULONG csee; // # of entries ULONG pad; // quad align next field SERVICE_ENUM_ENTRY asee[1]; // array of entries } SERVICE_ENUM; //+-------------------------------------------------------------------------- // Structure: OLENAMES // // Synopsis: input to RtlNameToOleId & result of RtlOleIdToName //--------------------------------------------------------------------------- typedef struct _OLENAMEENTRY // one { ULONG cbName; WCHAR awcName[1]; // variable size array } OLENAMEENTRY; #define CB_OLENAMEENTRY FIELD_OFFSET(OLENAMEENTRY, awcName) typedef struct _OLENAMES // on { ULONG cNames; OLENAMEENTRY aone[1]; // variable sized array } OLENAMES; #define CB_OLENAMES FIELD_OFFSET(OLENAMES, aone) //+-------------------------------------------------------------------------- // Structure: FINDOBJECT // // Synopsis: used internally by RtlSearchVolume //--------------------------------------------------------------------------- // FINDOBJECT.oid: // ObjectId to match // // FINDOBJECT.cLineage: // In. Max of lineage matches to return. // 0 -> lookup objectid only // 1 -> return match by ObjectId + 1 lineage id match max. // 2 -> return match by ObjectId + 2 lineage id matches max. // // FINDOBJECT.ulFlags: // FO_CONTINUE_ENUM clear -> query for exact id and then lineage // as controlled by cLineage // FO_CONTINUE_ENUM set -> query for lineage only starting at oid. typedef struct _FINDOBJECT { OBJECTID oid; USHORT cLineage; ULONG ulFlags; } FINDOBJECT; #define MAX_LINEAGE_MATCHES 10 #define FO_CONTINUE_ENUM 0x00000001 //+-------------------------------------------------------------------------- // Structure: FINDOBJECTOUT // // Synopsis: result of RtlSearchVolume //--------------------------------------------------------------------------- // FINDOBJECTOUT.cwcExact; // Non-zero -> first path returned is exact match count of characters // in exact match, not including nuls. // // FINDOBJECTOUT.cMatches; // 1 -> one lineage match returned, 2->two etc. // // FINDOBJECTOUT.ulNextFirstUniquifier; // value to pass in oid.Uniquifier on next call. // // FINDOBJECTOUT.wszPaths[MAX_PATH + 1]; // contains (fExact? 1 : 0) + cMatches paths. // NOTE!! From wszPaths[0] ... end of system buffer contains paths // of exact match and candidates. typedef struct _FINDOBJECTOUT { USHORT cwcExact; USHORT cMatches; ULONG ulNextFirstUniquifier; WCHAR wszPaths[MAX_PATH + 1]; } FINDOBJECTOUT; //+-------------------------------------------------------------------------- // Structure: TUNNELMODE, TUNNELMODEOUT // // Synopsis: used internally by RtlSetTunnelMode //--------------------------------------------------------------------------- typedef struct _TUNNELMODE { ULONG ulFlags; // Bits to set within mask ULONG ulMask; // Mask of bits to change } TUNNELMODE; typedef struct _TUNNELMODEOUT { ULONG ulFlags; } TUNNELMODEOUT; #define TM_ENABLE_TUNNEL 0x00000001 //+-------------------------------------------------------------------------- // Summary Catalog Data Structures: //--------------------------------------------------------------------------- #ifndef CATALOGSTG_ROWID_INVALID typedef ULONG CATALOGSTG_ROWID; #define CATALOGSTG_ROWID_INVALID ((CATALOGSTG_ROWID) 0xffffffff) #endif // CATALOGSTG_ROWID_INVALID //+-------------------------------------------------------------------------- // Structure: CATALOG_QUERY_ROWINFO // // Synopsis: used for Query of catalog rows //--------------------------------------------------------------------------- typedef struct _CATALOG_QUERY_ROWINFO // cqr { ULONG NextEntryOffset; // Offset to next CATALOG_ROW_DATA CATALOGSTG_ROWID RowId; // RowId PROPVARIANT aProp[1]; // PROPVARIANT array for requested columns //BYTE abVarBuf[]; // variable PROPVARIANT data } CATALOG_QUERY_ROWINFO; #define CB_CATALOG_QUERY_ROWINFO FIELD_OFFSET(CATALOG_QUERY_ROWINFO, aProp) //+-------------------------------------------------------------------------- // Structure: FSCTL_CATALOG_QUERY_INFO, private to OFS // // Synopsis: used for Query of catalog columns //+-------------------------------------------------------------------------- typedef struct _FSCTL_CATALOG_QUERY_INFO // cqi { VOID *pvBase; // base offset of user space memory block ULONG Key; // start column/row caller to 0 before first call ULONG Count; // max (IN) & returned (OUT) column/row count union { ULONG cRowId; // IN: serialized RowId count BOOLEAN fMoreData; // OUT: TRUE --> more columns/rows to fetch }; } FSCTL_CATALOG_QUERY_INFO; //+-------------------------------------------------------------------------- // Structure: FSCTL_CATALOG_UPDATE_INFO, private to OFS // // Synopsis: used for Update of catalog rows //+-------------------------------------------------------------------------- typedef struct _FSCTL_CATALOG_UPDATE_INFO // cui { CATALOGSTG_ROWID RowId; // IN+OUT: RowId union { ULONG Operation; // IN: requested operation NTSTATUS Status; // OUT: operation status }; } FSCTL_CATALOG_UPDATE_INFO; //+-------------------------------------------------------------------------- // BUGBUG: Obsolete Summary Catalog data structures //--------------------------------------------------------------------------- //+-------------------------------------------------------------------------- // Structure: CATALOG_ROW_DATA // // Synopsis: used for Delete, Set, Get of catalog rows //--------------------------------------------------------------------------- typedef struct _CATALOG_ROW_DATA // crd { ULONG NextEntryOffset; CATALOGSTG_ROWID RowId; BYTE RowData[1]; } CATALOG_ROW_DATA; #define CB_CATALOG_ROW_DATA FIELD_OFFSET(CATALOG_ROW_DATA, RowData) //+-------------------------------------------------------------------------- // Structure: CATALOG_ROW_INFO // // Synopsis: used for Delete, Set, Get of catalog rows //--------------------------------------------------------------------------- typedef struct _CATALOG_ROW_INFO // cri { CATALOGSTG_ROWID RowId; NTSTATUS Status; ULONG dwReserved; // Must be zero, strictly enforced. PROPVARIANT *aVariants; } CATALOG_ROW_INFO; //+-------------------------------------------------------------------------- // Structure: CATALOG_GET_ROW_PARAMS, CATALOG_GET_ROW_RESULTS // // Synopsis: used by RtlGetCatalogRows //--------------------------------------------------------------------------- typedef struct _CATALOG_GET_ROW_PARAMS // cgrp { ULONG cColumns; // No. of columns FULLPROPSPEC *aColumnSpec; // the column specifiers ULONG cRowsRequested; // No. of rows requested. CATALOG_ROW_INFO *aRowInfo; // Row. Ids of the rows. ULONG cbVarData; // buffer size for variable length data VOID *pvVarData; // buffer for variable length data } CATALOG_GET_ROW_PARAMS; typedef struct _CATALOG_GET_ROW_RESULTS // cgrr { ULONG cRowsReturned; // No. of rows returned ULONG cbVarDataUsed; // Length of the var. data buffer used. } CATALOG_GET_ROW_RESULTS; //+-------------------------------------------------------------------------- // Structure: CATALOG_ENUMERATE_ROW_PARAMS, CATALOG_ENUMERATE_ROW_RESULTS // // Synopsis: used by RtlEnumerateCatalogRows //--------------------------------------------------------------------------- typedef struct _CATALOG_ENUMERATE_ROW_PARAMS // cerp { CATALOGSTG_ROWID LastFetchedRowId; // last RowId retrieved, 0 = from start ULONG cColumns; // No. of columns FULLPROPSPEC *aColumnSpec; // the column ids. ULONG cRowsRequested; // No. of rows requested. CATALOG_ROW_INFO *aRowInfo; // Row. Ids of the rows. ULONG cbVarData; // buffer size for variable length data VOID *pvVarData; // buffer for variable length data } CATALOG_ENUMERATE_ROW_PARAMS; typedef struct _CATALOG_ENUMERATE_ROW_RESULTS // cerr { ULONG cRowsReturned; // No. of rows returned ULONG cbVarDataUsed; // Length of the var. data buffer used. } CATALOG_ENUMERATE_ROW_RESULTS; //+-------------------------------------------------------------------------- // BUGBUG: End Obsolete Summary Catalog data structures //--------------------------------------------------------------------------- //+-------------------------------------------------------------------------- // Structure: VIEW_COLUMN // // Synopsis: descriptor of a view column. If cwcName is 0, then the propid // identifies the column; otherwise the property name follows // this header //--------------------------------------------------------------------------- typedef struct _VIEW_COLUMN { GUID PropertySet; PROPID propid; ULONG cwcName; ULONG dwOrder; } VIEW_COLUMN; //+-------------------------------------------------------------------------- // Structure: VIEW_INDEX_ENTRY // // Synopsis: information stored about a particular view //--------------------------------------------------------------------------- typedef struct _VIEW_INDEX_ENTRY { ULONG ibEntry; // offset to next entry or 0 ULONG id; // identifier for view ULONG ccol; // # of columns for view ULONG ckey; // # of key columns in view ULONG flags; // flags associated with view VIEW_COLUMN avc[1]; // array of view columns } VIEW_INDEX_ENTRY; #define VF_RESTRICTION_EXISTS 0x00000001 // a restriction exists //+-------------------------------------------------------------------------- // Enumeration: SPACE_PARAMETER_OPS // // Synopsis: operations that can be performed using FSCTL_CHANGE_DISKSPACE //--------------------------------------------------------------------------- typedef enum _SPACE_PARAMETER_OPS // spo { spDecommit, // decommit memory from file spSetFileSize, // set file size for file } SPACE_PARAMETER_OPS; //+-------------------------------------------------------------------------- // Structure: SPACE_PARAMETERS // // Synopsis: parameters controlling allocation of disk space for a file // using FSCTL_CHANGE_DISKSPACE //--------------------------------------------------------------------------- typedef struct _SPACE_PARAMETERS // sp { LARGE_INTEGER lioff; // offset into file ULONG cb; // size of range to allocate/decommit SPACE_PARAMETER_OPS op; // operation to perform } SPACE_PARAMETERS; //+-------------------------------------------------------------------------- // Structure: COMMIT_PARAMETERS // // Synopsis: parameters controlling commit of a structured storage, embedding // or stream using FSCTL_XOLE_COMMIT //--------------------------------------------------------------------------- typedef struct _COMMIT_PARAMETERS // comp { BOOLEAN AbortTransaction; ULONG CommitFlags; } COMMIT_PARAMETERS; //+-------------------------------------------------------------------------- // Structure: LONG_OPERATION_STATUS // // Synopsis: return status for certain long operations such as // creating a view, setting unread maintanence, etc. //--------------------------------------------------------------------------- typedef struct _LONG_OPERATION_STATUS // los { NTSTATUS status; // status code for operation BOOLEAN fPending; // is operation still pending ULONG complete; // percentage complete ULONG id; // id for view created } LONG_OPERATION_STATUS; //+-------------------------------------------------------------------------- // Structure: OFS_DEBUG_INFO // // Synopsis: set and fetch OFS debug info scalars. //--------------------------------------------------------------------------- #define ODI_DEBUG_LEVEL 0 // LONGLONG DebugLevel #define ODI_NO_CORRUPT_ASSERT 1 // BOOLEAN fNoCorruptAssert #define ODI_SINGLE_CLUSTER_ALLOC 2 // BOOLEAN fSingleClusterAlloc #define ODI_NOT_FOUND_ASSERT 3 // BOOLEAN fNotFoundAssert #define ODI_ENABLE_COMPRESSION 4 // BOOLEAN fEnableCompression #define ODI_ENABLE_POSIX 5 // BOOLEAN fEnablePosix #define ODI_ENABLE_EMBEDDINGS 6 // BOOLEAN fEnableEmbeddings typedef struct _OFS_DEBUG_INFO // odi { BYTE InfoType; // Debug Info selector BOOLEAN fSet; // TRUE --> set value, else get value USHORT pad; union { BOOLEAN f; // BOOLEAN value ULONG ul; // ULONG value LONGLONG ll; // LONGLONG value }; } OFS_DEBUG_INFO; //+-------------------------------------------------------------------------- // Structure: USN_CHANGES_CONFIGURATION // // Synopsis: configure usn change table //--------------------------------------------------------------------------- typedef struct _USN_CHANGES_CONFIGURATION { ULONG cbBlock; // size of block ULONG cHash; // size of hash table ULONG iProbe2; // second probe to be used in hash table } USN_CHANGES_CONFIGURATION; #ifdef __cplusplus extern "C" { #endif //+-------------------------------------------------------------------------- // OFS Miscellaneous APIs: //--------------------------------------------------------------------------- NTSTATUS NTSYSAPI NTAPI OFSGetVersion( HANDLE hf, ULONG *pversion ); NTSTATUS NTSYSAPI NTAPI OFSGetCloseUsn( HANDLE h, USN *pusn ); NTSTATUS NTSYSAPI NTAPI RtlGenerateUsn( HANDLE h, USN *pusn ); NTSTATUS NTSYSAPI NTAPI RtlDeleteObject( IN HANDLE hf ); NTSTATUS NTSYSAPI NTAPI RtlDeleteObjectByPath( IN WCHAR const *pwszPath ); NTSTATUS NTSYSAPI NTAPI RtlNameToOleId( IN HANDLE hf, // must be volume handle IN ULONG cbNames, IN OLENAMES const *pon, OUT ULONG *pOleId ); NTSTATUS NTSYSAPI NTAPI RtlOleIdToName( IN HANDLE hf, // must be volume handle IN ULONG cOleId, IN ULONG const *pOleId, IN OUT ULONG *pcbNameBuf, OUT OLENAMES *pon ); NTSTATUS NTSYSAPI NTAPI RtlQueryQuota( IN HANDLE hf, // must be volume handle IN OUT ULONG *pcb, IN OUT FILE_QUOTA_INFORMATION *pfqi ); NTSTATUS NTSYSAPI NTAPI RtlQueryClassId( IN HANDLE hf, OUT GUID *pclsid ); NTSTATUS NTSYSAPI NTAPI RtlSetClassId( IN HANDLE hf, OPTIONAL IN GUID const *pclsid ); NTSTATUS NTSYSAPI NTAPI RtlSetReplicationState( IN HANDLE hf ); //+-------------------------------------------------------------------------- // Structure: ACCESS_CHECK_PARAMETERS // // Synopsis: The parameters used to call FSCTL_FILE_ACCESS_CHECK //--------------------------------------------------------------------------- #if defined(KERNEL) typedef struct _ACCESS_CHECK_PARAMETERS // acp { SECURITY_SUBJECT_CONTEXT SubjectContext; ULONG DesiredAccess; } ACCESS_CHECK_PARAMETERS; #endif //+-------------------------------------------------------------------------- // ObjectId & Link Tracking APIs: //--------------------------------------------------------------------------- NTSTATUS NTSYSAPI NTAPI RtlQueryObjectId( IN HANDLE hf, OUT OBJECTID *poid ); NTSTATUS NTSYSAPI NTAPI RtlSetObjectId( IN HANDLE hf, OPTIONAL IN OBJECTID const *poid ); VOID NTSYSAPI NTAPI RtlGenerateRelatedObjectId( IN OBJECTID const *poidOld, OUT OBJECTID *poidNew ); // inline NTSTATUS // RtlGenerateObjectId(OBJECTID *poid) // { // poid->Uniquifier = 0; // return(UuidCreate(&poid->Lineage)); // } #define RtlGenerateObjectId(poid) \ ((poid)->Uniquifier = 0, UuidCreate(&(poid)->Lineage)) NTSTATUS NTSYSAPI NTAPI RtlSetTunnelMode( IN HANDLE hf, // must be volume handle IN ULONG ulFlags, IN ULONG ulMask, OUT ULONG *pulOld ); NTSTATUS NTSYSAPI NTAPI RtlSearchVolume( IN HANDLE hAncestor, IN OBJECTID const* poid, IN USHORT cLineage, IN BOOLEAN fContinue, IN ULONG usBufLen, OUT FINDOBJECTOUT *pfoo ); //+-------------------------------------------------------------------------- // Cairo only Property Access APIs: //--------------------------------------------------------------------------- NTSTATUS PROPSYSAPI PROPAPI RtlCreateMappedStream( IN HANDLE h, // property set handle IN ULONG Flags, // [CMS_WRITE] | [CMS_TRANSACTED] OUT NTMAPPEDSTREAM *pms); // Nt mapped stream NTSTATUS PROPSYSAPI PROPAPI RtlCloseMappedStream( IN NTMAPPEDSTREAM ms); // Nt mapped stream NTSTATUS PROPSYSAPI PROPAPI RtlQueryPropertiesDirect( IN HANDLE hf, // handle to object IN ULONG cCol, // property count IN DBID const *aCol, // requested columns IN OUT ULONG *pcbProp, // max (IN) & returned (OUT) space used IN OUT PROPVARIANT *aProp); // cCol returned properties (size = *pcbProp) BOOLEAN PROPSYSAPI PROPAPI RtlCompareVariants( IN USHORT CodePage, IN PROPVARIANT const *pvar1, IN PROPVARIANT const *pvar2); //+-------------------------------------------------------------------------- // BUGBUG: Obsolete OFS Property Access APIs: //--------------------------------------------------------------------------- typedef LPVOID (WINAPI FNMALLOC) (ULONG cb); NTSTATUS NTSYSAPI NTAPI OFSGetProp( HANDLE h, GUID psguid, ULONG cprop, PROPSPEC rgpspec[], PROPID rgpid[], VOID *pttl, PROPVARIANT *pv, FNMALLOC *pMalloc); NTSTATUS NTSYSAPI NTAPI OFSSetProp( HANDLE h, GUID psguid, ULONG cprop, PROPSPEC rgpspec[], PROPID rgpid[], PROPVARIANT rgvar[]); NTSTATUS NTSYSAPI NTAPI OFSDeleteProp( HANDLE h, GUID psguid, ULONG cprop, PROPSPEC rgpspec[]); NTSTATUS NTSYSAPI NTAPI OFSEnumProp( HANDLE h, GUID psguid, ULONG *pcprop, STATPROPSTG rgsps[], ULONG cskip, FNMALLOC *pMalloc); NTSTATUS NTSYSAPI NTAPI OFSEnumPropSet( HANDLE h, BOOLEAN fRestart, ULONG *pcspss, // [in, out] GUID *pkey, // [in, out] STATPROPSETSTG rgspss[]); // [out, size_is(*pcspss)] // BUGBUG: End Obsolete OFS Property Access APIs //+-------------------------------------------------------------------------- // Summary Catalog APIs: //--------------------------------------------------------------------------- NTSTATUS NTSYSAPI NTAPI RtlQueryCatalogColumns( IN HANDLE hCatalog, // handle to summary catalog IN OUT ULONG *pColKey, // caller set to zero before first call IN OUT ULONG *pcCol, // max (IN) & returned (OUT) row count IN OUT ULONG *pcbCol, // max (IN) & returned (OUT) space used in aCol OUT DBID *aCol, // *pcCol returned columns (size = *pcbCol) OUT BOOLEAN *pfMoreData // TRUE --> more columns to fetch ); NTSTATUS NTSYSAPI NTAPI RtlQueryCatalogRows( IN HANDLE hCatalog, // handle to summary catalog IN ULONG cCol, // # of requested columns for all rows IN DBID const *aCol, // requested columns IN OUT CATALOGSTG_ROWID *pRowIdKey, // caller set to 1st RowId or // CATALOGSTG_ROWID_INVALID OPTIONAL IN CATALOGSTG_ROWID const *aRowId, // *pcRow RowIds to fetch, else NULL IN OUT ULONG *pcRow, // max (IN) & returned (OUT) row count IN OUT ULONG *pcbRow, // max (IN) & returned (OUT) space used OUT CATALOG_QUERY_ROWINFO *aQueryRowInfo, // *pcRow returned rows (size = *pcbRow) OUT BOOLEAN *pfMoreData // TRUE --> more rows to fetch ); // The following function is for adding, updating, replacing and deleting rows. // aCol defines the total set of columns which will be operated upon. cBind // may be greater than cCol, but there must exist a value binding in aBind for // each column in aCol. // // In other words: // // ASSERT(cCol <= cBind); // for (i = 0; i < cCol; i++) // { // for (j = 0; j < cBind; j++) // { // if (aBind[j].iColumn == i && // aBind[j].dwPart == DBCOLUMNPART_VALUE) // { // break; // } // } // ASSERT(j < cBind); // // fetch property value for column i from aRowInfo[n].pData buffer // } typedef struct _CATALOG_UPDATE_ROWINFO CATALOG_UPDATE_ROWINFO; NTSTATUS NTSYSAPI NTAPI RtlUpdateCatalogRows( IN HANDLE hCatalog, // handle to summary catalog IN ULONG cCol, // # of columns for all rows IN DBID const *aCol, // pertinent columns IN ULONG cBind, // # of column bindings IN DBBINDING const *aBind, // column binding information IN ULONG cRow, // # of rows in aRowInfo IN OUT CATALOG_UPDATE_ROWINFO *aRowInfo // row Action/RowId/Status and property data ); //+-------------------------------------------------------------------------- // BUGBUG: Obsolete Summary Catalog Access APIs //--------------------------------------------------------------------------- NTSTATUS NTSYSAPI NTAPI RtlEnumerateCatalogRowIds( IN HANDLE hCatalog, IN OUT CATALOGSTG_ROWID *pRowIdKey, IN OUT ULONG *pcrow, OUT CATALOGSTG_ROWID *aRowId ); NTSTATUS NTSYSAPI NTAPI RtlEnumerateCatalogRows( IN HANDLE hCatalog, IN OUT CATALOG_ENUMERATE_ROW_PARAMS *pcerp, OUT CATALOG_ENUMERATE_ROW_RESULTS *pcerr ); NTSTATUS NTSYSAPI NTAPI RtlGetCatalogRows( IN HANDLE hCatalog, IN OUT CATALOG_GET_ROW_PARAMS *pcgrp, OUT CATALOG_GET_ROW_RESULTS *pcgrr ); NTSTATUS NTSYSAPI NTAPI RtlUpdateCatalog( IN HANDLE hCatalog, IN ULONG ccol, IN FULLPROPSPEC const *aColumnSpec, IN ULONG crow, IN OUT CATALOG_ROW_INFO *acro ); NTSTATUS NTSYSAPI NTAPI RtlDeleteCatalogRows( IN HANDLE hCatalog, IN ULONG crow, IN CATALOGSTG_ROWID *aRowId ); //+-------------------------------------------------------------------------- // BUGBUG: End Obsolete Summary Catalog Access APIs //--------------------------------------------------------------------------- //+-------------------------------------------------------------------------- // OFS Deletion Log APIs: //--------------------------------------------------------------------------- NTSTATUS NTSYSAPI NTAPI RtlRegisterDeletionLogService( HANDLE hf, OBJECTID const *poid, USN usn, BOOLEAN fCancel ); NTSTATUS NTSYSAPI NTAPI RtlGetDeletionLogServices( HANDLE hf, OBJECTID const *poid, SERVICE_ENUM *pse, ULONG cb ); NTSTATUS NTSYSAPI NTAPI RtlGetDeletionsAfter( HANDLE hf, USN usn, ULONG grbit, DELETION_ENUM_BUFFER *pdenb, ULONG cb ); //+-------------------------------------------------------------------------- // OFS View APIs: //--------------------------------------------------------------------------- NTSTATUS NTSYSAPI NTAPI EnumerateViews( HANDLE hf, ULONG id, VIEW_INDEX_ENTRY *pvie, ULONG cb ); NTSTATUS NTSYSAPI NTAPI GetViewRestriction( HANDLE hf, ULONG id, RESTRICTION **ppRestriction ); NTSTATUS NTSYSAPI NTAPI DeleteView( HANDLE hf, ULONG id ); NTSTATUS NTSYSAPI NTAPI CreateView( HANDLE hf, RESTRICTION const *pRestriction, COLUMNSET const *pColumns, SORTSET const *pSort ); #ifdef __cplusplus } #endif //+-------------------------------------------------------------------------- // OFS FSCTL codes: // BUGBUG -- move to ntioapi.h at a convenient time //--------------------------------------------------------------------------- #define FSCTL_CI_UPDATE_OBJECTS \ CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 100, METHOD_BUFFERED, FILE_ANY_ACCESS) //+-------------------------------------------------------------------------- // FSCTLs for summary catalog access: //--------------------------------------------------------------------------- #define FSCTL_OFS_QUERY_CATALOG_COLUMNS \ CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 101, METHOD_BUFFERED, FILE_ANY_ACCESS) #define FSCTL_OFS_QUERY_CATALOG_ROWS \ CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 102, METHOD_BUFFERED, FILE_ANY_ACCESS) #define FSCTL_OFS_UPDATE_CATALOG_ROWS \ CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 103, METHOD_BUFFERED, FILE_ANY_ACCESS) //UNUSED: // CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 104, METHOD_BUFFERED, FILE_ANY_ACCESS) //UNUSED: // CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 105, METHOD_BUFFERED, FILE_ANY_ACCESS) #define FSCTL_OFS_ENUMERATE_CATALOG_ROW \ CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 106, METHOD_BUFFERED, FILE_ANY_ACCESS) #define FSCTL_OFS_SET_CATALOG_ROW \ CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 107, METHOD_BUFFERED, FILE_ANY_ACCESS) #define FSCTL_OFS_GET_CATALOG_ROW \ CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 108, METHOD_BUFFERED, FILE_ANY_ACCESS) #define FSCTL_OFS_DELETE_CATALOG_ROW \ CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 109, METHOD_BUFFERED, FILE_ANY_ACCESS) //+-------------------------------------------------------------------------- // Miscellaneous OFS FSCTL codes: //--------------------------------------------------------------------------- #define FSCTL_OFS_VERSION \ CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 110, METHOD_BUFFERED, FILE_ANY_ACCESS) #define FSCTL_OFS_FINDOBJECT \ CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 111, METHOD_BUFFERED, FILE_ANY_ACCESS) #define FSCTL_OFS_QUERY_PROPERTIES \ CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 112, METHOD_BUFFERED, FILE_ANY_ACCESS) #define FSCTL_SET_REPLICATION_STATE \ CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 113, METHOD_BUFFERED, FILE_ANY_ACCESS) //+-------------------------------------------------------------------------- // FSCTLs for xactole: //--------------------------------------------------------------------------- #define FSCTL_XOLE_COMMIT \ CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 114, METHOD_BUFFERED, FILE_ANY_ACCESS) //+-------------------------------------------------------------------------- // Conversion FSCTL: //--------------------------------------------------------------------------- #define FSCTL_OFS_CONVERT_DOCFILE \ CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 115, METHOD_BUFFERED, FILE_ANY_ACCESS) #define FSCTL_OFS_CONVERT_STRUCTURED_OBJECT \ CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 116, METHOD_BUFFERED, FILE_ANY_ACCESS) //+-------------------------------------------------------------------------- // FSCTLs for summary catalog access: //--------------------------------------------------------------------------- #define FSCTL_USN_CHANGES_CONFIGURATION \ CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 117, METHOD_BUFFERED, FILE_ANY_ACCESS) //UNUSED: //CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 118, METHOD_BUFFERED, FILE_ANY_ACCESS) //UNUSED: //CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 119, METHOD_BUFFERED, FILE_ANY_ACCESS) //UNUSED: //CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 120, METHOD_BUFFERED, FILE_ANY_ACCESS) //UNUSED: //CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 121, METHOD_BUFFERED, FILE_ANY_ACCESS) //UNUSED: //CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 122, METHOD_BUFFERED, FILE_ANY_ACCESS) //UNUSED: //CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 123, METHOD_BUFFERED, FILE_ANY_ACCESS) #define FSCTL_DELLOG_REGISTER_SERVICE \ CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 124, METHOD_BUFFERED, FILE_ANY_ACCESS) #define FSCTL_DELLOG_GET_DELETIONS_AFTER \ CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 125, METHOD_BUFFERED, FILE_ANY_ACCESS) #define FSCTL_DELLOG_GET_SERVICES \ CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 126, METHOD_BUFFERED, FILE_ANY_ACCESS) // content index filter daemon interface #define FSCTL_CI_FILTER_READY \ CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 127, METHOD_BUFFERED, FILE_ANY_ACCESS) #define FSCTL_CI_FILTER_DATA_READY \ CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 128, METHOD_NEITHER, FILE_ANY_ACCESS) #define FSCTL_CI_FILTER_DONE \ CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 129, METHOD_BUFFERED, FILE_ANY_ACCESS) #define FSCTL_CI_FILTER_MORE \ CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 130, METHOD_BUFFERED, FILE_ANY_ACCESS) // usn interface #define FSCTL_OFS_USN_GET_CLOSE \ CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 131, METHOD_BUFFERED, FILE_ANY_ACCESS) // set/retrieve debug info #define FSCTL_OFS_DEBUG_INFO \ CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 132, METHOD_BUFFERED, FILE_ANY_ACCESS) // tunnelling #define FSCTL_OFS_TUNNEL_MODE \ CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 133, METHOD_BUFFERED, FILE_ANY_ACCESS) // views #define FSCTL_OFS_CREATE_VIEW \ CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 134, METHOD_BUFFERED, FILE_ANY_ACCESS) #define FSCTL_OFS_ENUMERATE_VIEWS \ CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 135, METHOD_BUFFERED, FILE_ANY_ACCESS) #define FSCTL_OFS_DELETE_VIEW \ CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 136, METHOD_BUFFERED, FILE_ANY_ACCESS) #define FSCTL_OFS_USN_GENERATE \ CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 137, METHOD_BUFFERED, FILE_ANY_ACCESS) //+-------------------------------------------------------------------------- // Miscellaneous OFS FSCTL codes: //--------------------------------------------------------------------------- #define FSCTL_OFS_TRANSLATE_OLENAMES \ CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 138, METHOD_BUFFERED, FILE_ANY_ACCESS) #define FSCTL_OFS_TRANSLATE_OLEIDS \ CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 139, METHOD_BUFFERED, FILE_ANY_ACCESS) #define FSCTL_CI_QUERY_GETNOTIFY \ CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 140, METHOD_BUFFERED, FILE_ANY_ACCESS) #define FSCTL_OFS_CHANGE_DISKSPACE \ CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 141, METHOD_BUFFERED, FILE_ANY_ACCESS) //UNUSED: //CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 142, METHOD_BUFFERED, FILE_ANY_ACCESS) //UNUSED: //CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 143, METHOD_BUFFERED, FILE_ANY_ACCESS) //UNUSED: //CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 144, METHOD_BUFFERED, FILE_ANY_ACCESS) //UNUSED: //CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 145, METHOD_BUFFERED, FILE_ANY_ACCESS) //UNUSED: //CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 146, METHOD_BUFFERED, FILE_ANY_ACCESS) //UNUSED: //CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 147, METHOD_BUFFERED, FILE_ANY_ACCESS) #define FSCTL_OFS_LONG_OPERATION_STATUS \ CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 148, METHOD_BUFFERED, FILE_ANY_ACCESS) //UNUSED: //CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 149, METHOD_BUFFERED, FILE_ANY_ACCESS) #define FSCTL_OFS_CONVERT_COW_TO_LARGE \ CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 150, METHOD_BUFFERED, FILE_ANY_ACCESS) #define FSCTL_OFS_QUERY_QUOTA \ CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 151, METHOD_BUFFERED, FILE_ANY_ACCESS) //UNUSED: //CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 152, METHOD_BUFFERED, FILE_ANY_ACCESS) #define FSCTL_CI_INTERNAL_FORCE_CKPOINT \ CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 153, METHOD_BUFFERED, FILE_ANY_ACCESS) //+-------------------------------------------------------------------------- // FSCTLs for IRowset table access: //--------------------------------------------------------------------------- #define FSCTL_CI_NEW_IROWSET \ CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 154, METHOD_BUFFERED, FILE_ANY_ACCESS) #define FSCTL_CI_QUERY_GETSTATUS \ CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 155, METHOD_BUFFERED, FILE_ANY_ACCESS) #define FSCTL_CI_QUERY_WIDTOPATH \ CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 156, METHOD_BUFFERED, FILE_ANY_ACCESS) //UNUSED //CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 157, METHOD_BUFFERED, FILE_ANY_ACCESS) #define FSCTL_CI_QUERY_SETBINDINGS \ CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 158, METHOD_BUFFERED, FILE_ANY_ACCESS) //UNUSED //CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 159, METHOD_BUFFERED, FILE_ANY_ACCESS) //UNUSED //CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 160, METHOD_BUFFERED, FILE_ANY_ACCESS) //UNUSED //CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 161, METHOD_BUFFERED, FILE_ANY_ACCESS) //UNUSED //CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 162, METHOD_BUFFERED, FILE_ANY_ACCESS) //UNUSED //CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 163, METHOD_BUFFERED, FILE_ANY_ACCESS) #define FSCTL_CI_QUERY_APPROXPOS \ CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 164, METHOD_BUFFERED, FILE_ANY_ACCESS) //UNUSED //CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 165, METHOD_BUFFERED, FILE_ANY_ACCESS) #define FSCTL_CI_QUERY_FREECURSOR \ CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 166, METHOD_BUFFERED, FILE_ANY_ACCESS) #define FSCTL_OFS_GET_VIEW_RESTRICTION \ CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 167, METHOD_BUFFERED, FILE_ANY_ACCESS) #define FSCTL_CI_QUERY_SEEKANDFETCH \ CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 168, METHOD_BUFFERED, FILE_ANY_ACCESS) #define FSCTL_CI_QUERY_RATIOFINISHED \ CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 169, METHOD_BUFFERED, FILE_ANY_ACCESS) #define FSCTL_CI_QUERY_COMPAREBMK \ CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 170, METHOD_BUFFERED, FILE_ANY_ACCESS) // filter pid remapper #define FSCTL_CI_FILTER_PIDREMAPPER \ CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 171, METHOD_BUFFERED, FILE_ANY_ACCESS) // IRowsetWatchRegion #define FSCTL_CI_QUERY_RUNCHANGES \ CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 172, METHOD_BUFFERED, FILE_ANY_ACCESS) #define FSCTL_CI_QUERY_SETWATCHMODE \ CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 173, METHOD_BUFFERED, FILE_ANY_ACCESS) #define FSCTL_CI_QUERY_GETWATCHINFO \ CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 174, METHOD_BUFFERED, FILE_ANY_ACCESS) #define FSCTL_CI_QUERY_SHRINKWATCHREGION \ CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 175, METHOD_BUFFERED, FILE_ANY_ACCESS) // // CI Admin interfaces // #define FSCTL_CI_FORCE_MASTER_MERGE \ CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 176, METHOD_BUFFERED, FILE_ANY_ACCESS) #define FSCTL_CI_FORCE_SHADOW_MERGE \ CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 177, METHOD_BUFFERED, FILE_ANY_ACCESS) #define FSCTL_CI_ABORT_MERGES \ CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 178, METHOD_BUFFERED, FILE_ANY_ACCESS) #define FSCTL_CI_STATE \ CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 179, METHOD_BUFFERED, FILE_ANY_ACCESS) #endif // !DEFINED(INCL_IOFS)