blob: 9c1c7b519ae85992938d766922ee514be7693365 [file]
//
// Copyright (c) Microsoft. All rights reserved.
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
//
/*++
Module Name:
shmobjectmanager.hpp
Abstract:
Shared memory based object manager
--*/
#ifndef _PAL_SHMOBJECTMANAGER_HPP_
#define _PAL_SHMOBJECTMANAGER_HPP_
#include "pal/corunix.hpp"
#include "pal/handlemgr.hpp"
#include "pal/list.h"
#include "shmobject.hpp"
namespace CorUnix
{
class CSharedMemoryObjectManager : public IPalObjectManager
{
protected:
CRITICAL_SECTION m_csListLock;
bool m_fListLockInitialized;
LIST_ENTRY m_leNamedObjects;
LIST_ENTRY m_leAnonymousObjects;
CSimpleHandleManager m_HandleManager;
PAL_ERROR
ImportSharedObjectIntoProcess(
CPalThread *pthr,
CObjectType *pot,
CObjectAttributes *poa,
SHMPTR shmSharedObjectData,
SHMObjData *psmod,
bool fAddRefSharedData,
CSharedMemoryObject **ppshmobj
);
public:
CSharedMemoryObjectManager()
:
m_fListLockInitialized(FALSE)
{
};
virtual ~CSharedMemoryObjectManager()
{
};
PAL_ERROR
Initialize(
void
);
PAL_ERROR
Shutdown(
CPalThread *pthr
);
PAL_ERROR
ConvertRemoteHandleToLocal(
CPalThread *pthr,
RHANDLE rhRemote,
HANDLE *phLocal
);
//
// IPalObjectManager routines
//
virtual
PAL_ERROR
AllocateObject(
CPalThread *pthr,
CObjectType *pot,
CObjectAttributes *poa,
IPalObject **ppobjNew
);
virtual
PAL_ERROR
RegisterObject(
CPalThread *pthr,
IPalObject *pobjToRegister,
CAllowedObjectTypes *paot,
DWORD dwRightsRequested,
HANDLE *pHandle,
IPalObject **ppobjRegistered
);
virtual
PAL_ERROR
LocateObject(
CPalThread *pthr,
CPalString *psObjectToLocate,
CAllowedObjectTypes *paot,
IPalObject **ppobj
);
virtual
PAL_ERROR
ObtainHandleForObject(
CPalThread *pthr,
IPalObject *pobj,
DWORD dwRightsRequested,
bool fInheritHandle,
IPalProcess *pProcessForHandle, // IN, OPTIONAL
HANDLE *pNewHandle
);
virtual
PAL_ERROR
RevokeHandle(
CPalThread *pthr,
HANDLE hHandleToRevoke
);
virtual
PAL_ERROR
ReferenceObjectByHandle(
CPalThread *pthr,
HANDLE hHandleToReference,
CAllowedObjectTypes *paot,
DWORD dwRightsRequired,
IPalObject **ppobj
);
virtual
PAL_ERROR
ReferenceMultipleObjectsByHandleArray(
CPalThread *pthr,
HANDLE rghHandlesToReference[],
DWORD dwHandleCount,
CAllowedObjectTypes *paot,
DWORD dwRightsRequired,
IPalObject *rgpobjs[]
);
virtual
PAL_ERROR
ReferenceObjectByForeignHandle(
CPalThread *pthr,
HANDLE hForeignHandle,
IPalProcess *pForeignProcess,
CAllowedObjectTypes *paot,
DWORD dwRightsRequired,
IPalObject **ppobj
);
};
}
#endif // _PAL_SHMOBJECTMANAGER_HPP_