Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

92 lines
1.9 KiB

  1. /*++
  2. Copyright (c) 2002 Microsoft Corporation
  3. Module Name:
  4. namedobj.hxx
  5. Abstract:
  6. Defines table-based creation and lookup services for
  7. "pseudo"-named kernel objects. This allows unrelated bits
  8. of code in the same process to find the same named objects
  9. without actually creating a full-fledged named kernel
  10. object.
  11. Revision History:
  12. JSimmons 02-28-02 Created
  13. --*/
  14. #pragma once
  15. class CNamedObject : public CTableElement
  16. {
  17. public:
  18. typedef enum
  19. {
  20. OBJTYPE_MIN = 1,
  21. EVENT = OBJTYPE_MIN,
  22. MUTEX,
  23. OBJTYPE_MAX,
  24. } OBJTYPE;
  25. // Override base object Release implementation
  26. DWORD Release();
  27. // Overrides of virtual CTableElement functions
  28. DWORD Hash();
  29. BOOL Compare(CTableKey &tk);
  30. BOOL Compare(CONST CTableElement *element);
  31. // our main purpose in life
  32. HANDLE Handle() { return _hHandle; }
  33. static BOOL ValidObjType(OBJTYPE type);
  34. static CNamedObject* Create(OBJTYPE type, LPWSTR pszName);
  35. private:
  36. CNamedObject (HANDLE hHandle, OBJTYPE type, LPWSTR pszName);
  37. ~CNamedObject();
  38. static HANDLE CNamedObject::CreateHandle(OBJTYPE type);
  39. void* operator new(size_t cb, size_t cbExtra)
  40. {
  41. return PrivMemAlloc(cb + cbExtra);
  42. }
  43. void operator delete(void *pv)
  44. {
  45. PrivMemFree(pv);
  46. }
  47. HANDLE _hHandle;
  48. OBJTYPE _type;
  49. WCHAR _szName[1];
  50. };
  51. class CNamedObjectTable
  52. {
  53. public:
  54. // Public functions
  55. CNamedObjectTable(ORSTATUS& status);
  56. CNamedObject* GetNamedObject(LPWSTR pszObjName, CNamedObject::OBJTYPE type);
  57. LONG ReleaseAndMaybeRemove(CNamedObject* pObject);
  58. private:
  59. // private data
  60. CHashTable* _pHashTbl;
  61. CSharedLock* _pLock;
  62. // private functions
  63. ~CNamedObjectTable();
  64. };