Files
mars-nwe/include/nwnss/internal/nssFSHooks.h
2026-06-16 13:45:46 +02:00

719 lines
21 KiB
C

/****************************************************************************
|
| (C) Copyright 1985, 1991, 1993, 1996 Novell, Inc.
| All Rights Reserved.
|
| This program is free software; you can redistribute it and/or
| modify it under the terms of version 2 of the GNU General Public
| License as published by the Free Software Foundation.
|
| This program is distributed in the hope that it will be useful,
| but WITHOUT ANY WARRANTY; without even the implied warranty of
| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
| GNU General Public License for more details.
|
| You should have received a copy of the GNU General Public License
| along with this program; if not, contact Novell, Inc.
|
| To contact Novell about this file by physical or electronic mail,
| you may find current contact information at www.novell.com
|
|***************************************************************************
|
| NetWare Advance File Services (PSS) module
|
|---------------------------------------------------------------------------
|
| $Author: taysom $
| $Date: 2004-12-31 01:10:58 +0530 (Fri, 31 Dec 2004) $
|
| $RCSfile$
| $Revision: 465 $
|
|
| WARNING! WARNING! WARNING! WARNING! WARNING! WARNING! WARNING! WARNING!
|
| This header file should ONLY be used for NSS internal development.
| This includes Semantic Agents (SA) and Loadable Storage Services (LSS).
| Any other use may cause conflicts which NSS will NOT fix.
+-------------------------------------------------------------------------*/
#ifndef _NFSHOOKS_H_
#define _NFSHOOKS_H_
#ifdef __cplusplus
extern "C" {
#endif
#include <xUnicode.h>
#include <fshooks.h>
/*
* Hook Number
* 0 Erase File
* 1 Open File
* 2 Create File
* 3 Create and Open File
* 4 Rename Entry
* 5 Close File
* 6 Create Directory
* 7 Delete Directory
* 8 Modify Directory Entry
* 9 Salvage File
* 10 Purge File
* 11 RenameNameSpaceEntry
* 12 F3SalvageFile
* 13 F3PurgeFile
* 14 F3OpenCreateFileOrDir
* 15 F3RenameFileOrDir
* 16 F3EraseFileOrDir
* 17 F3ModifyDOSInfo
* 18 F3ModifyNSSpecificInfo
* 19 F3InitFileSearch
* 20 F3ContinueFileSearch
* 21 F3SearchSet
* 22 DirectorySearch
*/
#define EraseFile_Hook 0
#define OpenFile_Hook 1
#define CreateFile_Hook 2
#define CreateAndOpenFile_Hook 3
#define RenameEntry_Hook 4
#define CloseFile_Hook 5
#define CreateDirectory_Hook 6
#define DeleteDirectory_Hook 7
#define ModifyDirectoryEntry_Hook 8
#define SalvageFile_Hook 9
#define PurgeFile_Hook 10
#define RenameNameSpaceEntry_Hook 11
#define F3SalvageFile_Hook 12
#define F3PurgeFile_Hook 13
#define F3OpenCreate_Hook 14
#define F3RenameFile_Hook 15
#define F3EraseFile_Hook 16
#define F3ModifyInfo_Hook 17
#define F3ModifyNSSpecificInfo_Hook 18
#define F3InitFileSearch_Hook 19
#define F3ContinueFileSearch_Hook 20
#define F3SearchSet_Hook 21
#define DirectorySearch_Hook 22
extern struct FSHookParms_s FSHooksList[];
extern statusfunc_t FSHooksCall[];
extern NINT NWSA_ProcessFSMonitor(
LONG **monitorChain,
void *parameters);
extern NINT NWSA_ExitFSMonitor(
LONG **monitorChain,
void *parameters,
NINT rc);
extern LONG NW_FSHookVersion;
#define NWSA_FSHOOKS_ENTER(_index, _parms, _genmsg, _rc) \
{ \
if (*(FSHooksList[_index].EntCntNamePtr) != NULL) \
{ \
if (*(FSHooksList[_index].HookLinkNamePtr) != NULL) \
{ \
_rc = NWSA_ProcessFSMonitor( \
(FSHooksList[_index].HookLinkNamePtr), _parms); \
if (_rc != 0) \
{ \
SetErrno(_genmsg, NWSA_TranslateErrorToNSS(_rc)); \
} \
} \
} \
}
#define NWSA_FSHOOKS_EXIT(_index, _parms, _genmsg) \
{ \
if (*(FSHooksList[_index].ExCntNamePtr) != NULL) \
{ \
if (*(FSHooksList[_index].HookLinkNamePtr) != NULL) \
{ \
NWSA_ExitFSMonitor((FSHooksList[_index].HookLinkNamePtr), \
_parms, \
NWSA_TranslateError(GetErrno(_genmsg))); \
} \
} \
}
#define HOOKENTER 0
#define HOOKEXIT 1
#if _FSHOOKS IS_ENABLED
#define FSHOOKS_OR_EVENTS(_hookindex, _eventindex) \
(*(FSHooksList[_hookindex].HookLinkNamePtr) || \
(NEBEventInfo[_eventindex].consumers))
#define CHECK_FSHOOKS_CLOSE_ENTER(_index,_parms,_genmsg,_key) \
{ \
if (*(FSHooksList[_index].HookLinkNamePtr)) \
{ \
if (FSHooksCall[_index]) \
{ \
FSHooksCall[_index](_genmsg, HOOKENTER, _parms, _key); \
} \
} \
}
#define CHECK_FSHOOKS_CLOSE_EXIT(_index, _parms, _genmsg, _key) \
{ \
if (*(FSHooksList[_index].HookLinkNamePtr)) \
{ \
if (FSHooksCall[_index]) \
{ \
FSHooksCall[_index](_genmsg, HOOKEXIT, _parms, _key); \
} \
} \
}
#define CHECK_FSHOOKS_CREATE_ENTER(_index, _parms, _st, _golab, _genmsg, \
_namemsg, _createmsg, _beastname, _asciibeastname, _retfhidp) \
{ \
if (*(FSHooksList[_index].HookLinkNamePtr)) \
{ \
if (FSHooksCall[_index]) \
{ \
_st = FSHooksCall[_index](_genmsg, HOOKENTER, _parms, _namemsg, \
_createmsg, _beastname, _asciibeastname, _retfhidp); \
if (_st != zOK) \
goto _golab; \
} \
} \
}
#define CHECK_FSHOOKS_CREATE_EXIT(_index, _parms, _genmsg, \
_namemsg, _createmsg, _beastname, _asciibeastname, _retfhidp) \
{ \
if (*(FSHooksList[_index].HookLinkNamePtr)) \
{ \
if (FSHooksCall[_index]) \
{ \
FSHooksCall[_index](_genmsg, HOOKEXIT, _parms, _namemsg, \
_createmsg, _beastname, _asciibeastname, _retfhidp); \
} \
} \
}
#define CHECK_FSHOOKS_DELETE_ENTER(_index,_parms,_st,_golab,_genmsg,_namemsg)\
{ \
if (*(FSHooksList[_index].HookLinkNamePtr)) \
{ \
if (FSHooksCall[_index]) \
{ \
_st = FSHooksCall[_index](_genmsg, HOOKENTER, _parms, _namemsg);\
if (_st != zOK) \
goto _golab; \
} \
} \
}
#define CHECK_FSHOOKS_DELETE_EXIT(_index, _parms, _genmsg, _namemsg) \
{ \
if (*(FSHooksList[_index].HookLinkNamePtr)) \
{ \
if (FSHooksCall[_index]) \
{ \
FSHooksCall[_index](_genmsg, HOOKEXIT, _parms, _namemsg); \
} \
} \
}
#define CHECK_FSHOOKS_OPEN_ENTER(_index, _parms, _st, _golab, _genmsg, \
_namemsg, _openmsg, _retfhidp) \
{ \
if (*(FSHooksList[_index].HookLinkNamePtr)) \
{ \
if (FSHooksCall[_index]) \
{ \
_st = FSHooksCall[_index](_genmsg, HOOKENTER, _parms, \
_namemsg, _openmsg, _retfhidp); \
if (_st != zOK) \
goto _golab; \
} \
} \
}
#define CHECK_FSHOOKS_OPEN_EXIT(_index, _parms, _genmsg, \
_namemsg, _openmsg, _retfhidp) \
{ \
if (*(FSHooksList[_index].HookLinkNamePtr)) \
{ \
if (FSHooksCall[_index]) \
{ \
FSHooksCall[_index](_genmsg, HOOKEXIT, _parms, \
_namemsg, _openmsg, _retfhidp); \
} \
} \
}
#define CHECK_FSHOOKS_MODIFY_ENTER(_index, _parms, _st, _golab, _genmsg, \
_namemsg, _infomsg, _modvector) \
{ \
if (*(FSHooksList[_index].HookLinkNamePtr)) \
{ \
if (FSHooksCall[_index]) \
{ \
_st = FSHooksCall[_index](_genmsg, HOOKENTER, _parms, \
_namemsg, _infomsg, _modvector); \
if (_st != zOK) \
goto _golab; \
} \
} \
}
#define CHECK_FSHOOKS_MODIFY_EXIT(_index, _parms, _genmsg, \
_namemsg, _infomsg, _modvector) \
{ \
if (*(FSHooksList[_index].HookLinkNamePtr)) \
{ \
if (FSHooksCall[_index]) \
{ \
FSHooksCall[_index](_genmsg, HOOKEXIT, _parms, \
_namemsg, _infomsg, _modvector); \
} \
} \
}
#define CHECK_FSHOOKS_MODIFY_RIGHTS_ENTER(_index, _parms, _st, _golab, \
_genmsg, _namemsg, _rights, _minfo) \
{ \
if (!(_genmsg->flags & DO_NOT_SEND_FSHOOKS)) \
{ \
if (*(FSHooksList[_index].HookLinkNamePtr)) \
{ \
if (FSHooksCall[_index]) \
{ \
_st = FSHooksCall[_index](_genmsg, HOOKENTER, _parms, \
_namemsg, _rights, _minfo); \
if (_st != zOK) \
goto _golab; \
} \
} \
} \
}
#define CHECK_FSHOOKS_MODIFY_RIGHTS_EXIT(_index, _parms, \
_genmsg, _namemsg, _rights, _minfo) \
{ \
if (!(_genmsg->flags & DO_NOT_SEND_FSHOOKS)) \
{ \
if (*(FSHooksList[_index].HookLinkNamePtr)) \
{ \
if (FSHooksCall[_index]) \
{ \
FSHooksCall[_index](_genmsg, HOOKEXIT, _parms, \
_namemsg, _rights, _minfo); \
} \
} \
} \
}
#define CHECK_FSHOOKS_RENAME_ENTER(_index, _parms, _st, _golab, _genmsg, \
_srcnamemsg, _name, _asciiname, _zid, _renmsg) \
{ \
if (*(FSHooksList[_index].HookLinkNamePtr)) \
{ \
if (FSHooksCall[_index]) \
{ \
_st = FSHooksCall[_index](_genmsg, HOOKENTER, _parms, \
_srcnamemsg, _name, _asciiname, _zid, _renmsg); \
if (_st != zOK) \
goto _golab; \
} \
} \
}
#define CHECK_FSHOOKS_RENAME_EXIT(_index, _parms, _genmsg, \
_srcnamemsg, _name, _asciiname, _zid, _renmsg) \
{ \
if (*(FSHooksList[_index].HookLinkNamePtr)) \
{ \
if (FSHooksCall[_index]) \
{ \
FSHooksCall[_index](_genmsg, HOOKEXIT, _parms, \
_srcnamemsg, _name, _asciiname, _zid, _renmsg); \
} \
} \
}
#define CHECK_FSHOOKS_DIRECTORY_SEARCH_ENTER(_index, _parms, _st, _golab, \
_genmsg, _namemsg, _searchmsg) \
{ \
if (!(_genmsg->flags & DO_NOT_SEND_FSHOOKS)) \
{ \
if (*(FSHooksList[_index].HookLinkNamePtr)) \
{ \
if (FSHooksCall[_index]) \
{ \
NINT _latchtype; \
COMN_UNLATCH_NAMEMSG_BEASTS(_namemsg, &_latchtype); \
_st = FSHooksCall[_index](_genmsg, HOOKENTER, _parms, \
_namemsg, _searchmsg); \
COMN_LATCH_NAMEMSG_BEASTS(_namemsg, _latchtype); \
if (_st != zOK) \
goto _golab; \
} \
} \
} \
}
#define CHECK_FSHOOKS_DIRECTORY_SEARCH_EXIT(_index, _parms, \
_genmsg, _namemsg, _searchmsg) \
{ \
if (!(_genmsg->flags & DO_NOT_SEND_FSHOOKS)) \
{ \
if (*(FSHooksList[_index].HookLinkNamePtr)) \
{ \
if (FSHooksCall[_index]) \
{ \
NINT _latchtype; \
COMN_UNLATCH_NAMEMSG_BEASTS(_namemsg, &_latchtype); \
FSHooksCall[_index](_genmsg, HOOKEXIT, _parms, \
_namemsg, _searchmsg); \
COMN_LATCH_NAMEMSG_BEASTS(_namemsg, _latchtype); \
} \
} \
} \
}
#define CHECK_FSHOOKS_PURGE_ENTER(_index,_parms,_st,_golab,_genmsg,_namemsg)\
{ \
if (*(FSHooksList[_index].HookLinkNamePtr)) \
{ \
if (FSHooksCall[_index]) \
{ \
_st = FSHooksCall[_index](_genmsg, HOOKENTER, _parms, _namemsg);\
if (_st != zOK) \
goto _golab; \
} \
} \
}
#define CHECK_FSHOOKS_PURGE_EXIT(_index, _parms, _genmsg, _namemsg) \
{ \
if (*(FSHooksList[_index].HookLinkNamePtr)) \
{ \
if (FSHooksCall[_index]) \
{ \
FSHooksCall[_index](_genmsg, HOOKEXIT, _parms, _namemsg); \
} \
} \
}
#define CHECK_FSHOOKS_SALVAGE_ENTER(_index, _parms, _st, _golab, _genmsg, \
_srcnamemsg, _name, _asciiname) \
{ \
if (*(FSHooksList[_index].HookLinkNamePtr)) \
{ \
if (FSHooksCall[_index]) \
{ \
_st = FSHooksCall[_index](_genmsg, HOOKENTER, _parms, \
_srcnamemsg, _name, _asciiname); \
if (_st != zOK) \
goto _golab; \
} \
} \
}
#define CHECK_FSHOOKS_SALVAGE_EXIT(_index, _parms, _genmsg, \
_srcnamemsg, _name, _asciiname) \
{ \
if (*(FSHooksList[_index].HookLinkNamePtr)) \
{ \
if (FSHooksCall[_index]) \
{ \
FSHooksCall[_index](_genmsg, HOOKEXIT, _parms, \
_srcnamemsg, _name, _asciiname); \
} \
} \
}
#else
#define FSHOOKS_OR_EVENTS(_hookindex, _eventindex) \
(NEBEventInfo[_eventindex].consumers)
#define CHECK_FSHOOKS_CLOSE_ENTER(_index, _parms, _genmsg, _key) \
UNUSED_PARAM(*_parms)
#define CHECK_FSHOOKS_CLOSE_EXIT(_index, _parms, _genmsg, _key) \
UNUSED_PARAM(*_parms)
#define CHECK_FSHOOKS_CREATE_ENTER(_index, _parms, _st, _golab, _genmsg, \
_namemsg, _createmsg, _beastname, _asciibeastname, _retfhidp) \
UNUSED_PARAM(*_parms); \
UNUSED_PARAM(*_asciibeastname)
#define CHECK_FSHOOKS_CREATE_EXIT(_index, _parms, _genmsg, \
_namemsg, _createmsg, _beastname, _asciibeastname, _retfhidp) \
UNUSED_PARAM(*_parms)
#define CHECK_FSHOOKS_DELETE_ENTER(_index,_parms,_st,_golab,_genmsg,_namemsg)\
UNUSED_PARAM(*_parms)
#define CHECK_FSHOOKS_DELETE_EXIT(_index, _parms, _genmsg, _namemsg) \
UNUSED_PARAM(*_parms)
#define CHECK_FSHOOKS_OPEN_ENTER(_index, _parms, _st, _golab, _genmsg, \
_namemsg, _openmsg, _retfhidp) \
UNUSED_PARAM(*_parms)
#define CHECK_FSHOOKS_OPEN_EXIT(_index, _parms, _genmsg, \
_namemsg, _openmsg, _retfhidp) \
UNUSED_PARAM(*_parms)
#define CHECK_FSHOOKS_MODIFY_ENTER(_index, _parms, _st, _golab, _genmsg, \
_namemsg, _infomsg, _modvector) \
UNUSED_PARAM(*_parms); \
UNUSED_PARAM(*_modvector)
#define CHECK_FSHOOKS_MODIFY_EXIT(_index, _parms, _genmsg, \
_namemsg, _infomsg, _modvector) \
UNUSED_PARAM(*_parms)
#define CHECK_FSHOOKS_MODIFY_RIGHTS_ENTER(_index, _parms, _st, _golab, \
_genmsg, _namemsg, _rights, _minfo) \
UNUSED_PARAM(*_parms)
#define CHECK_FSHOOKS_MODIFY_RIGHTS_EXIT(_index, _parms, \
_genmsg, _namemsg, _rights, _minfo) \
UNUSED_PARAM(*_parms)
#define CHECK_FSHOOKS_RENAME_ENTER(_index, _parms, _st, _golab, _genmsg, \
_srcnamemsg, _name, _asciiname, _zid, _renmsg) \
UNUSED_PARAM(*_parms); \
UNUSED_PARAM(*_asciiname)
#define CHECK_FSHOOKS_RENAME_EXIT(_index, _parms, _genmsg, \
_srcnamemsg, _name, _asciiname, _zid, _renmsg) \
UNUSED_PARAM(*_parms)
#define CHECK_FSHOOKS_DIRECTORY_SEARCH_ENTER(_index, _parms, _st, _golab, \
_genmsg, _namemsg, _searchmsg) \
UNUSED_PARAM(*_parms)
#define CHECK_FSHOOKS_DIRECTORY_SEARCH_EXIT(_index, _parms, \
_genmsg, _namemsg, _searchmsg) \
UNUSED_PARAM(*_parms)
#define CHECK_FSHOOKS_PURGE_ENTER(_index,_parms,_st,_golab,_genmsg,_namemsg)\
UNUSED_PARAM(*_parms)
#define CHECK_FSHOOKS_PURGE_EXIT(_index, _parms, _genmsg, _namemsg) \
UNUSED_PARAM(*_parms)
#define CHECK_FSHOOKS_SALVAGE_ENTER(_index, _parms, _st, _golab, _genmsg, \
_srcnamemsg, _name, _asciiname) \
UNUSED_PARAM(*_parms)
#define CHECK_FSHOOKS_SALVAGE_EXIT(_index, _parms, _genmsg, \
_srcnamemsg, _name, _asciiname) \
UNUSED_PARAM(*_parms)
#endif
typedef struct FSHooks_Close_s
{
LONG station;
LONG task;
LONG handle;
} FSHooks_Close_s;
extern STATUS FSHOOKS_CloseCall(
GeneralMsg_s *genMsg,
NINT flag,
FSHooks_Close_s *parms,
Key_t key);
typedef struct FSHooks_F3OpenCreate_s
{
LONG station;
LONG task;
LONG volume;
LONG pathCount;
LONG pathBase;
BYTE *pathString;
LONG nameSpace;
LONG dataStream;
LONG openCreateFlags;
LONG searchAttributes;
LONG createAttributes;
LONG desiredAccessRights;
LONG retInfoMask;
LONG *handle;
BYTE *openCreateAction;
} FSHooks_F3OpenCreate_s;
extern STATUS FSHOOKS_CreateCall(
GeneralMsg_s *genMsg,
NINT flag,
FSHooks_F3OpenCreate_s *parms,
NamingMsg_s *nameMsg,
CreateMsg_s *createMsg,
unicode_t *beastName,
char *asciiBeastName,
FileHandleIDP_s *retFhIDP);
typedef struct FSHooks_F3EraseFile_s
{
LONG station;
LONG task;
LONG volume;
LONG pathCount;
LONG pathBase;
BYTE *pathString;
LONG nameSpace;
LONG searchAttributes;
} FSHooks_F3EraseFile_s;
extern STATUS FSHOOKS_DeleteCall(
GeneralMsg_s *genMsg,
NINT flag,
FSHooks_F3EraseFile_s *parms,
NamingMsg_s *nameMsg);
typedef struct FSHooks_OpenFile_s
{
LONG station;
LONG task;
LONG volume;
LONG pathBase;
BYTE *pathString;
LONG pathCount;
LONG nameSpace;
LONG matchBits;
LONG requestedRights;
LONG dataStreamNumber;
LONG *handle;
LONG *directoryNumber;
} FSHooks_OpenFile_s;
extern STATUS FSHOOKS_OpenCall(
GeneralMsg_s *genMsg,
NINT flag,
FSHooks_OpenFile_s *parms,
NamingMsg_s *nameMsg,
OpenMsg_s *openMsg,
FileHandleIDP_s *retFhIDP);
typedef struct FSHooks_ModifyInfo_s
{
LONG station;
LONG task;
LONG volume;
LONG pathBase;
BYTE *pathString;
LONG pathCount;
LONG nameSpace;
LONG matchBits;
LONG targetNameSpace;
struct ModifyStructure *modifyVector;
LONG modifyBits;
LONG allowWildCardsFlag;
} FSHooks_ModifyInfo_s;
extern STATUS FSHOOKS_ModifyCall(
GeneralMsg_s *genMsg,
NINT flag,
FSHooks_ModifyInfo_s *parms,
NamingMsg_s *nameMsg,
ModifyInfoMsg_s *infoMsg,
struct ModifyStructure *modifyVector);
typedef struct FSHooks_F3ModifyInfo_s
{
LONG station;
LONG task;
LONG volume;
LONG pathCount;
LONG pathBase;
BYTE *pathString;
LONG nameSpace;
LONG searchAttributes;
LONG modifyMask;
ModifyInfo *mInfo;
} FSHooks_F3ModifyInfo_s;
extern STATUS FSHOOKS_ModifyRightsCall(
GeneralMsg_s *genMsg,
NINT flag,
struct FSHooks_F3ModifyInfo_s *parms,
NamingMsg_s *nameMsg,
NINT inheritedRights,
ModifyInfo *mInfo);
typedef struct FSHooks_F3RenameFile_s
{
LONG station;
LONG task;
LONG nameSpace;
LONG renameFlag;
LONG searchAttributes;
LONG srcVolume;
LONG srcPathCount;
LONG srcPathBase;
BYTE *srcPathString;
LONG dstVolume;
LONG dstPathCount;
LONG dstPathBase;
BYTE *dstPathString;
} FSHooks_F3RenameFile_s;
extern STATUS FSHOOKS_RenameCall(
GeneralMsg_s *genMsg,
NINT flag,
FSHooks_F3RenameFile_s *parms,
NamingMsg_s *srcNameMsg,
unicode_t *newName,
char *asciiNewName,
Zid_t dstDirZid,
RenameMsg_s *renMsg);
typedef struct FSHooks_DirectorySearch_s
{
LONG station;
LONG volume;
LONG directoryNumber;
LONG nameSpace;
LONG startEntryNumber;
BYTE *pattern;
LONG matchBits;
struct DirectoryStructure **directoryEntry;
LONG *returnedDirectoryNumber;
}FSHooks_DirectorySearch_s;
extern STATUS FSHOOKS_DirectorySearchCall(
GeneralMsg_s *genMsg,
NINT flag,
FSHooks_DirectorySearch_s *parms,
NamingMsg_s *nameMsg,
SearchMsg_s *searchMsg);
typedef struct FSHooks_PurgeFile_s
{
LONG station;
LONG volume;
LONG directoryNumber;
LONG toBePurgedDirectoryNumber;
LONG nameSpace;
} FSHooks_PurgeFile_s;
extern STATUS FSHOOKS_PurgeCall(
GeneralMsg_s *genMsg,
NINT flag,
FSHooks_PurgeFile_s *parms,
NamingMsg_s *nameMsg);
typedef struct FSHooks_SalvageFile_s
{
LONG station;
LONG volume;
LONG directoryNumber;
LONG toBeSalvagedDirectoryNumber;
LONG nameSpace;
BYTE *newFilename;
} FSHooks_SalvageFile_s;
extern STATUS FSHOOKS_SalvageCall(
GeneralMsg_s *genMsg,
NINT flag,
FSHooks_SalvageFile_s *parms,
NamingMsg_s *nameMsg,
unicode_t *newName,
char *asciiNewName);
#ifdef __cplusplus
}
#endif
#endif